Hans Leidekker : advapi32/tests: Add tests for MakeSelfRelativeSD.
Alexandre Julliard
julliard at winehq.org
Fri Nov 24 14:05:21 CST 2017
Module: wine
Branch: master
Commit: 84a95032986c925c364952d6d2906310cde02774
URL: http://source.winehq.org/git/wine.git/?a=commit;h=84a95032986c925c364952d6d2906310cde02774
Author: Hans Leidekker <hans at codeweavers.com>
Date: Fri Nov 24 11:32:59 2017 +0100
advapi32/tests: Add tests for MakeSelfRelativeSD.
Signed-off-by: Hans Leidekker <hans at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/advapi32/tests/security.c | 48 ++++++++++++++++++++++++++++++++++++++----
1 file changed, 44 insertions(+), 4 deletions(-)
diff --git a/dlls/advapi32/tests/security.c b/dlls/advapi32/tests/security.c
index e86fe21..51dcf90 100644
--- a/dlls/advapi32/tests/security.c
+++ b/dlls/advapi32/tests/security.c
@@ -2731,12 +2731,12 @@ static void test_LookupAccountName(void)
static void test_security_descriptor(void)
{
- SECURITY_DESCRIPTOR sd;
+ SECURITY_DESCRIPTOR sd, *sd_rel, *sd_rel2, *sd_abs;
char buf[8192];
- DWORD size;
+ DWORD size, size_dacl, size_sacl, size_owner, size_group;
BOOL isDefault, isPresent, ret;
- PACL pacl;
- PSID psid;
+ PACL pacl, dacl, sacl;
+ PSID psid, owner, group;
SetLastError(0xdeadbeef);
ret = InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION);
@@ -2774,6 +2774,46 @@ static void test_security_descriptor(void)
expect_eq(psid, NULL, PSID, "%p");
expect_eq(isDefault, FALSE, BOOL, "%d");
}
+
+ ret = pConvertStringSecurityDescriptorToSecurityDescriptorA(
+ "O:SYG:S-1-5-21-93476-23408-4576D:(A;NP;GAGXGWGR;;;SU)(A;IOID;CCDC;;;SU)"
+ "(D;OICI;0xffffffff;;;S-1-5-21-93476-23408-4576)S:(AU;OICINPIOIDSAFA;CCDCLCSWRPRC;;;SU)"
+ "(AU;NPSA;0x12019f;;;SU)", SDDL_REVISION_1, (void **)&sd_rel, NULL);
+ ok(ret, "got %u\n", GetLastError());
+
+ size = 0;
+ ret = MakeSelfRelativeSD(sd_rel, NULL, &size);
+ todo_wine ok(!ret && GetLastError() == ERROR_BAD_DESCRIPTOR_FORMAT, "got %u\n", GetLastError());
+
+ /* convert to absolute form */
+ size = size_dacl = size_sacl = size_owner = size_group = 0;
+ ret = MakeAbsoluteSD(sd_rel, NULL, &size, NULL, &size_dacl, NULL, &size_sacl, NULL, &size_owner, NULL,
+ &size_group);
+ ok(!ret && GetLastError() == ERROR_INSUFFICIENT_BUFFER, "got %u\n", GetLastError());
+
+ sd_abs = HeapAlloc(GetProcessHeap(), 0, size + size_dacl + size_sacl + size_owner + size_group);
+ dacl = (PACL)(sd_abs + 1);
+ sacl = (PACL)((char *)dacl + size_dacl);
+ owner = (PSID)((char *)sacl + size_sacl);
+ group = (PSID)((char *)owner + size_owner);
+ ret = MakeAbsoluteSD(sd_rel, sd_abs, &size, dacl, &size_dacl, sacl, &size_sacl, owner, &size_owner,
+ group, &size_group);
+ ok(ret, "got %u\n", GetLastError());
+
+ size = 0;
+ ret = MakeSelfRelativeSD(sd_abs, NULL, &size);
+ ok(!ret && GetLastError() == ERROR_INSUFFICIENT_BUFFER, "got %u\n", GetLastError());
+ ok(size == 184, "got %u\n", size);
+
+ size += 4;
+ sd_rel2 = HeapAlloc(GetProcessHeap(), 0, size);
+ ret = MakeSelfRelativeSD(sd_abs, sd_rel2, &size);
+ ok(ret, "got %u\n", GetLastError());
+ ok(size == 188, "got %u\n", size);
+
+ HeapFree(GetProcessHeap(), 0, sd_abs);
+ HeapFree(GetProcessHeap(), 0, sd_rel2);
+ LocalFree(sd_rel);
}
#define TEST_GRANTED_ACCESS(a,b) test_granted_access(a,b,0,__LINE__)
More information about the wine-cvs
mailing list