Hans Leidekker : advapi32: Use a fixed computer SID that matches local user SIDs.

Alexandre Julliard julliard at winehq.org
Wed Mar 2 12:23:48 CST 2011


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

Author: Hans Leidekker <hans at codeweavers.com>
Date:   Wed Mar  2 10:46:30 2011 +0100

advapi32: Use a fixed computer SID that matches local user SIDs.

---

 dlls/advapi32/lsa.c      |    1 -
 dlls/advapi32/security.c |   64 +++++++--------------------------------------
 2 files changed, 10 insertions(+), 55 deletions(-)

diff --git a/dlls/advapi32/lsa.c b/dlls/advapi32/lsa.c
index 863ddb2..4806216 100644
--- a/dlls/advapi32/lsa.c
+++ b/dlls/advapi32/lsa.c
@@ -656,7 +656,6 @@ NTSTATUS WINAPI LsaQueryInformationPolicy(
 
             xdi->info.DomainSid = &xdi->sid;
 
-            /* read the computer SID from the registry */
             if (!ADVAPI_GetComputerSid(&xdi->sid))
             {
                 HeapFree(GetProcessHeap(), 0, xdi);
diff --git a/dlls/advapi32/security.c b/dlls/advapi32/security.c
index de090dc..1aa7990 100644
--- a/dlls/advapi32/security.c
+++ b/dlls/advapi32/security.c
@@ -446,64 +446,20 @@ BOOL ADVAPI_IsLocalComputer(LPCWSTR ServerName)
 
 /************************************************************
  *                ADVAPI_GetComputerSid
- *
- * Reads the computer SID from the registry.
  */
 BOOL ADVAPI_GetComputerSid(PSID sid)
 {
-    HKEY key;
-    LONG ret;
-    BOOL retval = FALSE;
-    static const WCHAR Account[] = { 'S','E','C','U','R','I','T','Y','\\','S','A','M','\\','D','o','m','a','i','n','s','\\','A','c','c','o','u','n','t',0 };
-    static const WCHAR V[] = { 'V',0 };
-
-    if ((ret = RegOpenKeyExW(HKEY_LOCAL_MACHINE, Account, 0,
-        KEY_READ, &key)) == ERROR_SUCCESS)
+    static const struct /* same fields as struct SID */
     {
-        DWORD size = 0;
-        ret = RegQueryValueExW(key, V, NULL, NULL, NULL, &size);
-        if (ret == ERROR_MORE_DATA || ret == ERROR_SUCCESS)
-        {
-            BYTE * data = HeapAlloc(GetProcessHeap(), 0, size);
-            if (data)
-            {
-                if ((ret = RegQueryValueExW(key, V, NULL, NULL,
-                     data, &size)) == ERROR_SUCCESS)
-                {
-                    /* the SID is in the last 24 bytes of the binary data */
-                    CopyMemory(sid, &data[size-24], 24);
-                    retval = TRUE;
-                }
-                HeapFree(GetProcessHeap(), 0, data);
-            }
-        }
-        RegCloseKey(key);
-    }
-
-    if(retval == TRUE) return retval;
-
-    /* create a new random SID */
-    if (RegCreateKeyExW(HKEY_LOCAL_MACHINE, Account,
-        0, NULL, 0, KEY_ALL_ACCESS, NULL, &key, NULL) == ERROR_SUCCESS)
-    {
-        PSID new_sid;
-        SID_IDENTIFIER_AUTHORITY identifierAuthority = {SECURITY_NT_AUTHORITY};
-        DWORD id[3];
-
-        if (RtlGenRandom(id, sizeof(id)))
-        {
-            if (AllocateAndInitializeSid(&identifierAuthority, 4, SECURITY_NT_NON_UNIQUE, id[0], id[1], id[2], 0, 0, 0, 0, &new_sid))
-            {
-                if (RegSetValueExW(key, V, 0, REG_BINARY, new_sid, GetLengthSid(new_sid)) == ERROR_SUCCESS)
-                    retval = CopySid(GetLengthSid(new_sid), sid, new_sid);
-
-                FreeSid(new_sid);
-            }
-        }
-        RegCloseKey(key);
-    }
-
-    return retval;
+        BYTE Revision;
+        BYTE SubAuthorityCount;
+        SID_IDENTIFIER_AUTHORITY IdentifierAuthority;
+        DWORD SubAuthority[4];
+    } computer_sid =
+    { SID_REVISION, 4, { SECURITY_NT_AUTHORITY }, { SECURITY_NT_NON_UNIQUE, 0, 0, 0 } };
+
+    memcpy( sid, &computer_sid, sizeof(computer_sid) );
+    return TRUE;
 }
 
 /*	##############################




More information about the wine-cvs mailing list