@@ -52,8 +52,8 @@ pub mod identity {
52
52
use std:: borrow:: Cow ;
53
53
use std:: path:: Path ;
54
54
55
- fn err ( msg : & str ) -> std:: io:: Error {
56
- std:: io:: Error :: new ( std:: io:: ErrorKind :: Other , msg)
55
+ fn err ( msg : impl Into < String > ) -> std:: io:: Error {
56
+ std:: io:: Error :: new ( std:: io:: ErrorKind :: Other , msg. into ( ) )
57
57
}
58
58
59
59
pub fn is_path_owned_by_current_user ( path : Cow < ' _ , Path > ) -> std:: io:: Result < bool > {
@@ -75,14 +75,14 @@ pub mod identity {
75
75
. map_err ( |_| err ( "Failed to open process token" ) ) ?;
76
76
77
77
let mut len = 0_u32 ;
78
- if Security :: GetTokenInformation ( & handle, Security :: TokenUser , std:: ptr:: null_mut ( ) , 0 , & mut len)
78
+ if ! Security :: GetTokenInformation ( handle, Security :: TokenUser , std:: ptr:: null_mut ( ) , 0 , & mut len)
79
79
. as_bool ( )
80
80
{
81
- let mut token_user = Security :: TOKEN_USER :: default ( ) ;
81
+ let mut info = Security :: TOKEN_USER :: default ( ) ;
82
82
if Security :: GetTokenInformation (
83
- & handle,
83
+ handle,
84
84
Security :: TokenUser ,
85
- & mut token_user as * mut _ as * mut std:: ffi:: c_void ,
85
+ & mut info as * mut _ as * mut std:: ffi:: c_void ,
86
86
len,
87
87
& mut len,
88
88
)
@@ -91,16 +91,13 @@ pub mod identity {
91
91
// NOTE: we avoid to copy the sid or cache it in any way for now, even though it should be possible
92
92
// with a custom allocation/vec/box and it's just very raw. Can the `windows` crate do better?
93
93
// When/If yes, then let's improve this.
94
- if Security :: IsValidSid ( token_user . User . Sid ) . as_bool ( ) {
94
+ if Security :: IsValidSid ( info . User . Sid ) . as_bool ( ) {
95
95
use std:: os:: windows:: ffi:: OsStrExt ;
96
96
let mut wide_path: Vec < _ > = path. as_ref ( ) . as_os_str ( ) . encode_wide ( ) . collect ( ) ;
97
- // err = GetNamedSecurityInfoW(wpath, SE_FILE_OBJECT,
98
- // OWNER_SECURITY_INFORMATION |
99
- // DACL_SECURITY_INFORMATION,
100
- // &sid, NULL, NULL, NULL, &descriptor);
97
+ wide_path. push ( 0 ) ;
101
98
let mut path_sid = PSID :: default ( ) ;
102
99
let res = Security :: Authorization :: GetNamedSecurityInfoW (
103
- windows:: core:: PCWSTR ( wide_path. as_mut_ptr ( ) ) ,
100
+ windows:: core:: PCWSTR ( wide_path. as_ptr ( ) ) ,
104
101
SE_FILE_OBJECT ,
105
102
Security :: OWNER_SECURITY_INFORMATION | Security :: DACL_SECURITY_INFORMATION ,
106
103
& mut path_sid,
@@ -111,18 +108,19 @@ pub mod identity {
111
108
) ;
112
109
113
110
if res == ERROR_SUCCESS . 0 && Security :: IsValidSid ( path_sid) . as_bool ( ) {
114
- is_owned = Security :: EqualSid ( path_sid, token_user. User . Sid ) . as_bool ( ) ;
111
+ is_owned = Security :: EqualSid ( path_sid, info. User . Sid ) . as_bool ( ) ;
112
+ dbg ! ( is_owned, path. as_ref( ) ) ;
115
113
} else {
116
- err_msg = "couldn't get owner for path or it wasn't valid" . into ( ) ;
114
+ err_msg = format ! ( "couldn't get owner for path or it wasn't valid: {}" , res ) . into ( ) ;
117
115
}
118
116
} else {
119
- err_msg = "owner id of current process wasn't set or valid" . into ( ) ;
117
+ err_msg = String :: from ( "owner id of current process wasn't set or valid" ) . into ( ) ;
120
118
}
121
119
} else {
122
- err_msg = "Could not get information about the token user" . into ( ) ;
120
+ err_msg = String :: from ( "Could not get information about the token user" ) . into ( ) ;
123
121
}
124
122
} else {
125
- err_msg = "Could not get token information for length of token user" . into ( ) ;
123
+ err_msg = String :: from ( "Could not get token information for length of token user" ) . into ( ) ;
126
124
}
127
125
CloseHandle ( handle) ;
128
126
if !descriptor. is_invalid ( ) {
0 commit comments