[LSASRV]
authorEric Kohl <eric.kohl@reactos.org>
Sun, 30 Sep 2012 22:41:34 +0000 (22:41 +0000)
committerEric Kohl <eric.kohl@reactos.org>
Sun, 30 Sep 2012 22:41:34 +0000 (22:41 +0000)
- Validate Account SIDs in LsarCreateAccount and LsarOpenAccount.
- LsarOpenAccount: Do not check the granted access of the policy handle.
- LsarOpenAccount: Return the proper status code.

svn path=/trunk/; revision=57448

reactos/dll/win32/lsasrv/lsarpc.c

index 07ac20c..aef0c4b 100644 (file)
@@ -440,6 +440,10 @@ NTSTATUS WINAPI LsarCreateAccount(
     LPWSTR SidString = NULL;
     NTSTATUS Status = STATUS_SUCCESS;
 
     LPWSTR SidString = NULL;
     NTSTATUS Status = STATUS_SUCCESS;
 
+    /* Validate the AccountSid */
+    if (!RtlValidSid(AccountSid))
+        return STATUS_INVALID_PARAMETER;
+
     /* Validate the PolicyHandle */
     Status = LsapValidateDbObject(PolicyHandle,
                                   LsaDbPolicyObject,
     /* Validate the PolicyHandle */
     Status = LsapValidateDbObject(PolicyHandle,
                                   LsaDbPolicyObject,
@@ -842,10 +846,14 @@ NTSTATUS WINAPI LsarOpenAccount(
     LPWSTR SidString = NULL;
     NTSTATUS Status = STATUS_SUCCESS;
 
     LPWSTR SidString = NULL;
     NTSTATUS Status = STATUS_SUCCESS;
 
+    /* Validate the AccountSid */
+    if (!RtlValidSid(AccountSid))
+        return STATUS_INVALID_PARAMETER;
+
     /* Validate the PolicyHandle */
     Status = LsapValidateDbObject(PolicyHandle,
                                   LsaDbPolicyObject,
     /* Validate the PolicyHandle */
     Status = LsapValidateDbObject(PolicyHandle,
                                   LsaDbPolicyObject,
-                                  POLICY_CREATE_ACCOUNT,
+                                  0,
                                   &PolicyObject);
     if (!NT_SUCCESS(Status))
     {
                                   &PolicyObject);
     if (!NT_SUCCESS(Status))
     {
@@ -861,7 +869,7 @@ NTSTATUS WINAPI LsarOpenAccount(
                               &AccountsObject);
     if (!NT_SUCCESS(Status))
     {
                               &AccountsObject);
     if (!NT_SUCCESS(Status))
     {
-        ERR("LsapCreateDbObject (Accounts) failed (Status 0x%08lx)\n", Status);
+        ERR("LsapOpenDbObject (Accounts) failed (Status 0x%08lx)\n", Status);
         goto done;
     }
 
         goto done;
     }
 
@@ -909,7 +917,7 @@ done:
     if (AccountsObject != NULL)
         LsapCloseDbObject(AccountsObject);
 
     if (AccountsObject != NULL)
         LsapCloseDbObject(AccountsObject);
 
-    return STATUS_SUCCESS;
+    return Status;
 }
 
 
 }