MyLogonUser: Pass the sub status to the caller.

svn path=/trunk/; revision=62369
This commit is contained in:
Eric Kohl
2014-03-01 20:45:10 +00:00
parent dae5c99d12
commit 5012425e7f
4 changed files with 66 additions and 49 deletions
+9 -16
View File
@@ -7,7 +7,7 @@
#include "msgina.h"
BOOL
NTSTATUS
ConnectToLsa(
PGINA_CONTEXT pgContext)
{
@@ -18,7 +18,7 @@ ConnectToLsa(
/* We are already connected to the LSA */
if (pgContext->LsaHandle != NULL)
return TRUE;
return STATUS_SUCCESS;
/* Connect to the LSA server */
RtlInitAnsiString((PANSI_STRING)&LogonProcessName,
@@ -30,7 +30,7 @@ ConnectToLsa(
if (!NT_SUCCESS(Status))
{
ERR("LsaRegisterLogonProcess failed (Status 0x%08lx)\n", Status);
return FALSE;
return Status;
}
/* Get the authentication package */
@@ -43,21 +43,21 @@ ConnectToLsa(
if (!NT_SUCCESS(Status))
{
ERR("LsaLookupAuthenticationPackage failed (Status 0x%08lx)\n", Status);
return FALSE;
}
return TRUE;
return Status;
}
BOOL
NTSTATUS
MyLogonUser(
HANDLE LsaHandle,
ULONG AuthenticationPackage,
LPWSTR lpszUsername,
LPWSTR lpszDomain,
LPWSTR lpszPassword,
PHANDLE phToken)
PHANDLE phToken,
PNTSTATUS SubStatus)
{
SID_IDENTIFIER_AUTHORITY LocalAuthority = {SECURITY_LOCAL_SID_AUTHORITY};
SID_IDENTIFIER_AUTHORITY SystemAuthority = {SECURITY_NT_AUTHORITY};
@@ -78,7 +78,6 @@ MyLogonUser(
LUID LogonId = {0, 0};
HANDLE TokenHandle = NULL;
QUOTA_LIMITS QuotaLimits;
NTSTATUS SubStatus = STATUS_SUCCESS;
NTSTATUS Status;
*phToken = NULL;
@@ -209,7 +208,7 @@ MyLogonUser(
&Luid,
&TokenHandle,
&QuotaLimits,
&SubStatus);
SubStatus);
if (!NT_SUCCESS(Status))
{
ERR("LsaLogonUser failed (Status 0x%08lx)\n", Status);
@@ -259,13 +258,7 @@ done:
if (AuthInfo != NULL)
RtlFreeHeap(RtlGetProcessHeap(), 0, AuthInfo);
if (!NT_SUCCESS(Status))
{
SetLastError(RtlNtStatusToDosError(Status));
return FALSE;
}
return TRUE;
return Status;
}
/* EOF */
+35 -20
View File
@@ -612,20 +612,27 @@ DoAdminUnlock(
ULONG Size;
ULONG i;
NTSTATUS Status;
NTSTATUS SubStatus = STATUS_SUCCESS;
TRACE("(%S %S %S)\n", UserName, Domain, Password);
if (!ConnectToLsa(pgContext))
return FALSE;
if (!MyLogonUser(pgContext->LsaHandle,
pgContext->AuthenticationPackage,
UserName,
Domain,
Password,
&pgContext->UserToken))
Status = ConnectToLsa(pgContext);
if (!NT_SUCCESS(Status))
{
WARN("LogonUserW() failed\n");
WARN("ConnectToLsa() failed\n");
return FALSE;
}
Status = MyLogonUser(pgContext->LsaHandle,
pgContext->AuthenticationPackage,
UserName,
Domain,
Password,
&pgContext->UserToken,
&SubStatus);
if (!NT_SUCCESS(Status))
{
WARN("MyLogonUser() failed\n");
return FALSE;
}
@@ -693,18 +700,26 @@ DoLoginTasks(
DWORD cbStats, cbSize;
DWORD dwLength;
BOOL bResult;
NTSTATUS SubStatus;
NTSTATUS Status;
if (!ConnectToLsa(pgContext))
return FALSE;
if (!MyLogonUser(pgContext->LsaHandle,
pgContext->AuthenticationPackage,
UserName,
Domain,
Password,
&pgContext->UserToken))
Status = ConnectToLsa(pgContext);
if (!NT_SUCCESS(Status))
{
WARN("LogonUserW() failed\n");
WARN("ConnectToLsa() failed\n");
return FALSE;
}
Status = MyLogonUser(pgContext->LsaHandle,
pgContext->AuthenticationPackage,
UserName,
Domain,
Password,
&pgContext->UserToken,
&SubStatus);
if (!NT_SUCCESS(Status))
{
WARN("MyLogonUser() failed\n");
goto cleanup;
}
+4 -3
View File
@@ -81,18 +81,19 @@ typedef struct _GINA_UI
/* lsa.c */
BOOL
NTSTATUS
ConnectToLsa(
PGINA_CONTEXT pgContext);
BOOL
NTSTATUS
MyLogonUser(
HANDLE LsaHandle,
ULONG AuthenticationPackage,
LPWSTR lpszUsername,
LPWSTR lpszDomain,
LPWSTR lpszPassword,
PHANDLE phToken);
PHANDLE phToken,
PNTSTATUS SubStatus);
/* msgina.c */
+18 -10
View File
@@ -221,6 +221,8 @@ TUILockedSAS(
HANDLE hToken;
WCHAR UserName[256];
WCHAR Password[256];
NTSTATUS SubStatus;
NTSTATUS Status;
TRACE("TUILockedSAS()\n");
@@ -235,17 +237,23 @@ TUILockedSAS(
if (!ReadString(IDS_ASKFORPASSWORD, Password, 256, FALSE))
return WLX_SAS_ACTION_NONE;
if (!ConnectToLsa(pgContext))
return WLX_SAS_ACTION_NONE;
if (!MyLogonUser(pgContext->LsaHandle,
pgContext->AuthenticationPackage,
UserName,
NULL,
Password,
&hToken))
Status = ConnectToLsa(pgContext);
if (!NT_SUCCESS(Status))
{
WARN("LogonUserW() failed\n");
WARN("ConnectToLsa() failed\n");
return WLX_SAS_ACTION_NONE;
}
Status = MyLogonUser(pgContext->LsaHandle,
pgContext->AuthenticationPackage,
UserName,
NULL,
Password,
&hToken,
&SubStatus);
if (!NT_SUCCESS(Status))
{
WARN("MyLogonUser() failed\n");
return WLX_SAS_ACTION_NONE;
}