Fix NtAccessCheck so it works with relative SECURITY_DESCRIPTORs
Evan Deaubl
wine at warpedview.com
Mon May 30 14:07:19 CDT 2005
ChangeLog:
* Fix NtAccessCheck so it works with relative SECURITY_DESCRIPTORs
Index: dlls/ntdll/sec.c
===================================================================
RCS file: /home/wine/wine/dlls/ntdll/sec.c,v
retrieving revision 1.52
diff -u -p -r1.52 sec.c
--- dlls/ntdll/sec.c 24 May 2005 12:32:19 -0000 1.52
+++ dlls/ntdll/sec.c 30 May 2005 18:59:13 -0000
@@ -1208,15 +1208,29 @@ NtAccessCheck(
/* marshal security descriptor */
sd.control = RealSD->Control;
- sd.owner_len = RtlLengthSid( RealSD->Owner );
- sd.group_len = RtlLengthSid( RealSD->Group );
- sd.sacl_len = (RealSD->Sacl ? RealSD->Sacl->AclSize : 0);
- sd.dacl_len = (RealSD->Dacl ? RealSD->Dacl->AclSize : 0);
+
+ PSID owner;
+ BOOLEAN defaulted, present;
+ RtlGetOwnerSecurityDescriptor(RealSD, &owner, &defaulted);
+ sd.owner_len = RtlLengthSid( owner );
+
+ PSID group;
+ RtlGetGroupSecurityDescriptor(RealSD, &group, &defaulted);
+ sd.group_len = RtlLengthSid( group );
+
+ PACL sacl;
+ RtlGetSaclSecurityDescriptor(RealSD, &present, &sacl, &defaulted);
+ sd.sacl_len = (present ? sacl->AclSize : 0);
+
+ PACL dacl;
+ RtlGetDaclSecurityDescriptor(RealSD, &present, &dacl, &defaulted);
+ sd.dacl_len = (present ? dacl->AclSize : 0);
+
wine_server_add_data( req, &sd, sizeof(sd) );
- wine_server_add_data( req, RealSD->Owner, sd.owner_len );
- wine_server_add_data( req, RealSD->Group, sd.group_len );
- wine_server_add_data( req, RealSD->Sacl, sd.sacl_len );
- wine_server_add_data( req, RealSD->Dacl, sd.dacl_len );
+ wine_server_add_data( req, owner, sd.owner_len );
+ wine_server_add_data( req, group, sd.group_len );
+ wine_server_add_data( req, sacl, sd.sacl_len );
+ wine_server_add_data( req, dacl, sd.dacl_len );
wine_server_set_reply( req, &PrivilegeSet->Privilege, *ReturnLength - FIELD_OFFSET( PRIVILEGE_SET, Privilege ) );
More information about the wine-patches
mailing list