Just enough to initialize the provider.
Signed-off-by: Hans Leidekker hans@codeweavers.com --- dlls/msv1_0/Makefile.in | 3 + dlls/msv1_0/main.c | 188 ++++++++++++++++++++++++++++++++++++++++ dlls/msv1_0/msv1_0.spec | 4 +- 3 files changed, 193 insertions(+), 2 deletions(-) create mode 100644 dlls/msv1_0/main.c
diff --git a/dlls/msv1_0/Makefile.in b/dlls/msv1_0/Makefile.in index ceac399a207..155ce593ab1 100644 --- a/dlls/msv1_0/Makefile.in +++ b/dlls/msv1_0/Makefile.in @@ -1,3 +1,6 @@ MODULE = msv1_0.dll
EXTRADLLFLAGS = -mno-cygwin + +C_SRCS = \ + main.c diff --git a/dlls/msv1_0/main.c b/dlls/msv1_0/main.c new file mode 100644 index 00000000000..d3480c563f0 --- /dev/null +++ b/dlls/msv1_0/main.c @@ -0,0 +1,188 @@ +/* + * Copyright 2005, 2006 Kai Blin + * Copyright 2021 Hans Leidekker for CodeWeavers + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include <stdarg.h> +#include "ntstatus.h" +#define WIN32_NO_STATUS +#include "windef.h" +#include "winbase.h" +#include "winternl.h" +#include "sspi.h" +#include "ntsecapi.h" +#include "ntsecpkg.h" +#include "rpc.h" + +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(ntlm); + +static ULONG ntlm_package_id; +static LSA_DISPATCH_TABLE lsa_dispatch; + +#define NTLM_CAPS \ + ( SECPKG_FLAG_INTEGRITY \ + | SECPKG_FLAG_PRIVACY \ + | SECPKG_FLAG_TOKEN_ONLY \ + | SECPKG_FLAG_CONNECTION \ + | SECPKG_FLAG_MULTI_REQUIRED \ + | SECPKG_FLAG_IMPERSONATION \ + | SECPKG_FLAG_ACCEPT_WIN32_NAME \ + | SECPKG_FLAG_NEGOTIABLE \ + | SECPKG_FLAG_LOGON \ + | SECPKG_FLAG_RESTRICTED_TOKENS ) + +#define NTLM_MAX_BUF 1904 + +static const SecPkgInfoW ntlm_package_info = +{ + NTLM_CAPS, + 1, + RPC_C_AUTHN_WINNT, + NTLM_MAX_BUF, + (SEC_WCHAR *)L"NTLM", + (SEC_WCHAR *)L"NTLM Security Package" +}; + +static inline const char *debugstr_as( const STRING *str ) +{ + if (!str) return "<null>"; + return debugstr_an( str->Buffer, str->Length ); +} + +static NTSTATUS NTAPI ntlm_LsaApInitializePackage( ULONG package_id, LSA_DISPATCH_TABLE *dispatch, + LSA_STRING *database, LSA_STRING *confidentiality, + LSA_STRING **package_name ) +{ + LSA_STRING *str; + char *ptr; + + TRACE( "%08x, %p, %s, %s, %p\n", package_id, dispatch, debugstr_as(database), debugstr_as(confidentiality), + package_name ); + + if (!(str = dispatch->AllocateLsaHeap( sizeof(*str) + sizeof("NTLM" )))) return STATUS_NO_MEMORY; + ptr = (char *)(str + 1); + memcpy( ptr, "NTLM", sizeof("NTLM") ); + RtlInitString( str, ptr ); + + ntlm_package_id = package_id; + lsa_dispatch = *dispatch; + + *package_name = str; + return STATUS_SUCCESS; +} + +static NTSTATUS NTAPI ntlm_SpInitialize( ULONG_PTR package_id, SECPKG_PARAMETERS *params, + LSA_SECPKG_FUNCTION_TABLE *lsa_function_table ) +{ + FIXME( "%lu, %p, %p\n", package_id, params, lsa_function_table ); + return STATUS_SUCCESS; +} + +static NTSTATUS NTAPI ntlm_SpGetInfo( SecPkgInfoW *info ) +{ + TRACE( "%p\n", info ); + *info = ntlm_package_info; + return STATUS_SUCCESS; +} + +static SECPKG_FUNCTION_TABLE ntlm_table = +{ + ntlm_LsaApInitializePackage, + NULL, /* LsaLogonUser */ + NULL, /* CallPackage */ + NULL, /* LogonTerminated */ + NULL, /* CallPackageUntrusted */ + NULL, /* CallPackagePassthrough */ + NULL, /* LogonUserEx */ + NULL, /* LogonUserEx2 */ + ntlm_SpInitialize, + NULL, /* SpShutdown */ + ntlm_SpGetInfo, + NULL, /* AcceptCredentials */ + NULL, /* SpAcquireCredentialsHandle */ + NULL, /* SpQueryCredentialsAttributes */ + NULL, /* SpFreeCredentialsHandle */ + NULL, /* SaveCredentials */ + NULL, /* GetCredentials */ + NULL, /* DeleteCredentials */ + NULL, /* SpInitLsaModeContext */ + NULL, /* SpAcceptLsaModeContext */ + NULL, /* SpDeleteContext */ + NULL, /* ApplyControlToken */ + NULL, /* GetUserInfo */ + NULL, /* GetExtendedInformation */ + NULL, /* SpQueryContextAttributes */ + NULL, /* SpAddCredentials */ + NULL, /* SetExtendedInformation */ + NULL, /* SetContextAttributes */ + NULL, /* SetCredentialsAttributes */ + NULL, /* ChangeAccountPassword */ + NULL, /* QueryMetaData */ + NULL, /* ExchangeMetaData */ + NULL, /* GetCredUIContext */ + NULL, /* UpdateCredentials */ + NULL, /* ValidateTargetInfo */ + NULL, /* PostLogonUser */ +}; + +NTSTATUS NTAPI SpLsaModeInitialize( ULONG lsa_version, ULONG *package_version, SECPKG_FUNCTION_TABLE **table, + ULONG *table_count ) +{ + TRACE( "%08x, %p, %p, %p\n", lsa_version, package_version, table, table_count ); + + *package_version = SECPKG_INTERFACE_VERSION; + *table = &ntlm_table; + *table_count = 1; + return STATUS_SUCCESS; +} + +static NTSTATUS NTAPI ntlm_SpInstanceInit( ULONG version, SECPKG_DLL_FUNCTIONS *dll_functions, void **user_functions ) +{ + TRACE( "%08x, %p, %p\n", version, dll_functions, user_functions ); + return STATUS_SUCCESS; +} + +static SECPKG_USER_FUNCTION_TABLE ntlm_user_table = +{ + ntlm_SpInstanceInit, + NULL, /* SpInitUserModeContext */ + NULL, /* SpMakeSignature */ + NULL, /* SpVerifySignature */ + NULL, /* SpSealMessage */ + NULL, /* SpUnsealMessage */ + NULL, /* SpGetContextToken */ + NULL, /* SpQueryContextAttributes */ + NULL, /* SpCompleteAuthToken */ + NULL, /* SpDeleteContext */ + NULL, /* SpFormatCredentialsFn */ + NULL, /* SpMarshallSupplementalCreds */ + NULL, /* SpExportSecurityContext */ + NULL /* SpImportSecurityContext */ +}; + +NTSTATUS NTAPI SpUserModeInitialize( ULONG lsa_version, ULONG *package_version, SECPKG_USER_FUNCTION_TABLE **table, + ULONG *table_count ) +{ + TRACE( "%08x, %p, %p, %p\n", lsa_version, package_version, table, table_count ); + + *package_version = SECPKG_INTERFACE_VERSION; + *table = &ntlm_user_table; + *table_count = 1; + return STATUS_SUCCESS; +} diff --git a/dlls/msv1_0/msv1_0.spec b/dlls/msv1_0/msv1_0.spec index cb544188b87..f751ed40521 100644 --- a/dlls/msv1_0/msv1_0.spec +++ b/dlls/msv1_0/msv1_0.spec @@ -15,5 +15,5 @@ @ stub MsvValidateTarget @ stub SpInitialize @ stub SpInstanceInit -@ stub SpLsaModeInitialize -@ stub SpUserModeInitialize +@ stdcall SpLsaModeInitialize(long ptr ptr ptr) +@ stdcall SpUserModeInitialize(long ptr ptr ptr)