[PATCH v2 3/5] mingw: provide details about unsafe directories' ownership
From: Johannes Schindelin via GitGitGadget <hidden>
Date: 2022-08-08 13:28:08
Subsystem:
the rest · Maintainer:
Linus Torvalds
From: Johannes Schindelin <redacted> When Git refuses to use an existing repository because it is owned by someone else than the current user, it can be a bit tricky on Windows to figure out what is going on. Let's help with that by providing more detailed information. Signed-off-by: Johannes Schindelin <redacted> --- compat/mingw.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+)
diff --git a/compat/mingw.c b/compat/mingw.c
index f12b7df16d9..2c09c5bffee 100644
--- a/compat/mingw.c
+++ b/compat/mingw.c@@ -1,6 +1,7 @@ #include "../git-compat-util.h" #include "win32.h" #include <aclapi.h> +#include <sddl.h> #include <conio.h> #include <wchar.h> #include "../strbuf.h"
@@ -2720,6 +2721,29 @@ int is_path_owned_by_current_sid(const char *path, struct strbuf *report) IsValidSid(current_user_sid) && EqualSid(sid, current_user_sid)) result = 1; + else if (report) { + LPSTR str1, str2, to_free1 = NULL, to_free2 = NULL; + + if (ConvertSidToStringSidA(sid, &str1)) + to_free1 = str1; + else + str1 = "(inconvertible)"; + + if (!current_user_sid) + str2 = "(none)"; + else if (!IsValidSid(current_user_sid)) + str2 = "(invalid)"; + else if (ConvertSidToStringSidA(current_user_sid, &str2)) + to_free2 = str2; + else + str2 = "(inconvertible)"; + strbuf_addf(report, + "'%s' is owned by:\n" + "\t'%s'\nbut the current user is:\n" + "\t'%s'\n", path, str1, str2); + LocalFree(to_free1); + LocalFree(to_free2); + } } /*
--
gitgitgadget