Mikolaj Zalewski : advapi32: Make ConvertStringSecurityDescriptorToSecurityDescriptor write the ACL.
Alexandre Julliard
julliard at winehq.org
Fri Sep 28 06:45:58 CDT 2007
Module: wine
Branch: master
Commit: 8188ce6fb116b4516c214c08c5956d9347af896f
URL: http://source.winehq.org/git/wine.git/?a=commit;h=8188ce6fb116b4516c214c08c5956d9347af896f
Author: Mikolaj Zalewski <mikolajz at google.com>
Date: Thu Sep 27 11:44:51 2007 -0700
advapi32: Make ConvertStringSecurityDescriptorToSecurityDescriptor write the ACL.
---
dlls/advapi32/security.c | 26 +++++++++++++++++++++++++-
1 files changed, 25 insertions(+), 1 deletions(-)
diff --git a/dlls/advapi32/security.c b/dlls/advapi32/security.c
index 31ee263..ac189de 100644
--- a/dlls/advapi32/security.c
+++ b/dlls/advapi32/security.c
@@ -3239,6 +3239,8 @@ static BOOL ParseStringAclToAcl(LPCWSTR StringAcl, LPDWORD lpdwFlags,
DWORD val;
DWORD sidlen;
DWORD length = sizeof(ACL);
+ DWORD acesize = 0;
+ DWORD acecount = 0;
PACCESS_ALLOWED_ACE pAce = NULL; /* pointer to current ACE */
TRACE("%s\n", debugstr_w(StringAcl));
@@ -3308,10 +3310,32 @@ static BOOL ParseStringAclToAcl(LPCWSTR StringAcl, LPDWORD lpdwFlags,
goto lerr;
StringAcl++;
- length += sizeof(ACCESS_ALLOWED_ACE) - sizeof(DWORD) + sidlen;
+ acesize = sizeof(ACCESS_ALLOWED_ACE) - sizeof(DWORD) + sidlen;
+ length += acesize;
+ if (pAce)
+ {
+ pAce->Header.AceSize = acesize;
+ pAce = (PACCESS_ALLOWED_ACE)((LPBYTE)pAce + acesize);
+ }
+ acecount++;
}
*cBytes = length;
+
+ if (length > 0xffff)
+ {
+ ERR("ACL too large\n");
+ goto lerr;
+ }
+
+ if (pAcl)
+ {
+ pAcl->AclRevision = ACL_REVISION;
+ pAcl->Sbz1 = 0;
+ pAcl->AclSize = length;
+ pAcl->AceCount = acecount++;
+ pAcl->Sbz2 = 0;
+ }
return TRUE;
lerr:
More information about the wine-cvs
mailing list