Aric Stewart : advapi32: Modify check_well_known_name test to be more robust on more Windows platforms .

Alexandre Julliard julliard at winehq.org
Wed Apr 1 10:11:27 CDT 2009


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

Author: Aric Stewart <aric at codeweavers.com>
Date:   Tue Mar 31 08:59:54 2009 -0500

advapi32: Modify check_well_known_name test to be more robust on more Windows platforms.

Thanks to Paul Vriens for pointing out the need for this.

---

 dlls/advapi32/tests/security.c |   76 +++++++++++++++++++++++++++------------
 1 files changed, 52 insertions(+), 24 deletions(-)

diff --git a/dlls/advapi32/tests/security.c b/dlls/advapi32/tests/security.c
index dd6879d..e557c1f 100644
--- a/dlls/advapi32/tests/security.c
+++ b/dlls/advapi32/tests/security.c
@@ -1700,11 +1700,16 @@ static void get_sid_info(PSID psid, LPSTR *user, LPSTR *dom)
     LookupAccountSidA(NULL, psid, account, &size, domain, &dom_size, &use);
 }
 
-static void check_wellknown_name(const char* name, const char* exp_account, int exp_size, SID_NAME_USE exp_use, BOOL exp_succ)
+static void check_wellknown_name(const char* name, WELL_KNOWN_SID_TYPE result)
 {
+    SID_IDENTIFIER_AUTHORITY ident = { SECURITY_NT_AUTHORITY };
+    PSID domainsid;
+    char wk_sid[SECURITY_MAX_SID_SIZE];
+    DWORD cb;
+
     DWORD sid_size, domain_size;
     SID_NAME_USE sid_use;
-    LPSTR domain, account, sid_dom;
+    LPSTR domain, account, sid_domain, wk_domain, wk_account;
     PSID psid;
     BOOL ret;
 
@@ -1715,20 +1720,31 @@ static void check_wellknown_name(const char* name, const char* exp_account, int
     domain = HeapAlloc(GetProcessHeap(),0,domain_size);
     ret = LookupAccountNameA(NULL, name, psid, &sid_size, domain, &domain_size, &sid_use);
 
-    get_sid_info(psid, &account, &sid_dom);
-
-    if (!exp_succ)
+    if (!result)
     {
         ok(!ret, " %s Should have failed to lookup account name\n",name);
         return;
     }
+
+    AllocateAndInitializeSid(&ident, 6, SECURITY_NT_NON_UNIQUE, 12, 23, 34, 45, 56, 0, 0, &domainsid);
+    cb = sizeof(wk_sid);
+    if (!pCreateWellKnownSid(result, domainsid, wk_sid, &cb))
+    {
+        win_skip("SID %i is not avalable on the system\n",result);
+        return;
+    }
+
+    get_sid_info(psid, &account, &sid_domain);
+    get_sid_info(wk_sid, &wk_account, &wk_domain);
+
     ok(ret, "Failed to lookup account name %s\n",name);
     ok(sid_size != 0, "sid_size was zero\n");
-    ok(!lstrcmp(account, exp_account), "Expected %s , got %s\n", exp_account, account);
-    ok(!lstrcmp(domain, sid_dom), "Expected %s, got %s\n", sid_dom, domain);
-    ok(domain_size == exp_size, "Expected %i, got %d\n", exp_size, domain_size);
-    ok(lstrlen(domain) == domain_size, "Expected %d, got %d\n", lstrlen(domain), domain_size);
-    ok(sid_use == exp_use, "Expected (%d), got %d\n", exp_use, sid_use);
+
+    ok(EqualSid(psid,wk_sid),"(%s) Sids fail to match well known sid!\n",name);
+
+    ok(!lstrcmp(account, wk_account), "Expected %s , got %s\n", account, wk_account);
+    ok(!lstrcmp(domain, wk_domain), "Expected %s, got %s\n", wk_domain, domain);
+    ok(sid_use == SidTypeWellKnownGroup , "Expected Use (5), got %d\n", sid_use);
 
     HeapFree(GetProcessHeap(),0,psid);
     HeapFree(GetProcessHeap(),0,domain);
@@ -1934,26 +1950,38 @@ static void test_LookupAccountName(void)
     }
 
     /* Well Known names */
-    check_wellknown_name("LocalService", "LOCAL SERVICE", 12, SidTypeWellKnownGroup, TRUE);
-    check_wellknown_name("Local Service", "LOCAL SERVICE", 12, SidTypeWellKnownGroup, TRUE);
+    if (!pCreateWellKnownSid)
+    {
+        win_skip("CreateWellKnownSid not available\n");
+        return;
+    }
+
+    if (PRIMARYLANGID(LANGIDFROMLCID(GetThreadLocale())) != LANG_ENGLISH)
+    {
+        skip("Non-english locale (skipping well know name creation tests)\n");
+        return;
+    }
+
+    check_wellknown_name("LocalService", WinLocalServiceSid);
+    check_wellknown_name("Local Service", WinLocalServiceSid);
     /* 2 spaces */
-    check_wellknown_name("Local  Service", "", 0, 0, FALSE);
-    check_wellknown_name("NetworkService", "NETWORK SERVICE", 12, SidTypeWellKnownGroup, TRUE);
-    check_wellknown_name("Network Service", "NETWORK SERVICE", 12, SidTypeWellKnownGroup, TRUE);
+    check_wellknown_name("Local  Service", 0);
+    check_wellknown_name("NetworkService", WinNetworkServiceSid);
+    check_wellknown_name("Network Service", WinNetworkServiceSid);
 
     /* example of some names where the spaces are not optional */
-    check_wellknown_name("Terminal Server User", "TERMINAL SERVER USER", 12, SidTypeWellKnownGroup, TRUE);
-    check_wellknown_name("TerminalServer User", "", 0, 0, FALSE);
-    check_wellknown_name("TerminalServerUser", "", 0, 0, FALSE);
-    check_wellknown_name("Terminal ServerUser", "", 0, 0, FALSE);
+    check_wellknown_name("Terminal Server User", WinTerminalServerSid);
+    check_wellknown_name("TerminalServer User", 0);
+    check_wellknown_name("TerminalServerUser", 0);
+    check_wellknown_name("Terminal ServerUser", 0);
 
-    check_wellknown_name("enterprise domain controllers", "ENTERPRISE DOMAIN CONTROLLERS", 12, SidTypeWellKnownGroup, TRUE);
-    check_wellknown_name("enterprisedomain controllers", "", 0, 0, FALSE);
-    check_wellknown_name("enterprise domaincontrollers", "", 0, 0, FALSE);
-    check_wellknown_name("enterprisedomaincontrollers", "", 0, 0, FALSE);
+    check_wellknown_name("enterprise domain controllers",WinEnterpriseControllersSid);
+    check_wellknown_name("enterprisedomain controllers", 0);
+    check_wellknown_name("enterprise domaincontrollers", 0);
+    check_wellknown_name("enterprisedomaincontrollers", 0);
 
     /* case insensitivity */
-    check_wellknown_name("lOCAlServICE", "LOCAL SERVICE", 12, SidTypeWellKnownGroup, TRUE);
+    check_wellknown_name("lOCAlServICE", WinLocalServiceSid);
 }
 
 static void test_security_descriptor(void)




More information about the wine-cvs mailing list