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