Hans Leidekker : msv1_0: Initial implementation of the LSA and user mode interfaces.
Alexandre Julliard
julliard at winehq.org
Thu Apr 29 16:38:31 CDT 2021
Module: wine
Branch: master
Commit: 1eefdd6bee17d547a3ac3cf639203021aa16d7e7
URL: https://source.winehq.org/git/wine.git/?a=commit;h=1eefdd6bee17d547a3ac3cf639203021aa16d7e7
Author: Hans Leidekker <hans at codeweavers.com>
Date: Thu Apr 29 12:47:30 2021 +0200
msv1_0: Initial implementation of the LSA and user mode interfaces.
Just enough to initialize the provider.
Signed-off-by: Hans Leidekker <hans at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
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(-)
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)
More information about the wine-cvs
mailing list