Skip to content

Commit 8dbbc2a

Browse files
dschoGit for Windows Build Agent
authored andcommitted
mingw: handle a file owned by the Administrators group correctly
When an Administrator creates a file or directory, the created file/directory is owned not by the Administrator SID, but by the _Administrators Group_ SID. The reason is that users with administrator privileges usually run in unprivileged ("non-elevated") mode, and their user SID does not change when running in elevated mode. This is is relevant e.g. when running a GitHub workflow on a build agent, which runs in elevated mode: cloning a Git repository in a script step will cause the worktree to be owned by the Administrators Group SID, for example. Let's handle this case as following: if the current user is an administrator, Git should consider a worktree owned by the Administrators Group as if it were owned by said user. Signed-off-by: Johannes Schindelin <[email protected]>
1 parent dae696a commit 8dbbc2a

File tree

1 file changed

+10
-0
lines changed

1 file changed

+10
-0
lines changed

compat/mingw.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2710,6 +2710,7 @@ int is_path_owned_by_current_sid(const char *path)
27102710
else if (sid && IsValidSid(sid)) {
27112711
/* Now, verify that the SID matches the current user's */
27122712
static PSID current_user_sid;
2713+
BOOL is_member;
27132714

27142715
if (!current_user_sid)
27152716
current_user_sid = get_current_user_sid();
@@ -2718,6 +2719,15 @@ int is_path_owned_by_current_sid(const char *path)
27182719
IsValidSid(current_user_sid) &&
27192720
EqualSid(sid, current_user_sid))
27202721
result = 1;
2722+
else if (IsWellKnownSid(sid, WinBuiltinAdministratorsSid) &&
2723+
CheckTokenMembership(NULL, sid, &is_member) &&
2724+
is_member)
2725+
/*
2726+
* If owned by the Administrators group, and the
2727+
* current user is an administrator, we consider that
2728+
* okay, too.
2729+
*/
2730+
result = 1;
27212731
else if (git_env_bool("GIT_TEST_DEBUG_UNSAFE_DIRECTORIES", 0)) {
27222732
LPSTR str1, str2, to_free1 = NULL, to_free2 = NULL;
27232733

0 commit comments

Comments
 (0)