[SYSSETUP]
[reactos.git] / reactos / dll / win32 / syssetup / security.c
index c181f2c..5dec604 100644 (file)
@@ -35,7 +35,7 @@ SetAccountDomain(LPCWSTR DomainName,
 
     NTSTATUS Status;
 
-    DPRINT1("SYSSETUP: SetAccountDomain\n");
+    DPRINT("SYSSETUP: SetAccountDomain\n");
 
     memset(&ObjectAttributes, 0, sizeof(LSA_OBJECT_ATTRIBUTES));
     ObjectAttributes.Length = sizeof(LSA_OBJECT_ATTRIBUTES);
@@ -132,6 +132,81 @@ SetAccountDomain(LPCWSTR DomainName,
 }
 
 
+/* Hack */
+static
+NTSTATUS
+SetPrimaryDomain(LPCWSTR DomainName,
+                 PSID DomainSid)
+{
+    PPOLICY_PRIMARY_DOMAIN_INFO OrigInfo = NULL;
+    POLICY_PRIMARY_DOMAIN_INFO Info;
+    LSA_OBJECT_ATTRIBUTES ObjectAttributes;
+    LSA_HANDLE PolicyHandle;
+    NTSTATUS Status;
+
+    DPRINT1("SYSSETUP: SetPrimaryDomain()\n");
+
+    memset(&ObjectAttributes, 0, sizeof(LSA_OBJECT_ATTRIBUTES));
+    ObjectAttributes.Length = sizeof(LSA_OBJECT_ATTRIBUTES);
+
+    Status = LsaOpenPolicy(NULL,
+                           &ObjectAttributes,
+                           POLICY_VIEW_LOCAL_INFORMATION | POLICY_TRUST_ADMIN,
+                           &PolicyHandle);
+    if (Status != STATUS_SUCCESS)
+    {
+        DPRINT("LsaOpenPolicy failed (Status: 0x%08lx)\n", Status);
+        return Status;
+    }
+
+    Status = LsaQueryInformationPolicy(PolicyHandle,
+                                       PolicyPrimaryDomainInformation,
+                                       (PVOID *)&OrigInfo);
+    if (Status == STATUS_SUCCESS && OrigInfo != NULL)
+    {
+        if (DomainName == NULL)
+        {
+            Info.Name.Buffer = OrigInfo->Name.Buffer;
+            Info.Name.Length = OrigInfo->Name.Length;
+            Info.Name.MaximumLength = OrigInfo->Name.MaximumLength;
+        }
+        else
+        {
+            Info.Name.Buffer = (LPWSTR)DomainName;
+            Info.Name.Length = wcslen(DomainName) * sizeof(WCHAR);
+            Info.Name.MaximumLength = Info.Name.Length + sizeof(WCHAR);
+        }
+
+        if (DomainSid == NULL)
+            Info.Sid = OrigInfo->Sid;
+        else
+            Info.Sid = DomainSid;
+    }
+    else
+    {
+        Info.Name.Buffer = (LPWSTR)DomainName;
+        Info.Name.Length = wcslen(DomainName) * sizeof(WCHAR);
+        Info.Name.MaximumLength = Info.Name.Length + sizeof(WCHAR);
+        Info.Sid = DomainSid;
+    }
+
+    Status = LsaSetInformationPolicy(PolicyHandle,
+                                     PolicyPrimaryDomainInformation,
+                                     (PVOID)&Info);
+    if (Status != STATUS_SUCCESS)
+    {
+        DPRINT("LsaSetInformationPolicy failed (Status: 0x%08lx)\n", Status);
+    }
+
+    if (OrigInfo != NULL)
+        LsaFreeMemory(OrigInfo);
+
+    LsaClose(PolicyHandle);
+
+    return Status;
+}
+
+
 static
 VOID
 InstallBuiltinAccounts(VOID)
@@ -170,7 +245,11 @@ InstallBuiltinAccounts(VOID)
 
     for (i = 0; i < 10; i++)
     {
-        ConvertStringSidToSid(BuiltinAccounts[i], &AccountSid);
+        if (!ConvertStringSidToSid(BuiltinAccounts[i], &AccountSid))
+        {
+            DPRINT1("ConvertStringSidToSid(%S) failed: %lu\n", BuiltinAccounts[i], GetLastError());
+            continue;
+        }
 
         Status = LsaCreateAccount(PolicyHandle,
                                   AccountSid,
@@ -277,7 +356,11 @@ InstallPrivileges(VOID)
             }
             DPRINT("SID: %S\n", szSidString);
 
-            ConvertStringSidToSid(szSidString, &AccountSid);
+            if (!ConvertStringSidToSid(szSidString, &AccountSid))
+            {
+                DPRINT1("ConvertStringSidToSid(%S) failed: %lu\n", szSidString, GetLastError());
+                continue;
+            }
 
             Status = LsaOpenAccount(PolicyHandle,
                                     AccountSid,
@@ -309,11 +392,15 @@ done:
         SetupCloseInfFile(hSecurityInf);
 }
 
+
 VOID
 InstallSecurity(VOID)
 {
     InstallBuiltinAccounts();
     InstallPrivileges();
+
+    /* Hack */
+    SetPrimaryDomain(L"WORKGROUP", NULL);
 }
 
 
@@ -330,7 +417,7 @@ SetAdministratorPassword(LPCWSTR Password)
     SAM_HANDLE UserHandle = NULL;
     NTSTATUS Status;
 
-    DPRINT1("SYSSETUP: SetAdministratorPassword(%S)\n", Password);
+    DPRINT("SYSSETUP: SetAdministratorPassword(%p)\n", Password);
 
     memset(&ObjectAttributes, 0, sizeof(LSA_OBJECT_ATTRIBUTES));
     ObjectAttributes.Length = sizeof(LSA_OBJECT_ATTRIBUTES);