From ab7efe727363b52e31ff7a29763a1bcaa623efe1 Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Wed, 9 Mar 2011 13:44:11 +0100 Subject: [PATCH] ntdll: Fix RtlGetSacl/DaclSecurityDescriptor for relative descriptors on 64-bit. --- dlls/ntdll/sec.c | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/dlls/ntdll/sec.c b/dlls/ntdll/sec.c index 6784848de30..c8e8a4deed5 100644 --- a/dlls/ntdll/sec.c +++ b/dlls/ntdll/sec.c @@ -604,12 +604,15 @@ NTSTATUS WINAPI RtlGetDaclSecurityDescriptor( if ( (*lpbDaclPresent = (SE_DACL_PRESENT & lpsd->Control) ? 1 : 0) ) { - if ((SE_SELF_RELATIVE & lpsd->Control) && lpsd->Dacl) - *pDacl = (PACL)SELF_RELATIVE_FIELD( lpsd, Dacl ); - else - *pDacl = lpsd->Dacl; + if (lpsd->Control & SE_SELF_RELATIVE) + { + SECURITY_DESCRIPTOR_RELATIVE *sdr = pSecurityDescriptor; + if (sdr->Dacl) *pDacl = (PACL)SELF_RELATIVE_FIELD( sdr, Dacl ); + else *pDacl = NULL; + } + else *pDacl = lpsd->Dacl; - *lpbDaclDefaulted = (( SE_DACL_DEFAULTED & lpsd->Control ) ? 1 : 0); + *lpbDaclDefaulted = (lpsd->Control & SE_DACL_DEFAULTED) != 0; } else { @@ -673,12 +676,15 @@ NTSTATUS WINAPI RtlGetSaclSecurityDescriptor( if ( (*lpbSaclPresent = (SE_SACL_PRESENT & lpsd->Control) ? 1 : 0) ) { - if ((SE_SELF_RELATIVE & lpsd->Control) && lpsd->Sacl) - *pSacl = (PACL)SELF_RELATIVE_FIELD( lpsd, Sacl ); - else - *pSacl = lpsd->Sacl; + if (lpsd->Control & SE_SELF_RELATIVE) + { + SECURITY_DESCRIPTOR_RELATIVE *sdr = pSecurityDescriptor; + if (sdr->Sacl) *pSacl = (PACL)SELF_RELATIVE_FIELD( sdr, Sacl ); + else *pSacl = NULL; + } + else *pSacl = lpsd->Sacl; - *lpbSaclDefaulted = (( SE_SACL_DEFAULTED & lpsd->Control ) ? 1 : 0); + *lpbSaclDefaulted = (lpsd->Control & SE_SACL_DEFAULTED) != 0; } return STATUS_SUCCESS; }