/* * PROJECT: ReactOS NetLogon Service * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+) * PURPOSE: NetLogon service RPC server * COPYRIGHT: Eric Kohl 2019 */ /* INCLUDES *****************************************************************/ #include "precomp.h" //#include "lmerr.h" WINE_DEFAULT_DEBUG_CHANNEL(netlogon); /* FUNCTIONS *****************************************************************/ DWORD WINAPI RpcThreadRoutine( LPVOID lpParameter) { RPC_STATUS Status; Status = RpcServerUseProtseqEpW(L"ncacn_np", 20, L"\\pipe\\netlogon", NULL); if (Status != RPC_S_OK) { ERR("RpcServerUseProtseqEpW() failed (Status %lx)\n", Status); return 0; } Status = RpcServerRegisterIf(logon_v1_0_s_ifspec, NULL, NULL); if (Status != RPC_S_OK) { ERR("RpcServerRegisterIf() failed (Status %lx)\n", Status); return 0; } Status = RpcServerListen(1, RPC_C_LISTEN_MAX_CALLS_DEFAULT, FALSE); if (Status != RPC_S_OK) { ERR("RpcServerListen() failed (Status %lx)\n", Status); } return 0; } void __RPC_FAR * __RPC_USER midl_user_allocate(SIZE_T len) { return HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, len); } void __RPC_USER midl_user_free(void __RPC_FAR * ptr) { HeapFree(GetProcessHeap(), 0, ptr); } /* Function 0 */ NET_API_STATUS __stdcall NetrLogonUasLogon( _In_opt_ LOGONSRV_HANDLE ServerName, _In_ wchar_t *UserName, _In_ wchar_t *Workstation, _Out_ PNETLOGON_VALIDATION_UAS_INFO *ValidationInformation) { UNIMPLEMENTED; return 0; } /* Function 1 */ NET_API_STATUS __stdcall NetrLogonUasLogoff( _In_opt_ LOGONSRV_HANDLE ServerName, _In_ wchar_t *UserName, _In_ wchar_t *Workstation, _Out_ PNETLOGON_LOGOFF_UAS_INFO LogoffInformation) { UNIMPLEMENTED; return 0; } /* Function 2 */ NTSTATUS __stdcall NetrLogonSamLogon( _In_opt_ LOGONSRV_HANDLE LogonServer, _In_opt_ wchar_t *ComputerName, _In_opt_ PNETLOGON_AUTHENTICATOR Authenticator, _Inout_opt_ PNETLOGON_AUTHENTICATOR ReturnAuthenticator, _In_ NETLOGON_LOGON_INFO_CLASS LogonLevel, _In_ PNETLOGON_LEVEL LogonInformation, _In_ NETLOGON_VALIDATION_INFO_CLASS ValidationLevel, _Out_ PNETLOGON_VALIDATION ValidationInformation, _Out_ UCHAR *Authoritative) { UNIMPLEMENTED; return 0; } /* Function 3 */ NTSTATUS __stdcall NetrLogonSamLogoff( _In_opt_ LOGONSRV_HANDLE LogonServer, _In_opt_ wchar_t *ComputerName, _In_opt_ PNETLOGON_AUTHENTICATOR Authenticator, _Inout_opt_ PNETLOGON_AUTHENTICATOR ReturnAuthenticator, _In_ NETLOGON_LOGON_INFO_CLASS LogonLevel, _In_ PNETLOGON_LEVEL LogonInformation) { UNIMPLEMENTED; return 0; } /* Function 4 */ NTSTATUS __stdcall NetrServerReqChallenge( _In_opt_ LOGONSRV_HANDLE PrimaryName, _In_ wchar_t *ComputerName, _In_ PNETLOGON_CREDENTIAL ClientChallenge, _Out_ PNETLOGON_CREDENTIAL ServerChallenge) { UNIMPLEMENTED; return 0; } /* Function 5 */ NTSTATUS __stdcall NetrServerAuthenticate( _In_opt_ LOGONSRV_HANDLE PrimaryName, _In_ wchar_t *AccountName, _In_ NETLOGON_SECURE_CHANNEL_TYPE SecureChannelType, _In_ wchar_t *ComputerName, _In_ PNETLOGON_CREDENTIAL ClientCredential, _Out_ PNETLOGON_CREDENTIAL ServerCredential) { UNIMPLEMENTED; return 0; } /* Function 6 */ NTSTATUS __stdcall NetrServerPasswordSet( _In_opt_ LOGONSRV_HANDLE PrimaryName, _In_ wchar_t *AccountName, _In_ NETLOGON_SECURE_CHANNEL_TYPE SecureChannelType, _In_ wchar_t *ComputerName, _In_ PNETLOGON_AUTHENTICATOR Authenticator, _Out_ PNETLOGON_AUTHENTICATOR ReturnAuthenticator, _In_ PENCRYPTED_NT_OWF_PASSWORD UasNewPassword) { UNIMPLEMENTED; return 0; } /* Function 7 */ NTSTATUS __stdcall NetrDatabaseDeltas( _In_ LOGONSRV_HANDLE PrimaryName, _In_ wchar_t *ComputerName, _In_ PNETLOGON_AUTHENTICATOR Authenticator, _Inout_ PNETLOGON_AUTHENTICATOR ReturnAuthenticator, _In_ DWORD DatabaseID, _Inout_ PNLPR_MODIFIED_COUNT DomainModifiedCount, _Out_ PNETLOGON_DELTA_ENUM_ARRAY *DeltaArray, _In_ DWORD PreferredMaximumLength) { UNIMPLEMENTED; return 0; } /* Function 8 */ NTSTATUS __stdcall NetrDatabaseSync( _In_ LOGONSRV_HANDLE PrimaryName, _In_ wchar_t *ComputerName, _In_ PNETLOGON_AUTHENTICATOR Authenticator, _Inout_ PNETLOGON_AUTHENTICATOR ReturnAuthenticator, _In_ DWORD DatabaseID, _Inout_ ULONG *SyncContext, _Out_ PNETLOGON_DELTA_ENUM_ARRAY *DeltaArray, _In_ DWORD PreferredMaximumLength) { UNIMPLEMENTED; return 0; } /* Function 9 */ NTSTATUS __stdcall NetrAccountDeltas( _In_opt_ LOGONSRV_HANDLE PrimaryName, _In_ wchar_t * ComputerName, _In_ PNETLOGON_AUTHENTICATOR Authenticator, _Inout_ PNETLOGON_AUTHENTICATOR ReturnAuthenticator, _In_ PUAS_INFO_0 RecordId, _In_ DWORD Count, _In_ DWORD Level, _Out_ UCHAR *Buffer, _In_ DWORD BufferSize, _Out_ ULONG *CountReturned, _Out_ ULONG *TotalEntries, _Out_ PUAS_INFO_0 NextRecordId) { UNIMPLEMENTED; return 0; } /* Function 10 */ NTSTATUS __stdcall NetrAccountSync( _In_opt_ LOGONSRV_HANDLE PrimaryName, _In_ wchar_t *ComputerName, _In_ PNETLOGON_AUTHENTICATOR Authenticator, _Inout_ PNETLOGON_AUTHENTICATOR ReturnAuthenticator, _In_ DWORD Reference, _In_ DWORD Level, _Out_ UCHAR *Buffer, _In_ DWORD BufferSize, _Out_ ULONG *CountReturned, _Out_ ULONG *TotalEntries, _Out_ ULONG *NextReference, _Out_ PUAS_INFO_0 LastRecordId) { UNIMPLEMENTED; return 0; } /* Function 11 */ NET_API_STATUS __stdcall NetrGetDCName( _In_ LOGONSRV_HANDLE ServerName, _In_opt_ wchar_t *DomainName, _Out_ wchar_t **Buffer) { UNIMPLEMENTED; return 0; } /* Function 12 */ NET_API_STATUS __stdcall NetrLogonControl( _In_opt_ LOGONSRV_HANDLE ServerName, _In_ DWORD FunctionCode, _In_ DWORD QueryLevel, _Out_ PNETLOGON_CONTROL_QUERY_INFORMATION Buffer) { UNIMPLEMENTED; return 0; } /* Function 13 */ NET_API_STATUS __stdcall NetrGetAnyDCName( _In_opt_ LOGONSRV_HANDLE ServerName, _In_opt_ wchar_t *DomainName, _Out_ wchar_t **Buffer) { UNIMPLEMENTED; return 0; } /* Function 14 */ NET_API_STATUS __stdcall NetrLogonControl2( _In_opt_ LOGONSRV_HANDLE ServerName, _In_ DWORD FunctionCode, _In_ DWORD QueryLevel, _In_ PNETLOGON_CONTROL_DATA_INFORMATION Data, _Out_ PNETLOGON_CONTROL_QUERY_INFORMATION Buffer) { UNIMPLEMENTED; return 0; } /* Function 15 */ NTSTATUS __stdcall NetrServerAuthenticate2( _In_opt_ LOGONSRV_HANDLE PrimaryName, _In_ wchar_t *AccountName, _In_ NETLOGON_SECURE_CHANNEL_TYPE SecureChannelType, _In_ wchar_t *ComputerName, _In_ PNETLOGON_CREDENTIAL ClientCredential, _Out_ PNETLOGON_CREDENTIAL ServerCredential, _Inout_ ULONG *NegotiateFlags) { UNIMPLEMENTED; return 0; } /* Function 16 */ NTSTATUS __stdcall NetrDatabaseSync2( _In_ LOGONSRV_HANDLE PrimaryName, _In_ wchar_t *ComputerName, _In_ PNETLOGON_AUTHENTICATOR Authenticator, _Inout_ PNETLOGON_AUTHENTICATOR ReturnAuthenticator, _In_ DWORD DatabaseID, _In_ SYNC_STATE RestartState, _Inout_ ULONG *SyncContext, _Out_ PNETLOGON_DELTA_ENUM_ARRAY *DeltaArray, _In_ DWORD PreferredMaximumLength) { UNIMPLEMENTED; return 0; } /* Function 17 */ NTSTATUS __stdcall NetrDatabaseRedo( _In_ LOGONSRV_HANDLE PrimaryName, _In_ wchar_t *ComputerName, _In_ PNETLOGON_AUTHENTICATOR Authenticator, _Inout_ PNETLOGON_AUTHENTICATOR ReturnAuthenticator, _In_ UCHAR *ChangeLogEntry, _In_ DWORD ChangeLogEntrySize, _Out_ PNETLOGON_DELTA_ENUM_ARRAY *DeltaArray) { UNIMPLEMENTED; return 0; } /* Function 18 */ NET_API_STATUS __stdcall NetrLogonControl2Ex( _In_opt_ LOGONSRV_HANDLE ServerName, _In_ DWORD FunctionCode, _In_ DWORD QueryLevel, _In_ PNETLOGON_CONTROL_DATA_INFORMATION Data, _Out_ PNETLOGON_CONTROL_QUERY_INFORMATION Buffer) { UNIMPLEMENTED; return 0; } /* Function 19 */ NTSTATUS __stdcall NetrEnumerateTrustedDomains( _In_opt_ LOGONSRV_HANDLE ServerName, _Out_ PDOMAIN_NAME_BUFFER DomainNameBuffer) { UNIMPLEMENTED; return 0; } /* Function 20 */ NET_API_STATUS __stdcall DsrGetDcName( _In_opt_ LOGONSRV_HANDLE ComputerName, _In_opt_ wchar_t *DomainName, _In_opt_ GUID *DomainGuid, _In_opt_ GUID *SiteGuid, _In_ ULONG Flags, _Out_ PDOMAIN_CONTROLLER_INFOW *DomainControllerInfo) { UNIMPLEMENTED; return 0; } /* Function 21 */ NTSTATUS __stdcall NetrLogonGetCapabilities( _In_ LOGONSRV_HANDLE ServerName, _In_opt_ wchar_t *ComputerName, _In_ PNETLOGON_AUTHENTICATOR Authenticator, _Inout_ PNETLOGON_AUTHENTICATOR ReturnAuthenticator, _In_ DWORD QueryLevel, _Out_ PNETLOGON_CAPABILITIES ServerCapabilities) { UNIMPLEMENTED; return 0; } /* Function 22 */ NTSTATUS __stdcall NetrLogonSetServiceBits( _In_opt_ LOGONSRV_HANDLE ServerName, _In_ DWORD ServiceBitsOfInterest, _In_ DWORD ServiceBits) { UNIMPLEMENTED; return 0; } /* Function 23 */ NET_API_STATUS __stdcall NetrLogonGetTrustRid( _In_opt_ LOGONSRV_HANDLE ServerName, _In_opt_ wchar_t *DomainName, _Out_ ULONG *Rid) { UNIMPLEMENTED; return 0; } /* Function 24 */ NET_API_STATUS __stdcall NetrLogonComputeServerDigest( _In_opt_ LOGONSRV_HANDLE ServerName, _In_ ULONG Rid, _In_ UCHAR *Message, _In_ ULONG MessageSize, _Out_ CHAR NewMessageDigest[16], _Out_ CHAR OldMessageDigest[16]) { UNIMPLEMENTED; return 0; } /* Function 25 */ NET_API_STATUS __stdcall NetrLogonComputeClientDigest( _In_opt_ LOGONSRV_HANDLE ServerName, _In_opt_ wchar_t *DomainName, _In_ UCHAR *Message, _In_ ULONG MessageSize, _Out_ CHAR NewMessageDigest[16], _Out_ CHAR OldMessageDigest[16]) { UNIMPLEMENTED; return 0; } /* Function 26 */ NTSTATUS __stdcall NetrServerAuthenticate3( _In_opt_ LOGONSRV_HANDLE PrimaryName, _In_ wchar_t *AccountName, _In_ NETLOGON_SECURE_CHANNEL_TYPE SecureChannelType, _In_ wchar_t *ComputerName, _In_ PNETLOGON_CREDENTIAL ClientCredential, _Out_ PNETLOGON_CREDENTIAL ServerCredential, _Inout_ ULONG *NegotiateFlags, _Out_ ULONG *AccountRid) { UNIMPLEMENTED; return 0; } /* Function 27 */ NET_API_STATUS __stdcall DsrGetDcNameEx( _In_opt_ LOGONSRV_HANDLE ComputerName, _In_opt_ wchar_t *DomainName, _In_opt_ GUID *DomainGuid, _In_opt_ wchar_t *SiteName, _In_ ULONG Flags, _Out_ PDOMAIN_CONTROLLER_INFOW *DomainControllerInfo) { UNIMPLEMENTED; return 0; } /* Function 28 */ NET_API_STATUS __stdcall DsrGetSiteName( _In_opt_ LOGONSRV_HANDLE ComputerName, _Out_ wchar_t **SiteName) { UNIMPLEMENTED; return 0; } /* Function 29 */ NTSTATUS __stdcall NetrLogonGetDomainInfo( _In_ LOGONSRV_HANDLE ServerName, _In_opt_ wchar_t *ComputerName, _In_ PNETLOGON_AUTHENTICATOR Authenticator, _Inout_ PNETLOGON_AUTHENTICATOR ReturnAuthenticator, _In_ DWORD Level, _In_ PNETLOGON_WORKSTATION_INFORMATION WkstaBuffer, _Out_ PNETLOGON_DOMAIN_INFORMATION DomBuffer) { UNIMPLEMENTED; return 0; } /* Function 30 */ NTSTATUS __stdcall NetrServerPasswordSet2( _In_opt_ LOGONSRV_HANDLE PrimaryName, _In_ wchar_t *AccountName, _In_ NETLOGON_SECURE_CHANNEL_TYPE SecureChannelType, _In_ wchar_t *ComputerName, _In_ PNETLOGON_AUTHENTICATOR Authenticator, _Out_ PNETLOGON_AUTHENTICATOR ReturnAuthenticator, _In_ PNL_TRUST_PASSWORD ClearNewPassword) { UNIMPLEMENTED; return 0; } /* Function 31 */ NTSTATUS __stdcall NetrServerPasswordGet( _In_opt_ LOGONSRV_HANDLE PrimaryName, _In_ wchar_t *AccountName, _In_ NETLOGON_SECURE_CHANNEL_TYPE AccountType, _In_ wchar_t *ComputerName, _In_ PNETLOGON_AUTHENTICATOR Authenticator, _Out_ PNETLOGON_AUTHENTICATOR ReturnAuthenticator, _Out_ PENCRYPTED_NT_OWF_PASSWORD EncryptedNtOwfPassword) { UNIMPLEMENTED; return 0; } /* Function 32 */ NTSTATUS __stdcall NetrLogonSendToSam( _In_opt_ LOGONSRV_HANDLE PrimaryName, _In_ wchar_t *ComputerName, _In_ PNETLOGON_AUTHENTICATOR Authenticator, _Out_ PNETLOGON_AUTHENTICATOR ReturnAuthenticator, _In_ UCHAR *OpaqueBuffer, _In_ ULONG OpaqueBufferSize) { UNIMPLEMENTED; return 0; } /* Function 33 */ NET_API_STATUS __stdcall DsrAddressToSiteNamesW( _In_opt_ LOGONSRV_HANDLE ComputerName, _In_ DWORD EntryCount, _In_ PNL_SOCKET_ADDRESS SocketAddresses, _Out_ PNL_SITE_NAME_ARRAY *SiteNames) { UNIMPLEMENTED; return 0; } /* Function 34 */ NET_API_STATUS __stdcall DsrGetDcNameEx2( _In_opt_ LOGONSRV_HANDLE ComputerName, _In_opt_ wchar_t *AccountName, _In_ ULONG AllowableAccountControlBits, _In_opt_ wchar_t *DomainName, _In_opt_ GUID *DomainGuid, _In_opt_ wchar_t *SiteName, _In_ ULONG Flags, _Out_ PDOMAIN_CONTROLLER_INFOW *DomainControllerInfo) { UNIMPLEMENTED; return NERR_DCNotFound; } /* Function 35 */ NET_API_STATUS __stdcall NetrLogonGetTimeServiceParentDomain( _In_opt_ LOGONSRV_HANDLE ServerName, _Out_ wchar_t **DomainName, _Out_ int *PdcSameSite) { UNIMPLEMENTED; return 0; } /* Function 36 */ NET_API_STATUS __stdcall NetrEnumerateTrustedDomainsEx( _In_opt_ LOGONSRV_HANDLE ServerName, _Out_ PNETLOGON_TRUSTED_DOMAIN_ARRAY Domains) { UNIMPLEMENTED; return 0; } /* Function 37 */ NET_API_STATUS __stdcall DsrAddressToSiteNamesExW( _In_opt_ LOGONSRV_HANDLE ComputerName, _In_ DWORD EntryCount, _In_ PNL_SOCKET_ADDRESS SocketAddresses, _Out_ PNL_SITE_NAME_EX_ARRAY *SiteNames) { UNIMPLEMENTED; return 0; } /* Function 38 */ NET_API_STATUS __stdcall DsrGetDcSiteCoverageW( _In_opt_ LOGONSRV_HANDLE ServerName, _Out_ PNL_SITE_NAME_ARRAY *SiteNames) { UNIMPLEMENTED; return 0; } /* Function 39 */ NTSTATUS __stdcall NetrLogonSamLogonEx( _In_ handle_t ContextHandle, _In_opt_ wchar_t *LogonServer, _In_opt_ wchar_t *ComputerName, _In_ NETLOGON_LOGON_INFO_CLASS LogonLevel, _In_ PNETLOGON_LEVEL LogonInformation, _In_ NETLOGON_VALIDATION_INFO_CLASS ValidationLevel, _Out_ PNETLOGON_VALIDATION ValidationInformation, _Out_ UCHAR *Authoritative, _Inout_ ULONG *ExtraFlags) { UNIMPLEMENTED; return 0; } /* Function 40 */ NET_API_STATUS __stdcall DsrEnumerateDomainTrusts( _In_opt_ LOGONSRV_HANDLE ServerName, _In_ ULONG Flags, _Out_ PNETLOGON_TRUSTED_DOMAIN_ARRAY Domains) { UNIMPLEMENTED; return 0; } /* Function 41 */ NET_API_STATUS __stdcall DsrDeregisterDnsHostRecords( _In_opt_ LOGONSRV_HANDLE ServerName, _In_opt_ wchar_t *DnsDomainName, _In_opt_ GUID *DomainGuid, _In_opt_ GUID *DsaGuid, _In_ wchar_t *DnsHostName) { UNIMPLEMENTED; return 0; } /* Function 42 */ NTSTATUS __stdcall NetrServerTrustPasswordsGet( _In_opt_ LOGONSRV_HANDLE TrustedDcName, _In_ wchar_t *AccountName, _In_ NETLOGON_SECURE_CHANNEL_TYPE SecureChannelType, _In_ wchar_t *ComputerName, _In_ PNETLOGON_AUTHENTICATOR Authenticator, _Out_ PNETLOGON_AUTHENTICATOR ReturnAuthenticator, _Out_ PENCRYPTED_NT_OWF_PASSWORD EncryptedNewOwfPassword, _Out_ PENCRYPTED_NT_OWF_PASSWORD EncryptedOldOwfPassword) { UNIMPLEMENTED; return 0; } /* Function 43 */ NET_API_STATUS __stdcall DsrGetForestTrustInformation( _In_opt_ LOGONSRV_HANDLE ServerName, _In_opt_ wchar_t *TrustedDomainName, _In_ DWORD Flags, _Out_ PLSA_FOREST_TRUST_INFORMATION *ForestTrustInfo) { UNIMPLEMENTED; return 0; } /* Function 44 */ NTSTATUS __stdcall NetrGetForestTrustInformation( _In_opt_ LOGONSRV_HANDLE ServerName, _In_ wchar_t *ComputerName, _In_ PNETLOGON_AUTHENTICATOR Authenticator, _Out_ PNETLOGON_AUTHENTICATOR ReturnAuthenticator, _In_ DWORD Flags, _Out_ PLSA_FOREST_TRUST_INFORMATION *ForestTrustInfo) { UNIMPLEMENTED; return 0; } /* Function 45 */ NTSTATUS __stdcall NetrLogonSamLogonWithFlags( _In_opt_ LOGONSRV_HANDLE LogonServer, _In_opt_ wchar_t *ComputerName, _In_opt_ PNETLOGON_AUTHENTICATOR Authenticator, _Inout_opt_ PNETLOGON_AUTHENTICATOR ReturnAuthenticator, _In_ NETLOGON_LOGON_INFO_CLASS LogonLevel, _In_ PNETLOGON_LEVEL LogonInformation, _In_ NETLOGON_VALIDATION_INFO_CLASS ValidationLevel, _Out_ PNETLOGON_VALIDATION ValidationInformation, _Out_ UCHAR *Authoritative, _Inout_ ULONG *ExtraFlags) { UNIMPLEMENTED; return 0; } /* Function 46 */ NTSTATUS __stdcall NetrServerGetTrustInfo( _In_opt_ LOGONSRV_HANDLE TrustedDcName, _In_ wchar_t *AccountName, _In_ NETLOGON_SECURE_CHANNEL_TYPE SecureChannelType, _In_ wchar_t *ComputerName, _In_ PNETLOGON_AUTHENTICATOR Authenticator, _Out_ PNETLOGON_AUTHENTICATOR ReturnAuthenticator, _Out_ PENCRYPTED_NT_OWF_PASSWORD EncryptedNewOwfPassword, _Out_ PENCRYPTED_NT_OWF_PASSWORD EncryptedOldOwfPassword, _Out_ PNL_GENERIC_RPC_DATA *TrustInfo) { UNIMPLEMENTED; return 0; } /* EOF */