mirror of
https://github.com/reactos/reactos.git
synced 2025-04-22 13:10:39 +00:00
unlock some RTL files and commit the patch from bug 1341, by Thomas
svn path=/trunk/; revision=21276
This commit is contained in:
parent
f4f32b380c
commit
dba8cd9525
1 changed files with 36 additions and 91 deletions
|
@ -107,6 +107,7 @@ RtlpAddKnownAce (PACL Acl,
|
||||||
ULONG Type)
|
ULONG Type)
|
||||||
{
|
{
|
||||||
PACE Ace;
|
PACE Ace;
|
||||||
|
ULONG InvalidFlags;
|
||||||
|
|
||||||
PAGED_CODE_RTL();
|
PAGED_CODE_RTL();
|
||||||
|
|
||||||
|
@ -123,6 +124,19 @@ RtlpAddKnownAce (PACL Acl,
|
||||||
{
|
{
|
||||||
Revision = Acl->AclRevision;
|
Revision = Acl->AclRevision;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Validate the flags */
|
||||||
|
if (Type == SYSTEM_AUDIT_ACE_TYPE)
|
||||||
|
InvalidFlags = Flags & ~(VALID_INHERIT_FLAGS |
|
||||||
|
SUCCESSFUL_ACCESS_ACE_FLAG | FAILED_ACCESS_ACE_FLAG);
|
||||||
|
else
|
||||||
|
InvalidFlags = Flags & ~VALID_INHERIT_FLAGS;
|
||||||
|
|
||||||
|
if (InvalidFlags != 0)
|
||||||
|
{
|
||||||
|
return(STATUS_INVALID_PARAMETER);
|
||||||
|
}
|
||||||
|
|
||||||
if (!RtlFirstFreeAce(Acl, &Ace))
|
if (!RtlFirstFreeAce(Acl, &Ace))
|
||||||
{
|
{
|
||||||
return(STATUS_INVALID_ACL);
|
return(STATUS_INVALID_ACL);
|
||||||
|
@ -331,59 +345,26 @@ RtlAddAuditAccessAce(PACL Acl,
|
||||||
BOOLEAN Success,
|
BOOLEAN Success,
|
||||||
BOOLEAN Failure)
|
BOOLEAN Failure)
|
||||||
{
|
{
|
||||||
PACE Ace;
|
|
||||||
ULONG Flags = 0;
|
ULONG Flags = 0;
|
||||||
|
|
||||||
PAGED_CODE_RTL();
|
PAGED_CODE_RTL();
|
||||||
|
|
||||||
if (Success != FALSE)
|
if (Success)
|
||||||
{
|
{
|
||||||
Flags |= SUCCESSFUL_ACCESS_ACE_FLAG;
|
Flags |= SUCCESSFUL_ACCESS_ACE_FLAG;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Failure != FALSE)
|
if (Failure)
|
||||||
{
|
{
|
||||||
Flags |= FAILED_ACCESS_ACE_FLAG;
|
Flags |= FAILED_ACCESS_ACE_FLAG;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!RtlValidSid(Sid))
|
return RtlpAddKnownAce (Acl,
|
||||||
{
|
Revision,
|
||||||
return(STATUS_INVALID_SID);
|
Flags,
|
||||||
}
|
AccessMask,
|
||||||
|
Sid,
|
||||||
if (Acl->AclRevision > MAX_ACL_REVISION ||
|
SYSTEM_AUDIT_ACE_TYPE);
|
||||||
Revision > MAX_ACL_REVISION)
|
|
||||||
{
|
|
||||||
return(STATUS_REVISION_MISMATCH);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Revision < Acl->AclRevision)
|
|
||||||
{
|
|
||||||
Revision = Acl->AclRevision;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!RtlFirstFreeAce(Acl, &Ace))
|
|
||||||
{
|
|
||||||
return(STATUS_INVALID_ACL);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Ace == NULL ||
|
|
||||||
((ULONG_PTR)Ace + RtlLengthSid(Sid) + sizeof(ACE)) > ((ULONG_PTR)Acl + Acl->AclSize))
|
|
||||||
{
|
|
||||||
return(STATUS_ALLOTTED_SPACE_EXCEEDED);
|
|
||||||
}
|
|
||||||
|
|
||||||
Ace->Header.AceFlags = Flags;
|
|
||||||
Ace->Header.AceType = SYSTEM_AUDIT_ACE_TYPE;
|
|
||||||
Ace->Header.AceSize = RtlLengthSid(Sid) + sizeof(ACE);
|
|
||||||
Ace->AccessMask = AccessMask;
|
|
||||||
RtlCopySid(RtlLengthSid(Sid),
|
|
||||||
(PSID)(Ace + 1),
|
|
||||||
Sid);
|
|
||||||
Acl->AceCount++;
|
|
||||||
Acl->AclRevision = Revision;
|
|
||||||
|
|
||||||
return(STATUS_SUCCESS);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -399,58 +380,22 @@ RtlAddAuditAccessAceEx(PACL Acl,
|
||||||
BOOLEAN Success,
|
BOOLEAN Success,
|
||||||
BOOLEAN Failure)
|
BOOLEAN Failure)
|
||||||
{
|
{
|
||||||
PACE Ace;
|
if (Success)
|
||||||
|
{
|
||||||
|
Flags |= SUCCESSFUL_ACCESS_ACE_FLAG;
|
||||||
|
}
|
||||||
|
|
||||||
PAGED_CODE_RTL();
|
if (Failure)
|
||||||
|
{
|
||||||
|
Flags |= FAILED_ACCESS_ACE_FLAG;
|
||||||
|
}
|
||||||
|
|
||||||
if (Success != FALSE)
|
return RtlpAddKnownAce (Acl,
|
||||||
{
|
Revision,
|
||||||
Flags |= SUCCESSFUL_ACCESS_ACE_FLAG;
|
Flags,
|
||||||
}
|
AccessMask,
|
||||||
|
Sid,
|
||||||
if (Failure != FALSE)
|
SYSTEM_AUDIT_ACE_TYPE);
|
||||||
{
|
|
||||||
Flags |= FAILED_ACCESS_ACE_FLAG;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!RtlValidSid(Sid))
|
|
||||||
{
|
|
||||||
return STATUS_INVALID_SID;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Acl->AclRevision > MAX_ACL_REVISION ||
|
|
||||||
Revision > MAX_ACL_REVISION)
|
|
||||||
{
|
|
||||||
return STATUS_REVISION_MISMATCH;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Revision < Acl->AclRevision)
|
|
||||||
{
|
|
||||||
Revision = Acl->AclRevision;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!RtlFirstFreeAce(Acl, &Ace))
|
|
||||||
{
|
|
||||||
return STATUS_INVALID_ACL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Ace == NULL ||
|
|
||||||
((ULONG_PTR)Ace + RtlLengthSid(Sid) + sizeof(ACE)) >= ((ULONG_PTR)Acl + Acl->AclSize))
|
|
||||||
{
|
|
||||||
return STATUS_ALLOTTED_SPACE_EXCEEDED;
|
|
||||||
}
|
|
||||||
|
|
||||||
Ace->Header.AceFlags = Flags;
|
|
||||||
Ace->Header.AceType = SYSTEM_AUDIT_ACE_TYPE;
|
|
||||||
Ace->Header.AceSize = RtlLengthSid(Sid) + sizeof(ACE);
|
|
||||||
Ace->AccessMask = AccessMask;
|
|
||||||
RtlCopySid(RtlLengthSid(Sid),
|
|
||||||
(PSID)(Ace + 1),
|
|
||||||
Sid);
|
|
||||||
Acl->AceCount++;
|
|
||||||
Acl->AclRevision = Revision;
|
|
||||||
|
|
||||||
return STATUS_SUCCESS;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue