- use RPC for communication with lsass - start lsass.exe on startup Modified: trunk/reactos/bootdata/hivesft.inf Modified: trunk/reactos/bootdata/packages/reactos.dff Modified: trunk/reactos/include/idl/idl.xml Added: trunk/reactos/include/idl/lsa.idl Modified: trunk/reactos/lib/advapi32/advapi32.h Modified: trunk/reactos/lib/advapi32/advapi32.xml Modified: trunk/reactos/lib/advapi32/sec/lsa.c Modified: trunk/reactos/lib/advapi32/service/scm.c Modified: trunk/reactos/lib/advapi32/service/sctrl.c Deleted: trunk/reactos/lib/lsasrv/lsaport.c Added: trunk/reactos/lib/lsasrv/lsarpc.c Modified: trunk/reactos/lib/lsasrv/lsasrv.c Modified: trunk/reactos/lib/lsasrv/lsasrv.xml Modified: trunk/reactos/subsys/system/winlogon/winlogon.c _____
Modified: trunk/reactos/bootdata/hivesft.inf --- trunk/reactos/bootdata/hivesft.inf 2006-01-15 12:30:17 UTC (rev 20889) +++ trunk/reactos/bootdata/hivesft.inf 2006-01-15 13:19:57 UTC (rev 20890) @@ -737,6 +737,7 @@
;HKLM,"SOFTWARE\ReactOS\Windows NT\CurrentVersion\Winlogon","Shell",0x00020000,"%SystemRoot%\system32\cm d.exe" HKLM,"SOFTWARE\ReactOS\Windows NT\CurrentVersion\Winlogon","Shell",0x00020000,"%SystemRoot%\explorer.ex e" HKLM,"SOFTWARE\ReactOS\Windows NT\CurrentVersion\Winlogon","StartServices",0x00010001,0x00000001 +HKLM,"SOFTWARE\ReactOS\Windows NT\CurrentVersion\Winlogon","StartLsass",0x00010001,0x00000001 HKLM,"SOFTWARE\ReactOS\Windows NT\CurrentVersion\Winlogon","StartGUI",0x00010001,0x00000000 HKLM,"SOFTWARE\ReactOS\Windows NT\CurrentVersion\Winlogon","Userinit",0x00020000,"%SystemRoot%\system32 \userinit.exe"
_____
Modified: trunk/reactos/bootdata/packages/reactos.dff --- trunk/reactos/bootdata/packages/reactos.dff 2006-01-15 12:30:17 UTC (rev 20889) +++ trunk/reactos/bootdata/packages/reactos.dff 2006-01-15 13:19:57 UTC (rev 20890) @@ -193,6 +193,7 @@
subsys\system\explorer\notifyhook\notifyhook.dll 1 subsys\system\format\format.exe 1 subsys\system\ibrowser\ibrowser.exe 1 +subsys\system\lsass\lsass.exe 1 subsys\system\msconfig\msconfig.exe 1 subsys\system\msiexec\msiexec.exe 1 subsys\system\notepad\notepad.exe 1 _____
Modified: trunk/reactos/include/idl/idl.xml --- trunk/reactos/include/idl/idl.xml 2006-01-15 12:30:17 UTC (rev 20889) +++ trunk/reactos/include/idl/idl.xml 2006-01-15 13:19:57 UTC (rev 20890) @@ -35,4 +35,16 @@
<define name="_X86_" /> <file switches="--oldnames">eventlogrpc.idl</file> </module> +<module name="lsa_server" type="rpcserver"> + <include base="ReactOS">.</include> + <include base="ReactOS">w32api/include</include> + <define name="_X86_" /> + <file switches="--oldnames">lsa.idl</file> +</module> +<module name="lsa_client" type="rpcclient"> + <include base="ReactOS">.</include> + <include base="ReactOS">w32api/include</include> + <define name="_X86_" /> + <file switches="--oldnames">lsa.idl</file> +</module> </group> _____
Added: trunk/reactos/include/idl/lsa.idl --- trunk/reactos/include/idl/lsa.idl 2006-01-15 12:30:17 UTC (rev 20889) +++ trunk/reactos/include/idl/lsa.idl 2006-01-15 13:19:57 UTC (rev 20890) @@ -0,0 +1,42 @@
+/* + * Local Security Authority interface definition + */ + +#define BYTE unsigned char +#define DWORD unsigned int +#define BOOL unsigned long +#define LPBYTE unsigned char* +#define LPDWORD unsigned long* +#define LSA_HANDLE unsigned long +#define NTSTATUS unsigned int + +[ + uuid(12345778-1234-abcd-ef00-0123456789ab), + version(0.0), + pointer_default(unique), + explicit_handle +] +interface lsarpc +{ +/* + cpp_quote("#if 0") + typedef [handle, unique] wchar_t *LPWSTR; + typedef [handle, unique] char *LPSTR; + cpp_quote("#endif") + typedef [context_handle] void *LSA_HANDLE; + typedef LSA_HANDLE *PLSA_HANDLE; + typedef unsigned int NTSTATUS; +*/ + + cpp_quote("#if 0") + typedef struct _LSA_UNICODE_STRING { + unsigned short Length; + unsigned short MaximumLength; + [size_is(MaximumLength)] wchar_t *Buffer; + } LSA_UNICODE_STRING, *PLSA_UNICODE_STRING; + cpp_quote("#endif") + + /* Function 0 */ + NTSTATUS LsarClose(handle_t BindingHandle, + [in] LSA_HANDLE ObjectHandle); +} Property changes on: trunk/reactos/include/idl/lsa.idl ___________________________________________________________________ Name: svn:eol-style + native _____
Modified: trunk/reactos/lib/advapi32/advapi32.h --- trunk/reactos/lib/advapi32/advapi32.h 2006-01-15 12:30:17 UTC (rev 20889) +++ trunk/reactos/lib/advapi32/advapi32.h 2006-01-15 13:19:57 UTC (rev 20890) @@ -24,6 +24,10 @@
/* this has to go after the NDK when being used with the NDK */ #include <ntsecapi.h>
+#include <services/services.h> +#include "svcctl_c.h" +#include "lsa_c.h" + #ifndef HAS_FN_PROGRESSW #define FN_PROGRESSW FN_PROGRESS #endif _____
Modified: trunk/reactos/lib/advapi32/advapi32.xml --- trunk/reactos/lib/advapi32/advapi32.xml 2006-01-15 12:30:17 UTC (rev 20889) +++ trunk/reactos/lib/advapi32/advapi32.xml 2006-01-15 13:19:57 UTC (rev 20890) @@ -2,11 +2,13 @@
<importlibrary definition="advapi32.def" /> <include base="advapi32">.</include> <include base="scm_client">.</include> + <include base="lsa_client">.</include> <define name="__USE_W32API" /> <define name="WINVER">0x600</define> <define name="_WIN32_IE">0x0500</define> <define name="_WIN32_WINNT">0x0600</define> <library>scm_client</library> + <library>lsa_client</library> <library>ntdll</library> <library>kernel32</library> <library>rpcrt4</library> _____
Modified: trunk/reactos/lib/advapi32/sec/lsa.c --- trunk/reactos/lib/advapi32/sec/lsa.c 2006-01-15 12:30:17 UTC (rev 20889) +++ trunk/reactos/lib/advapi32/sec/lsa.c 2006-01-15 13:19:57 UTC (rev 20890) @@ -16,24 +16,80 @@
#define NDEBUG #include <debug.h>
+static handle_t LSABindingHandle = NULL;
-#ifndef SID_REVISION /* FIXME - Winnt.h */ -#define SID_REVISION (1) /* Current revision */ -#endif +static VOID +LSAHandleUnbind(handle_t *Handle) +{ + RPC_STATUS status;
+ if (*Handle == NULL) + return;
+ status = RpcBindingFree(Handle); + if (status) + { + DPRINT1("RpcBindingFree returned 0x%x\n", status); + } +} + +static VOID +LSAHandleBind(VOID) +{ + LPWSTR pszStringBinding; + RPC_STATUS status; + handle_t Handle; + + if (LSABindingHandle != NULL) + return; + + status = RpcStringBindingComposeW(NULL, + L"ncacn_np", + NULL, + L"\pipe\lsarpc", + NULL, + &pszStringBinding); + if (status) + { + DPRINT1("RpcStringBindingCompose returned 0x%x\n", status); + return; + } + + /* Set the binding handle that will be used to bind to the server. */ + status = RpcBindingFromStringBindingW(pszStringBinding, + &Handle); + if (status) + { + DPRINT1("RpcBindingFromStringBinding returned 0x%x\n", status); + } + + status = RpcStringFreeW(&pszStringBinding); + if (status) + { + DPRINT1("RpcStringFree returned 0x%x\n", status); + } + + if (InterlockedCompareExchangePointer(&LSABindingHandle, + (PVOID)Handle, + NULL) != NULL) + { + LSAHandleUnbind(&Handle); + } +} + + /* - * @unimplemented + * @implemented */ NTSTATUS STDCALL LsaClose(LSA_HANDLE ObjectHandle) { - static int count = 0; - if (count++ < 20) - { - DPRINT1("(%p):LsaClose stub\n",ObjectHandle); - } - return 0xc0000000; + DPRINT("LsaClose(0x%p) called\n", ObjectHandle); + + LSAHandleBind(); + + return LsarClose(LSABindingHandle, + (unsigned long)ObjectHandle); }
/* @@ -187,7 +243,7 @@ PLSA_REFERENCED_DOMAIN_LIST *ReferencedDomains, PLSA_TRANSLATED_NAME *Names) { - return STATUS_NOT_IMPLEMENTED; + return STATUS_NONE_MAPPED; }
/*********************************************************************** ******* _____
Modified: trunk/reactos/lib/advapi32/service/scm.c --- trunk/reactos/lib/advapi32/service/scm.c 2006-01-15 12:30:17 UTC (rev 20889) +++ trunk/reactos/lib/advapi32/service/scm.c 2006-01-15 13:19:57 UTC (rev 20890) @@ -13,7 +13,6 @@
/* INCLUDES ******************************************************************/
#include <advapi32.h> -#include "svcctl_c.h"
#define NDEBUG #include <debug.h> _____
Modified: trunk/reactos/lib/advapi32/service/sctrl.c --- trunk/reactos/lib/advapi32/service/sctrl.c 2006-01-15 12:30:17 UTC (rev 20889) +++ trunk/reactos/lib/advapi32/service/sctrl.c 2006-01-15 13:19:57 UTC (rev 20890) @@ -13,7 +13,6 @@
/* INCLUDES ******************************************************************/
#include <advapi32.h> -#include <services/services.h>
#define NDEBUG #include <debug.h> _____
Deleted: trunk/reactos/lib/lsasrv/lsaport.c --- trunk/reactos/lib/lsasrv/lsaport.c 2006-01-15 12:30:17 UTC (rev 20889) +++ trunk/reactos/lib/lsasrv/lsaport.c 2006-01-15 13:19:57 UTC (rev 20890) @@ -1,179 +0,0 @@
-/* - */ - -#define WIN32_NO_STATUS -#include <windows.h> -#define NTOS_MODE_USER -#include <ndk/ntndk.h> - -//#define NDEBUG -#include <debug.h> - - -HANDLE PortThreadHandle = NULL; -HANDLE ConnectPortHandle = NULL; -HANDLE MessagePortHandle = NULL; - - -static NTSTATUS -InitializeLsaPort(VOID) -{ - OBJECT_ATTRIBUTES ObjectAttributes; - UNICODE_STRING PortName; - PORT_MESSAGE Request; - NTSTATUS Status; - - ConnectPortHandle = NULL; - MessagePortHandle = NULL; - - RtlInitUnicodeString(&PortName, - L"\SeLsaCommandPort"); - - InitializeObjectAttributes(&ObjectAttributes, - &PortName, - 0, - NULL, - NULL); - - Status = NtCreatePort(&ConnectPortHandle, - &ObjectAttributes, - 0, - 0x100, - 0x2000); - if (!NT_SUCCESS(Status)) - { - DPRINT1("NtCreatePort() failed (Status %lx)\n", Status); - goto ByeBye; - } - - Status = NtListenPort(ConnectPortHandle, - &Request); - if (!NT_SUCCESS(Status)) - { - DPRINT1("NtListenPort() failed (Status %lx)\n", Status); - goto ByeBye; - } - - Status = NtAcceptConnectPort(&MessagePortHandle, - ConnectPortHandle, - NULL, - TRUE, - NULL, - NULL); - if (!NT_SUCCESS (Status)) - { - DPRINT1("NtAcceptConnectPort() failed (Status %lx)\n", Status); - goto ByeBye; - } - - Status = NtCompleteConnectPort (MessagePortHandle); - if (!NT_SUCCESS (Status)) - { - DPRINT1("NtCompleteConnectPort() failed (Status %lx)\n", Status); - goto ByeBye; - } - -ByeBye: - if (!NT_SUCCESS (Status)) - { - if (ConnectPortHandle != NULL) - NtClose (ConnectPortHandle); - - if (MessagePortHandle != NULL) - NtClose (MessagePortHandle); - } - - return Status; -} - - -static NTSTATUS -ProcessPortMessage(VOID) -{ - PORT_MESSAGE Request; -// LPC_MAX_MESSAGE Reply; - NTSTATUS Status; - - - DPRINT1("ProcessPortMessage() called\n"); - - Status = STATUS_SUCCESS; - - for (;;) - { - Status = NtReplyWaitReceivePort(MessagePortHandle, - 0, - NULL, - &Request); - if (!NT_SUCCESS(Status)) - { - DPRINT1("NtReplyWaitReceivePort() failed (Status %lx)\n", Status); - break; - } - - DPRINT("Received message\n"); - - if (Request.u2.s2.Type == LPC_PORT_CLOSED) - { - DPRINT("Port closed\n"); - -// return STATUS_UNSUCCESSFUL; - } - if (Request.u2.s2.Type == LPC_REQUEST) - { - DPRINT("Received request\n"); - - } - else if (Request.u2.s2.Type == LPC_DATAGRAM) - { - DPRINT("Received datagram\n"); - -// Message = (PIO_ERROR_LOG_MESSAGE)&Request.Data; - - } - } - - return Status; -} - - -static NTSTATUS STDCALL -PortThreadRoutine(PVOID Param) -{ - NTSTATUS Status = STATUS_SUCCESS; - - Status = InitializeLsaPort(); - if (!NT_SUCCESS(Status)) - return Status; - - while (NT_SUCCESS(Status)) - { - Status = ProcessPortMessage(); - } - - if (ConnectPortHandle != NULL) - NtClose (ConnectPortHandle); - - if (MessagePortHandle != NULL) - NtClose (MessagePortHandle); - - return Status; -} - - -BOOLEAN -StartLsaPortThread(VOID) -{ - DWORD ThreadId; - - PortThreadHandle = CreateThread(NULL, - 0x1000, - (LPTHREAD_START_ROUTINE)PortThreadRoutine, - NULL, - 0, - &ThreadId); - - return (PortThreadHandle != NULL); -} - -/* EOF */ _____
Added: trunk/reactos/lib/lsasrv/lsarpc.c --- trunk/reactos/lib/lsasrv/lsarpc.c 2006-01-15 12:30:17 UTC (rev 20889) +++ trunk/reactos/lib/lsasrv/lsarpc.c 2006-01-15 13:19:57 UTC (rev 20890) @@ -0,0 +1,67 @@
+/* INCLUDES ****************************************************************/ + +#define WIN32_NO_STATUS +#include <windows.h> +#include <ntsecapi.h> +#define NTOS_MODE_USER +#include <ndk/ntndk.h> + +#include "lsa_s.h" + +#define NDEBUG +#include <debug.h> + + +/* GLOBALS *****************************************************************/ + +/* VARIABLES ***************************************************************/ + + +/* FUNCTIONS ***************************************************************/ + +VOID +LsarStartRpcServer(VOID) +{ + RPC_STATUS Status; + + DPRINT("LsarStartRpcServer() called"); + + Status = RpcServerUseProtseqEpW(L"ncacn_np", + 10, + L"\pipe\lsarpc", + NULL); + if (Status != RPC_S_OK) + { + DPRINT1("RpcServerUseProtseqEpW() failed (Status %lx)\n", Status); + return; + } + + Status = RpcServerRegisterIf(lsarpc_ServerIfHandle, + NULL, + NULL); + if (Status != RPC_S_OK) + { + DPRINT1("RpcServerRegisterIf() failed (Status %lx)\n", Status); + return; + } + + Status = RpcServerListen(1, 20, TRUE); + if (Status != RPC_S_OK) + { + DPRINT1("RpcServerListen() failed (Status %lx)\n", Status); + return; + } + + DPRINT("LsarStartRpcServer() done"); +} + +/* Function 0 */ +unsigned int +LsarClose(IN handle_t BindingHandle, + IN unsigned long ObjectHandle) +{ + DPRINT1("LsarClose(0x%p) called!\n", ObjectHandle); + return STATUS_INVALID_HANDLE; +} + +/* EOF */ Property changes on: trunk/reactos/lib/lsasrv/lsarpc.c ___________________________________________________________________ Name: svn:keywords + author date revision Name: svn:eol-style + native _____
Modified: trunk/reactos/lib/lsasrv/lsasrv.c --- trunk/reactos/lib/lsasrv/lsasrv.c 2006-01-15 12:30:17 UTC (rev 20889) +++ trunk/reactos/lib/lsasrv/lsasrv.c 2006-01-15 13:19:57 UTC (rev 20890) @@ -3,22 +3,42 @@
#define NTOS_MODE_USER #include <ndk/ntndk.h>
-#include <lsass/lsasrv.h> - #define NDEBUG #include <debug.h>
-VOID StartLsaPortThread(VOID); +VOID LsarStartRpcServer(VOID);
NTSTATUS STDCALL LsapInitLsa(VOID) { - DPRINT1("LsapInitLsa() called\n"); + HANDLE hEvent;
- StartLsaPortThread(); + DPRINT1("LsapInitLsa() called\n");
- return STATUS_SUCCESS; + LsarStartRpcServer(); + + hEvent = OpenEventW(EVENT_MODIFY_STATE, + FALSE, + L"\SECURITY_SERVICES_STARTED"); + if (hEvent != NULL) + { + SetEvent(hEvent); + CloseHandle(hEvent); + } + return STATUS_SUCCESS; }
+void __RPC_FAR * __RPC_USER midl_user_allocate(size_t len) +{ + return RtlAllocateHeap(RtlGetProcessHeap(), HEAP_ZERO_MEMORY, len); +} + + +void __RPC_USER midl_user_free(void __RPC_FAR * ptr) +{ + RtlFreeHeap(RtlGetProcessHeap(), 0, ptr); +} + + /* EOF */ _____
Modified: trunk/reactos/lib/lsasrv/lsasrv.xml --- trunk/reactos/lib/lsasrv/lsasrv.xml 2006-01-15 12:30:17 UTC (rev 20889) +++ trunk/reactos/lib/lsasrv/lsasrv.xml 2006-01-15 13:19:57 UTC (rev 20890) @@ -1,14 +1,19 @@
<module name="lsasrv" type="win32dll" baseaddress="${BASEADDRESS_LSASRV}" entrypoint="0" installbase="system32" installname="lsasrv.dll"> <importlibrary definition="lsasrv.def" /> <include base="lsasrv">.</include> + <include base="lsa_server">.</include> <define name="UNICODE" /> <define name="_UNICODE" /> <define name="__USE_W32API" /> + <define name="WINVER">0x600</define> + <define name="_WIN32_WINNT">0x0600</define> <linkerflag>-nostartfiles</linkerflag> <linkerflag>-nostdlib</linkerflag> + <library>lsa_server</library> <library>ntdll</library> <library>kernel32</library> - <file>lsaport.c</file> + <library>rpcrt4</library> + <file>lsarpc.c</file> <file>lsasrv.c</file> <file>lsasrv.rc</file> </module> _____
Modified: trunk/reactos/subsys/system/winlogon/winlogon.c --- trunk/reactos/subsys/system/winlogon/winlogon.c 2006-01-15 12:30:17 UTC (rev 20889) +++ trunk/reactos/subsys/system/winlogon/winlogon.c 2006-01-15 13:19:57 UTC (rev 20890) @@ -16,7 +16,7 @@
#include <debug.h>
#define SUPPORT_CONSOLESTART 1 -#define START_LSASS 0 +#define START_LSASS 1
/* GLOBALS ******************************************************************/
@@ -161,11 +161,12 @@ BOOLEAN Result; STARTUPINFO StartupInfo; PROCESS_INFORMATION ProcessInformation; + WCHAR ServiceString[] = L"lsass.exe";
LsassInitEvent = CreateEvent(NULL, TRUE, FALSE, - L"\LsassInitDone"); + L"\SECURITY_SERVICES_STARTED");
if (LsassInitEvent == NULL) { @@ -183,10 +184,10 @@ StartupInfo.cbReserved2 = 0; StartupInfo.lpReserved2 = 0;
- Result = CreateProcess(L"lsass.exe", + Result = CreateProcess(NULL, + ServiceString, NULL, NULL, - NULL, FALSE, DETACHED_PROCESS, NULL, @@ -199,7 +200,6 @@ return(FALSE); }
- DPRINT("WL: Waiting for lsass\n"); WaitForSingleObject(LsassInitEvent, INFINITE); CloseHandle(LsassInitEvent);