ntdll: Fix RtlGetSacl/DaclSecurityDescriptor for relative descriptors on 64-bit.

This commit is contained in:
Alexandre Julliard 2011-03-09 13:44:11 +01:00
parent c485996e5e
commit ab7efe7273
1 changed files with 16 additions and 10 deletions

View File

@ -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;
}