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