Author: ekohl Date: Thu Oct 3 15:41:02 2013 New Revision: 60513
URL: http://svn.reactos.org/svn/reactos?rev=60513&view=rev Log: [msv1_0] - Fix pointer fix-up of domain name, user name and password. This failed for null pointers. - Update the dispatch table and create a logon session as part of the user logon.
Modified: trunk/reactos/dll/win32/msv1_0/msv1_0.c trunk/reactos/dll/win32/msv1_0/msv1_0.h
Modified: trunk/reactos/dll/win32/msv1_0/msv1_0.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msv1_0/msv1_0.c?r... ============================================================================== --- trunk/reactos/dll/win32/msv1_0/msv1_0.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/msv1_0/msv1_0.c [iso-8859-1] Thu Oct 3 15:41:02 2013 @@ -882,13 +882,17 @@ Confidentiality, AuthenticationPackageName);
/* Get the dispatch table entries */ + DispatchTable.CreateLogonSession = LsaDispatchTable->CreateLogonSession; + DispatchTable.DeleteLogonSession = LsaDispatchTable->DeleteLogonSession; + DispatchTable.AddCredential = LsaDispatchTable->AddCredential; + DispatchTable.GetCredentials = LsaDispatchTable->GetCredentials; + DispatchTable.DeleteCredential = LsaDispatchTable->DeleteCredential; DispatchTable.AllocateLsaHeap = LsaDispatchTable->AllocateLsaHeap; DispatchTable.FreeLsaHeap = LsaDispatchTable->FreeLsaHeap; DispatchTable.AllocateClientBuffer = LsaDispatchTable->AllocateClientBuffer; DispatchTable.FreeClientBuffer = LsaDispatchTable->FreeClientBuffer; DispatchTable.CopyToClientBuffer = LsaDispatchTable->CopyToClientBuffer; DispatchTable.CopyFromClientBuffer = LsaDispatchTable->CopyFromClientBuffer; -
/* Return the package name */ NameString = DispatchTable.AllocateLsaHeap(sizeof(LSA_STRING)); @@ -953,6 +957,7 @@ SAMPR_ULONG_ARRAY Use = {0, NULL}; PSAMPR_USER_INFO_BUFFER UserInfo = NULL; UNICODE_STRING LogonServer; + BOOLEAN SessionCreated = FALSE; NTSTATUS Status;
TRACE("()\n"); @@ -961,7 +966,6 @@ TRACE("AuthenticationInformation: %p\n", AuthenticationInformation); TRACE("AuthenticationInformationLength: %lu\n", AuthenticationInformationLength);
- *ProfileBuffer = NULL; *ProfileBufferLength = 0; *SubStatus = STATUS_SUCCESS; @@ -977,9 +981,9 @@ /* Fix-up pointers in the authentication info */ PtrOffset = (ULONG_PTR)AuthenticationInformation - (ULONG_PTR)ClientAuthenticationBase;
- LogonInfo->LogonDomainName.Buffer = (PWSTR)((ULONG_PTR)LogonInfo->LogonDomainName.Buffer + PtrOffset); - LogonInfo->UserName.Buffer = (PWSTR)((ULONG_PTR)LogonInfo->UserName.Buffer + PtrOffset); - LogonInfo->Password.Buffer = (PWSTR)((ULONG_PTR)LogonInfo->Password.Buffer + PtrOffset); + LogonInfo->LogonDomainName.Buffer = FIXUP_POINTER(LogonInfo->LogonDomainName.Buffer, PtrOffset); + LogonInfo->UserName.Buffer = FIXUP_POINTER(LogonInfo->UserName.Buffer, PtrOffset); + LogonInfo->Password.Buffer = FIXUP_POINTER(LogonInfo->Password.Buffer, PtrOffset);
TRACE("Domain: %S\n", LogonInfo->LogonDomainName.Buffer); TRACE("User: %S\n", LogonInfo->UserName.Buffer); @@ -1089,6 +1093,16 @@ TRACE("NtAllocateLocallyUniqueId failed (Status %08lx)\n", Status); goto done; } + + /* Create the logon session */ + Status = DispatchTable.CreateLogonSession(LogonId); + if (!NT_SUCCESS(Status)) + { + TRACE("CreateLogonSession failed (Status %08lx)\n", Status); + goto done; + } + + SessionCreated = TRUE;
/* Build and fill the interactve profile buffer */ Status = BuildInteractiveProfileBuffer(ClientRequest, @@ -1135,6 +1149,9 @@
if (!NT_SUCCESS(Status)) { + if (SessionCreated == TRUE) + DispatchTable.DeleteLogonSession(LogonId); + if (*ProfileBuffer != NULL) { DispatchTable.FreeClientBuffer(ClientRequest, @@ -1169,6 +1186,7 @@ /* * @unimplemented */ +#if 0 NTSTATUS NTAPI LsaApLogonUserEx(IN PLSA_CLIENT_REQUEST ClientRequest, @@ -1227,5 +1245,6 @@
return STATUS_NOT_IMPLEMENTED; } +#endif
/* EOF */
Modified: trunk/reactos/dll/win32/msv1_0/msv1_0.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msv1_0/msv1_0.h?r... ============================================================================== --- trunk/reactos/dll/win32/msv1_0/msv1_0.h [iso-8859-1] (original) +++ trunk/reactos/dll/win32/msv1_0/msv1_0.h [iso-8859-1] Thu Oct 3 15:41:02 2013 @@ -35,6 +35,10 @@ //#include <lsass/lsasrv.h>
#include <wine/debug.h> + + +#define FIXUP_POINTER(Pointer, Offset) ((Pointer != NULL) ? ((PWSTR)((ULONG_PTR)Pointer + Offset)) : NULL) +
typedef struct _RPC_SID {