Author: sginsberg Date: Fri Jan 2 11:14:42 2009 New Revision: 38508
URL: http://svn.reactos.org/svn/reactos?rev=38508&view=rev Log: - Add Wine's GetPrivateObjectSecurity and use it instead of our that uses the unimplemented RtlQuerySecurityObject routine
Modified: trunk/reactos/dll/win32/advapi32/sec/misc.c
Modified: trunk/reactos/dll/win32/advapi32/sec/misc.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/advapi32/sec/misc... ============================================================================== --- trunk/reactos/dll/win32/advapi32/sec/misc.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/advapi32/sec/misc.c [iso-8859-1] Fri Jan 2 11:14:42 2009 @@ -2250,19 +2250,25 @@ }
+#if 0 +// +// Use when RtlQuerySecurityObject is implemented +// + /* * @implemented */ BOOL WINAPI -GetPrivateObjectSecurity(PSECURITY_DESCRIPTOR ObjectDescriptor, - SECURITY_INFORMATION SecurityInformation, - PSECURITY_DESCRIPTOR ResultantDescriptor, - DWORD DescriptorLength, - PDWORD ReturnLength) +GetPrivateObjectSecurity(IN PSECURITY_DESCRIPTOR ObjectDescriptor, + IN SECURITY_INFORMATION SecurityInformation, + OUT PSECURITY_DESCRIPTOR ResultantDescriptor OPTIONAL, + IN DWORD DescriptorLength, + OUT PDWORD ReturnLength) { NTSTATUS Status;
+ /* Call RTL */ Status = RtlQuerySecurityObject(ObjectDescriptor, SecurityInformation, ResultantDescriptor, @@ -2270,12 +2276,73 @@ ReturnLength); if (!NT_SUCCESS(Status)) { + /* Fail */ SetLastError(RtlNtStatusToDosError(Status)); return FALSE; }
+ /* Success */ return TRUE; } +#else +// +// Wine's implementation (as of December 30th 2008) +// + +/* + * @implemented + */ +BOOL +WINAPI +GetPrivateObjectSecurity(IN PSECURITY_DESCRIPTOR ObjectDescriptor, + IN SECURITY_INFORMATION SecurityInformation, + OUT PSECURITY_DESCRIPTOR ResultantDescriptor OPTIONAL, + IN DWORD DescriptorLength, + OUT PDWORD ReturnLength) +{ + SECURITY_DESCRIPTOR desc; + BOOL defaulted, present; + PACL pacl; + PSID psid; + + TRACE("(%p,0x%08x,%p,0x%08x,%p)\n", ObjectDescriptor, SecurityInformation, + ResultantDescriptor, DescriptorLength, ReturnLength); + + if (!InitializeSecurityDescriptor(&desc, SECURITY_DESCRIPTOR_REVISION)) + return FALSE; + + if (SecurityInformation & OWNER_SECURITY_INFORMATION) + { + if (!GetSecurityDescriptorOwner(ObjectDescriptor, &psid, &defaulted)) + return FALSE; + SetSecurityDescriptorOwner(&desc, psid, defaulted); + } + + if (SecurityInformation & GROUP_SECURITY_INFORMATION) + { + if (!GetSecurityDescriptorGroup(ObjectDescriptor, &psid, &defaulted)) + return FALSE; + SetSecurityDescriptorGroup(&desc, psid, defaulted); + } + + if (SecurityInformation & DACL_SECURITY_INFORMATION) + { + if (!GetSecurityDescriptorDacl(ObjectDescriptor, &present, &pacl, &defaulted)) + return FALSE; + SetSecurityDescriptorDacl(&desc, present, pacl, defaulted); + } + + if (SecurityInformation & SACL_SECURITY_INFORMATION) + { + if (!GetSecurityDescriptorSacl(ObjectDescriptor, &present, &pacl, &defaulted)) + return FALSE; + SetSecurityDescriptorSacl(&desc, present, pacl, defaulted); + } + + *ReturnLength = DescriptorLength; + return MakeSelfRelativeSD(&desc, ResultantDescriptor, ReturnLength); +} +#endif
/*
Please don't do this -- now nobody will know that the Rtl function needs to be called!
On 2-Jan-09, at 12:14 PM, sginsberg@svn.reactos.org wrote:
Author: sginsberg Date: Fri Jan 2 11:14:42 2009 New Revision: 38508
URL: http://svn.reactos.org/svn/reactos?rev=38508&view=rev Log:
- Add Wine's GetPrivateObjectSecurity and use it instead of our that
uses the unimplemented RtlQuerySecurityObject routine
Modified: trunk/reactos/dll/win32/advapi32/sec/misc.c
Modified: trunk/reactos/dll/win32/advapi32/sec/misc.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/advapi32/sec/misc... = = = = = = = = ====================================================================== --- trunk/reactos/dll/win32/advapi32/sec/misc.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/advapi32/sec/misc.c [iso-8859-1] Fri Jan 2 11:14:42 2009 @@ -2250,19 +2250,25 @@ }
+#if 0 +// +// Use when RtlQuerySecurityObject is implemented +//
/*
- @implemented
*/ BOOL WINAPI -GetPrivateObjectSecurity(PSECURITY_DESCRIPTOR ObjectDescriptor,
SECURITY_INFORMATION SecurityInformation,PSECURITY_DESCRIPTOR ResultantDescriptor,DWORD DescriptorLength,PDWORD ReturnLength)+GetPrivateObjectSecurity(IN PSECURITY_DESCRIPTOR ObjectDescriptor,
IN SECURITY_INFORMATION SecurityInformation,OUT PSECURITY_DESCRIPTORResultantDescriptor OPTIONAL,
IN DWORD DescriptorLength,OUT PDWORD ReturnLength){ NTSTATUS Status;
- /* Call RTL */ Status = RtlQuerySecurityObject(ObjectDescriptor, SecurityInformation, ResultantDescriptor,
@@ -2270,12 +2276,73 @@ ReturnLength); if (!NT_SUCCESS(Status)) {
/* Fail */ SetLastError(RtlNtStatusToDosError(Status)); return FALSE;}
/* Success */ return TRUE;
} +#else +// +// Wine's implementation (as of December 30th 2008) +//
+/*
- @implemented
- */
+BOOL +WINAPI +GetPrivateObjectSecurity(IN PSECURITY_DESCRIPTOR ObjectDescriptor,
IN SECURITY_INFORMATION SecurityInformation,OUT PSECURITY_DESCRIPTORResultantDescriptor OPTIONAL,
IN DWORD DescriptorLength,OUT PDWORD ReturnLength)+{
- SECURITY_DESCRIPTOR desc;
- BOOL defaulted, present;
- PACL pacl;
- PSID psid;
- TRACE("(%p,0x%08x,%p,0x%08x,%p)\n", ObjectDescriptor,
SecurityInformation,
ResultantDescriptor, DescriptorLength, ReturnLength);- if (!InitializeSecurityDescriptor(&desc,
SECURITY_DESCRIPTOR_REVISION))
return FALSE;- if (SecurityInformation & OWNER_SECURITY_INFORMATION)
- {
if (!GetSecurityDescriptorOwner(ObjectDescriptor, &psid,&defaulted))
return FALSE;SetSecurityDescriptorOwner(&desc, psid, defaulted);- }
- if (SecurityInformation & GROUP_SECURITY_INFORMATION)
- {
if (!GetSecurityDescriptorGroup(ObjectDescriptor, &psid,&defaulted))
return FALSE;SetSecurityDescriptorGroup(&desc, psid, defaulted);- }
- if (SecurityInformation & DACL_SECURITY_INFORMATION)
- {
if (!GetSecurityDescriptorDacl(ObjectDescriptor, &present,&pacl, &defaulted))
return FALSE;SetSecurityDescriptorDacl(&desc, present, pacl, defaulted);- }
- if (SecurityInformation & SACL_SECURITY_INFORMATION)
- {
if (!GetSecurityDescriptorSacl(ObjectDescriptor, &present,&pacl, &defaulted))
return FALSE;SetSecurityDescriptorSacl(&desc, present, pacl, defaulted);- }
- *ReturnLength = DescriptorLength;
- return MakeSelfRelativeSD(&desc, ResultantDescriptor,
ReturnLength); +} +#endif
/*
Best regards, Alex Ionescu