LookupAccountNameW() any account but first user rejected

Paul Bryan Roberts pbronline-wine at yahoo.co.uk
Thu Sep 25 19:08:54 CDT 2008


---
 dlls/advapi32/security.c       |   28 +++++++++++++++++++++++++++-
 dlls/advapi32/tests/security.c |   13 +++++--------
 2 files changed, 32 insertions(+), 9 deletions(-)

diff --git a/dlls/advapi32/security.c b/dlls/advapi32/security.c
index 1d183e6..51d2de1 100644
--- a/dlls/advapi32/security.c
+++ b/dlls/advapi32/security.c
@@ -2536,6 +2536,13 @@ BOOL WINAPI LookupAccountNameW( LPCWSTR lpSystemName, LPCWSTR lpAccountName, PSI
     FIXME("%s %s %p %p %p %p %p - stub\n", debugstr_w(lpSystemName), debugstr_w(lpAccountName),
           Sid, cbSid, ReferencedDomainName, cchReferencedDomainName, peUse);
 
+    if (!ADVAPI_IsLocalComputer(lpSystemName))
+    {
+        /*FIXME("Only local computer supported!\n");*/
+        SetLastError(ERROR_NONE_MAPPED);
+        return FALSE;
+    }
+
     if (!lpAccountName || !strcmpW(lpAccountName, Blank))
     {
         lpAccountName = BUILTIN;
@@ -2546,7 +2553,6 @@ BOOL WINAPI LookupAccountNameW( LPCWSTR lpSystemName, LPCWSTR lpAccountName, PSI
         if (!strcmpW(lpAccountName, ACCOUNT_SIDS[i].account))
         {
             char sidBuffer [SECURITY_MAX_SID_SIZE];
-
             size_t sidLen = SECURITY_MAX_SID_SIZE;
 
             ret = CreateWellKnownSid(ACCOUNT_SIDS[i].type, NULL, sidBuffer, &sidLen);
@@ -2583,6 +2589,26 @@ BOOL WINAPI LookupAccountNameW( LPCWSTR lpSystemName, LPCWSTR lpAccountName, PSI
         }
     }
 
+
+    {
+        WCHAR  userName [UNLEN + 1];
+        size_t nameLen = UNLEN + 1;
+
+        ret = GetUserNameW(userName, &nameLen);
+
+        if (ret && strcmpW(lpAccountName, userName) != 0)
+        {
+            /* FIXME("Only first user account supported!\n"); */
+            SetLastError(ERROR_NONE_MAPPED);
+            ret = FALSE;
+        }
+
+        if (!ret)
+        {
+            return ret;
+        }
+    }
+
     ret = AllocateAndInitializeSid(&identifierAuthority,
         2,
         SECURITY_BUILTIN_DOMAIN_RID,
diff --git a/dlls/advapi32/tests/security.c b/dlls/advapi32/tests/security.c
index 87fe422..1c84b14 100644
--- a/dlls/advapi32/tests/security.c
+++ b/dlls/advapi32/tests/security.c
@@ -1640,14 +1640,11 @@ static void test_LookupAccountName(void)
     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 ||
-           broken(GetLastError() == ERROR_TRUSTED_RELATIONSHIP_FAILURE),
-           "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);
-    }
+    ok(GetLastError() == ERROR_NONE_MAPPED ||
+       broken(GetLastError() == ERROR_TRUSTED_RELATIONSHIP_FAILURE),
+       "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);
 
     HeapFree(GetProcessHeap(), 0, psid);
     HeapFree(GetProcessHeap(), 0, domain);
-- 
1.5.4.3


--------------090302060109010303090208--



More information about the wine-patches mailing list