James Hawkins : advapi32: Add tests for LookupAccountName.

Alexandre Julliard julliard at wine.codeweavers.com
Fri Dec 1 06:29:48 CST 2006


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

Author: James Hawkins <truiken at gmail.com>
Date:   Thu Nov 30 15:53:21 2006 -0800

advapi32: Add tests for LookupAccountName.

---

 dlls/advapi32/tests/security.c |  148 ++++++++++++++++++++++++++++++++++++++++
 1 files changed, 148 insertions(+), 0 deletions(-)

diff --git a/dlls/advapi32/tests/security.c b/dlls/advapi32/tests/security.c
index 6419864..b651364 100644
--- a/dlls/advapi32/tests/security.c
+++ b/dlls/advapi32/tests/security.c
@@ -30,6 +30,7 @@
 #include "winnt.h"
 #include "sddl.h"
 #include "ntsecapi.h"
+#include "lmcons.h"
 
 #include "wine/test.h"
 
@@ -1164,6 +1165,152 @@ static void test_LookupAccountSid(void)
     }
 }
 
+static void get_sid_info(PSID psid, LPSTR *user, LPSTR *dom)
+{
+    static CHAR account[UNLEN + 1];
+    static CHAR domain[UNLEN + 1];
+    DWORD size, dom_size;
+    SID_NAME_USE use;
+
+    *user = account;
+    *dom = domain;
+
+    size = dom_size = UNLEN + 1;
+    account[0] = '\0';
+    domain[0] = '\0';
+    LookupAccountSidA(NULL, psid, account, &size, domain, &dom_size, &use);
+}
+
+static void test_LookupAccountName(void)
+{
+    DWORD sid_size, domain_size, user_size;
+    DWORD sid_save, domain_save;
+    CHAR user_name[UNLEN + 1];
+    SID_NAME_USE sid_use;
+    LPSTR domain, account, sid_dom;
+    PSID psid;
+    BOOL ret;
+
+    /* native crashes if (assuming all other parameters correct):
+     *  - peUse is NULL
+     *  - Sid is NULL and cbSid is > 0
+     *  - cbSid or cchReferencedDomainName are NULL
+     *  - ReferencedDomainName is NULL and cchReferencedDomainName is the correct size
+     */
+
+    user_size = UNLEN + 1;
+    ret = GetUserNameA(user_name, &user_size);
+    ok(ret, "Failed to get user name\n");
+
+    /* get sizes */
+    sid_size = 0;
+    domain_size = 0;
+    sid_use = 0xcafebabe;
+    SetLastError(0xdeadbeef);
+    ret = LookupAccountNameA(NULL, user_name, NULL, &sid_size, NULL, &domain_size, &sid_use);
+    ok(!ret, "Expected 0, got %d\n", ret);
+    ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER,
+       "Expected ERROR_INSUFFICIENT_BUFFER, got %d\n", GetLastError());
+    ok(sid_size != 0, "Expected non-zero sid size\n");
+    ok(domain_size != 0, "Expected non-zero domain size\n");
+    ok(sid_use == 0xcafebabe, "Expected 0xcafebabe, got %d\n", sid_use);
+
+    sid_save = sid_size;
+    domain_save = domain_size;
+
+    psid = HeapAlloc(GetProcessHeap(), 0, sid_size);
+    domain = HeapAlloc(GetProcessHeap(), 0, domain_size);
+
+    /* try valid account name */
+    ret = LookupAccountNameA(NULL, user_name, psid, &sid_size, domain, &domain_size, &sid_use);
+    get_sid_info(psid, &account, &sid_dom);
+    ok(ret, "Failed to lookup account name\n");
+    ok(sid_size == GetLengthSid(psid), "Expected %d, got %d\n", GetLengthSid(psid), sid_size);
+    todo_wine
+    {
+        ok(!lstrcmp(account, user_name), "Expected %s, got %s\n", user_name, account);
+        ok(!lstrcmp(domain, sid_dom), "Expected %s, got %s\n", sid_dom, domain);
+        ok(domain_size == domain_save - 1, "Expected %d, got %d\n", domain_save - 1, domain_size);
+        ok(lstrlen(domain) == domain_size, "Expected %d\n", lstrlen(domain));
+        ok(sid_use == SidTypeUser, "Expected SidTypeUser, got %d\n", SidTypeUser);
+    }
+    domain_size = domain_save;
+
+    /* NULL Sid with zero sid size */
+    SetLastError(0xdeadbeef);
+    sid_size = 0;
+    ret = LookupAccountNameA(NULL, user_name, NULL, &sid_size, domain, &domain_size, &sid_use);
+    ok(!ret, "Expected 0, got %d\n", ret);
+    ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER,
+       "Expected ERROR_INSUFFICIENT_BUFFER, got %d\n", GetLastError());
+    ok(sid_size == sid_save, "Expected %d, got %d\n", sid_save, sid_size);
+    ok(domain_size == domain_save, "Expected %d, got %d\n", domain_save, domain_size);
+
+    /* try cchReferencedDomainName - 1 */
+    SetLastError(0xdeadbeef);
+    domain_size--;
+    ret = LookupAccountNameA(NULL, user_name, NULL, &sid_size, domain, &domain_size, &sid_use);
+    ok(!ret, "Expected 0, got %d\n", ret);
+    ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER,
+       "Expected ERROR_INSUFFICIENT_BUFFER, got %d\n", GetLastError());
+    ok(sid_size == sid_save, "Expected %d, got %d\n", sid_save, sid_size);
+    ok(domain_size == domain_save, "Expected %d, got %d\n", domain_save, domain_size);
+
+    /* NULL ReferencedDomainName with zero domain name size */
+    SetLastError(0xdeadbeef);
+    domain_size = 0;
+    ret = LookupAccountNameA(NULL, user_name, psid, &sid_size, NULL, &domain_size, &sid_use);
+    ok(!ret, "Expected 0, got %d\n", ret);
+    ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER,
+       "Expected ERROR_INSUFFICIENT_BUFFER, got %d\n", GetLastError());
+    ok(sid_size == sid_save, "Expected %d, got %d\n", sid_save, sid_size);
+    ok(domain_size == domain_save, "Expected %d, got %d\n", domain_save, domain_size);
+
+    HeapFree(GetProcessHeap(), 0, psid);
+    HeapFree(GetProcessHeap(), 0, domain);
+
+    /* get sizes for NULL account name */
+    sid_size = 0;
+    domain_size = 0;
+    sid_use = 0xcafebabe;
+    SetLastError(0xdeadbeef);
+    ret = LookupAccountNameA(NULL, NULL, NULL, &sid_size, NULL, &domain_size, &sid_use);
+    ok(!ret, "Expected 0, got %d\n", ret);
+    ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER,
+       "Expected ERROR_INSUFFICIENT_BUFFER, got %d\n", GetLastError());
+    ok(sid_size != 0, "Expected non-zero sid size\n");
+    ok(domain_size != 0, "Expected non-zero domain size\n");
+    ok(sid_use == 0xcafebabe, "Expected 0xcafebabe, got %d\n", sid_use);
+
+    psid = HeapAlloc(GetProcessHeap(), 0, sid_size);
+    domain = HeapAlloc(GetProcessHeap(), 0, domain_size);
+
+    /* try NULL account name */
+    ret = LookupAccountNameA(NULL, NULL, psid, &sid_size, domain, &domain_size, &sid_use);
+    get_sid_info(psid, &account, &sid_dom);
+    ok(ret, "Failed to lookup account name\n");
+    todo_wine
+    {
+        ok(!lstrcmp(account, "BUILTIN"), "Expected BUILTIN, got %s\n", account);
+        ok(!lstrcmp(domain, "BUILTIN"), "Expected BUILTIN, got %s\n", domain);
+        ok(sid_use == SidTypeDomain, "Expected SidTypeDomain, got %d\n", SidTypeDomain);
+    }
+
+    /* try an invalid account name */
+    SetLastError(0xdeadbeef);
+    sid_size = 0;
+    domain_size = 0;
+    ret = LookupAccountNameA(NULL, "oogabooga", NULL, &sid_size, NULL, &domain_size, &sid_use);
+    ok(!ret, "Expected 0, got %d\n", ret);
+    todo_wine
+    {
+        ok(GetLastError() == ERROR_NONE_MAPPED,
+           "Expected ERROR_NONE_MAPPED, got %d\n", GetLastError());
+        ok(sid_size == 0, "Expected 0, got %d\n", sid_size);
+        ok(domain_size == 0, "Expected 0, got %d\n", domain_size);
+    }
+}
+
 START_TEST(security)
 {
     init();
@@ -1175,4 +1322,5 @@ START_TEST(security)
     test_AccessCheck();
     test_token_attr();
     test_LookupAccountSid();
+    test_LookupAccountName();
 }




More information about the wine-cvs mailing list