Zebediah Figura : advapi32/tests: Add a test for setting the SD owner of a directory to a group.

Alexandre Julliard julliard at winehq.org
Thu Apr 22 15:55:25 CDT 2021


Module: wine
Branch: master
Commit: b3dc0c16a76676e5d456f93cb3ea0f82f17b55ca
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=b3dc0c16a76676e5d456f93cb3ea0f82f17b55ca

Author: Zebediah Figura <z.figura12 at gmail.com>
Date:   Tue Apr 20 14:34:59 2021 -0500

advapi32/tests: Add a test for setting the SD owner of a directory to a group.

Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/advapi32/tests/security.c | 69 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 69 insertions(+)

diff --git a/dlls/advapi32/tests/security.c b/dlls/advapi32/tests/security.c
index ce9c26d238e..08b73495aaa 100644
--- a/dlls/advapi32/tests/security.c
+++ b/dlls/advapi32/tests/security.c
@@ -8306,6 +8306,74 @@ static void test_elevation(void)
     CloseHandle(token);
 }
 
+static void test_group_as_file_owner(void)
+{
+    char sd_buffer[200], sid_buffer[100];
+    SECURITY_DESCRIPTOR *sd = (SECURITY_DESCRIPTOR *)sd_buffer;
+    char temp_path[MAX_PATH], path[MAX_PATH];
+    SID *admin_sid = (SID *)sid_buffer;
+    BOOL ret, present, defaulted;
+    SECURITY_DESCRIPTOR new_sd;
+    HANDLE file;
+    DWORD size;
+    ACL *dacl;
+
+    /* The EA Origin client sets the SD owner of a directory to Administrators,
+     * while using the default DACL, and subsequently tries to create
+     * subdirectories. */
+
+    size = sizeof(sid_buffer);
+    CreateWellKnownSid(WinBuiltinAdministratorsSid, NULL, admin_sid, &size);
+
+    ret = CheckTokenMembership(NULL, admin_sid, &present);
+    ok(ret, "got error %u\n", GetLastError());
+    if (!present)
+    {
+        skip("user is not an administrator\n");
+        return;
+    }
+
+    GetTempPathA(ARRAY_SIZE(temp_path), temp_path);
+    sprintf(path, "%s\\testdir", temp_path);
+
+    ret = CreateDirectoryA(path, NULL);
+    ok(ret, "got error %u\n", GetLastError());
+
+    file = CreateFileA(path, FILE_ALL_ACCESS, 0, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0);
+    ok(file != INVALID_HANDLE_VALUE, "got error %u\n", GetLastError());
+
+    ret = GetKernelObjectSecurity(file, DACL_SECURITY_INFORMATION, sd_buffer, sizeof(sd_buffer), &size);
+    ok(ret, "got error %u\n", GetLastError());
+    ret = GetSecurityDescriptorDacl(sd, &present, &dacl, &defaulted);
+    ok(ret, "got error %u\n", GetLastError());
+
+    InitializeSecurityDescriptor(&new_sd, SECURITY_DESCRIPTOR_REVISION);
+
+    ret = SetSecurityDescriptorOwner(&new_sd, admin_sid, FALSE);
+    ok(ret, "got error %u\n", GetLastError());
+
+    ret = GetSecurityDescriptorDacl(sd, &present, &dacl, &defaulted);
+    ok(ret, "got error %u\n", GetLastError());
+
+    ret = SetSecurityDescriptorDacl(&new_sd, present, dacl, defaulted);
+    ok(ret, "got error %u\n", GetLastError());
+
+    ret = SetKernelObjectSecurity(file, OWNER_SECURITY_INFORMATION | DACL_SECURITY_INFORMATION, &new_sd);
+    ok(ret, "got error %u\n", GetLastError());
+
+    CloseHandle(file);
+
+    sprintf(path, "%s\\testdir\\subdir", temp_path);
+    ret = CreateDirectoryA(path, NULL);
+    todo_wine ok(ret, "got error %u\n", GetLastError());
+
+    ret = RemoveDirectoryA(path);
+    todo_wine ok(ret, "got error %u\n", GetLastError());
+    sprintf(path, "%s\\testdir", temp_path);
+    ret = RemoveDirectoryA(path);
+    ok(ret, "got error %u\n", GetLastError());
+}
+
 START_TEST(security)
 {
     init();
@@ -8374,6 +8442,7 @@ START_TEST(security)
     test_duplicate_token();
     test_GetKernelObjectSecurity();
     test_elevation();
+    test_group_as_file_owner();
 
     /* Must be the last test, modifies process token */
     test_token_security_descriptor();




More information about the wine-cvs mailing list