[ros-dev] [ros-diffs] [sginsberg] 38508: - Add Wine's GetPrivateObjectSecurity and use it instead of our that uses the unimplemented RtlQuerySecurityObject routine
Alex Ionescu
ionucu at videotron.ca
Sat Jan 3 01:03:55 CET 2009
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 at 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.c?rev=38508&r1=38507&r2=38508&view=diff
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- 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
>
>
> /*
>
Best regards,
Alex Ionescu
More information about the Ros-dev
mailing list