Alexandre Julliard : ntdll: Properly handle empty but present ACLs in self-relative descriptors.

Alexandre Julliard julliard at winehq.org
Thu Feb 18 12:49:24 CST 2010


Module: wine
Branch: master
Commit: 8543c32442d79c33b59b8f6a96c849f6ba5f13df
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=8543c32442d79c33b59b8f6a96c849f6ba5f13df

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Thu Feb 18 12:57:33 2010 +0100

ntdll: Properly handle empty but present ACLs in self-relative descriptors.

---

 dlls/ntdll/sec.c |   16 ++++++++--------
 1 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/dlls/ntdll/sec.c b/dlls/ntdll/sec.c
index 64efdb5..6784848 100644
--- a/dlls/ntdll/sec.c
+++ b/dlls/ntdll/sec.c
@@ -478,12 +478,12 @@ NTSTATUS WINAPI RtlCopySecurityDescriptor(PSECURITY_DESCRIPTOR pSourceSD, PSECUR
             length = RtlLengthSid( Group );
             RtlCopySid(length, SELF_RELATIVE_FIELD( dst, Group ), Group);
         }
-        if (src->Control & SE_SACL_PRESENT)
+        if ((src->Control & SE_SACL_PRESENT) && src->Sacl)
         {
             Sacl = (PACL)SELF_RELATIVE_FIELD( src, Sacl );
             copy_acl(Sacl->AclSize, (PACL)SELF_RELATIVE_FIELD( dst, Sacl ), Sacl);
         }
-        if (src->Control & SE_DACL_PRESENT)
+        if ((src->Control & SE_DACL_PRESENT) && src->Dacl)
         {
             Dacl = (PACL)SELF_RELATIVE_FIELD( src, Dacl );
             copy_acl(Dacl->AclSize, (PACL)SELF_RELATIVE_FIELD( dst, Dacl ), Dacl);
@@ -604,7 +604,7 @@ NTSTATUS WINAPI RtlGetDaclSecurityDescriptor(
 
 	if ( (*lpbDaclPresent = (SE_DACL_PRESENT & lpsd->Control) ? 1 : 0) )
 	{
-	  if ( SE_SELF_RELATIVE & lpsd->Control)
+	  if ((SE_SELF_RELATIVE & lpsd->Control) && lpsd->Dacl)
             *pDacl = (PACL)SELF_RELATIVE_FIELD( lpsd, Dacl );
 	  else
 	    *pDacl = lpsd->Dacl;
@@ -673,7 +673,7 @@ NTSTATUS WINAPI RtlGetSaclSecurityDescriptor(
 
 	if ( (*lpbSaclPresent = (SE_SACL_PRESENT & lpsd->Control) ? 1 : 0) )
 	{
-	  if (SE_SELF_RELATIVE & lpsd->Control)
+	  if ((SE_SELF_RELATIVE & lpsd->Control) && lpsd->Sacl)
             *pSacl = (PACL)SELF_RELATIVE_FIELD( lpsd, Sacl );
 	  else
 	    *pSacl = lpsd->Sacl;
@@ -944,14 +944,14 @@ NTSTATUS WINAPI RtlSelfRelativeToAbsoluteSD(
         status = STATUS_BUFFER_TOO_SMALL;
     }
 
-    if (pRel->Control & SE_DACL_PRESENT &&
+    if ((pRel->Control & SE_DACL_PRESENT) && pRel->Dacl &&
         *lpdwDaclSize  < ((PACL)SELF_RELATIVE_FIELD(pRel,Dacl))->AclSize)
     {
         *lpdwDaclSize = ((PACL)SELF_RELATIVE_FIELD(pRel,Dacl))->AclSize;
         status = STATUS_BUFFER_TOO_SMALL;
     }
 
-    if (pRel->Control & SE_SACL_PRESENT &&
+    if ((pRel->Control & SE_SACL_PRESENT) && pRel->Sacl &&
         *lpdwSaclSize  < ((PACL)SELF_RELATIVE_FIELD(pRel,Sacl))->AclSize)
     {
         *lpdwSaclSize = ((PACL)SELF_RELATIVE_FIELD(pRel,Sacl))->AclSize;
@@ -983,7 +983,7 @@ NTSTATUS WINAPI RtlSelfRelativeToAbsoluteSD(
     pAbs->Owner = NULL;
     pAbs->Group = NULL;
 
-    if (pRel->Control & SE_SACL_PRESENT)
+    if ((pRel->Control & SE_SACL_PRESENT) && pRel->Sacl)
     {
         PACL pAcl = (PACL)SELF_RELATIVE_FIELD( pRel, Sacl );
 
@@ -991,7 +991,7 @@ NTSTATUS WINAPI RtlSelfRelativeToAbsoluteSD(
         pAbs->Sacl = pSacl;
     }
 
-    if (pRel->Control & SE_DACL_PRESENT)
+    if ((pRel->Control & SE_DACL_PRESENT) && pRel->Dacl)
     {
         PACL pAcl = (PACL)SELF_RELATIVE_FIELD( pRel, Dacl );
         memcpy(pDacl, pAcl, pAcl->AclSize);




More information about the wine-cvs mailing list