Skip to content

Commit

Permalink
mingw: provide details about unsafe directories' ownership
Browse files Browse the repository at this point in the history
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 <[email protected]>
Signed-off-by: Junio C Hamano <[email protected]>
  • Loading branch information
dscho authored and gitster committed Aug 8, 2022
1 parent 17d3883 commit e883e04
Showing 1 changed file with 24 additions and 0 deletions.
24 changes: 24 additions & 0 deletions compat/mingw.c
Original file line number Diff line number Diff line change
@@ -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"
Expand Down Expand Up @@ -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);
}
}

/*
Expand Down

0 comments on commit e883e04

Please sign in to comment.