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