[NTOS:MM] Fix ViewSize parameter passed to MiInsertVadEx() from MiCreatePebOrTeb()
[reactos.git] / ntoskrnl / se / acl.c
index 35a239c..392f2a9 100644 (file)
@@ -38,7 +38,8 @@ SepInitDACLs(VOID)
     /* create PublicDefaultDacl */
     AclLength = sizeof(ACL) +
                 (sizeof(ACE) + RtlLengthSid(SeWorldSid)) +
-                (sizeof(ACE) + RtlLengthSid(SeLocalSystemSid));
+                (sizeof(ACE) + RtlLengthSid(SeLocalSystemSid)) +
+                (sizeof(ACE) + RtlLengthSid(SeAliasAdminsSid));
 
     SePublicDefaultDacl = ExAllocatePoolWithTag(PagedPool,
                                                 AclLength,
@@ -60,6 +61,11 @@ SepInitDACLs(VOID)
                            GENERIC_ALL,
                            SeLocalSystemSid);
 
+    RtlAddAccessAllowedAce(SePublicDefaultDacl,
+                           ACL_REVISION,
+                           GENERIC_ALL,
+                           SeAliasAdminsSid);
+
     /* create PublicDefaultUnrestrictedDacl */
     AclLength = sizeof(ACL) +
                 (sizeof(ACE) + RtlLengthSid(SeWorldSid)) +
@@ -462,10 +468,27 @@ SepPropagateAcl(
         AceDest = (PACCESS_ALLOWED_ACE)CurrentDest;
         AceSource = (PACCESS_ALLOWED_ACE)CurrentSource;
 
+        if (AceSource->Header.AceType > ACCESS_MAX_MS_V2_ACE_TYPE)
+        {
+            /* FIXME: handle object & compound ACEs */
+            AceSize = AceSource->Header.AceSize;
+
+            if (*AclLength >= Written + AceSize)
+            {
+                RtlCopyMemory(AceDest, AceSource, AceSize);
+            }
+            CurrentDest += AceSize;
+            CurrentSource += AceSize;
+            Written += AceSize;
+            AceCount++;
+            continue;
+        }
+
         /* These all have the same structure */
         ASSERT(AceSource->Header.AceType == ACCESS_ALLOWED_ACE_TYPE ||
-                  AceSource->Header.AceType == ACCESS_DENIED_ACE_TYPE ||
-                  AceSource->Header.AceType == SYSTEM_AUDIT_ACE_TYPE);
+               AceSource->Header.AceType == ACCESS_DENIED_ACE_TYPE ||
+               AceSource->Header.AceType == SYSTEM_AUDIT_ACE_TYPE ||
+               AceSource->Header.AceType == SYSTEM_ALARM_ACE_TYPE);
 
         ASSERT(AceSource->Header.AceSize % sizeof(ULONG) == 0);
         ASSERT(AceSource->Header.AceSize >= sizeof(*AceSource));