File tree Expand file tree Collapse file tree 2 files changed +29
-0
lines changed Expand file tree Collapse file tree 2 files changed +29
-0
lines changed Original file line number Diff line number Diff line change @@ -33,10 +33,18 @@ is running as 'root' in a non Windows platform that provides sudo,
33
33
however, git checks the SUDO_UID environment variable that sudo creates
34
34
and will allow access to the uid recorded as its value in addition to
35
35
the id from 'root'.
36
+ +
36
37
This is to make it easy to perform a common sequence during installation
37
38
"make && sudo make install". A git process running under 'sudo' runs as
38
39
'root' but the 'sudo' command exports the environment variable to record
39
40
which id the original user has.
41
+ +
40
42
If that is not what you would prefer and want git to only trust
41
43
repositories that are owned by root instead, then you can remove
42
44
the `SUDO_UID` variable from root's environment before invoking git.
45
+ +
46
+ Due to the permission model on Windows where ACLs are used instead of
47
+ Unix' simpler permission model, it can be a bit tricky to figure out why
48
+ a directory is considered unsafe. To help with this, Git will provide
49
+ more detailed information when the environment variable
50
+ `GIT_TEST_DEBUG_UNSAFE_DIRECTORIES` is set to `true`.
Original file line number Diff line number Diff line change 1
1
#include "../git-compat-util.h"
2
2
#include "win32.h"
3
3
#include <aclapi.h>
4
+ #include <sddl.h>
4
5
#include <conio.h>
5
6
#include <wchar.h>
6
7
#include "../strbuf.h"
@@ -2720,6 +2721,26 @@ int is_path_owned_by_current_sid(const char *path)
2720
2721
IsValidSid (current_user_sid ) &&
2721
2722
EqualSid (sid , current_user_sid ))
2722
2723
result = 1 ;
2724
+ else if (git_env_bool ("GIT_TEST_DEBUG_UNSAFE_DIRECTORIES" , 0 )) {
2725
+ LPSTR str1 , str2 , to_free1 = NULL , to_free2 = NULL ;
2726
+
2727
+ if (ConvertSidToStringSidA (sid , & str1 ))
2728
+ to_free1 = str1 ;
2729
+ else
2730
+ str1 = "(inconvertible)" ;
2731
+
2732
+ if (!current_user_sid )
2733
+ str2 = "(none)" ;
2734
+ else if (!IsValidSid (current_user_sid ))
2735
+ str2 = "(invalid)" ;
2736
+ else if (ConvertSidToStringSidA (current_user_sid , & str2 ))
2737
+ to_free2 = str2 ;
2738
+ else
2739
+ str2 = "(inconvertible)" ;
2740
+ warning ("'%s' is owned by:\n\t'%s'\nbut the current user is:\n\t'%s'" , path , str1 , str2 );
2741
+ LocalFree (to_free1 );
2742
+ LocalFree (to_free2 );
2743
+ }
2723
2744
}
2724
2745
2725
2746
/*
You can’t perform that action at this time.
0 commit comments