diff --git a/dlls/schannel/Makefile.in b/dlls/schannel/Makefile.in index bc67151d872..e0de3b35f2a 100644 --- a/dlls/schannel/Makefile.in +++ b/dlls/schannel/Makefile.in @@ -6,6 +6,7 @@ MODULE = schannel.dll IMPORTS = secur32 kernel32 C_SRCS = \ + lsamode.c \ schannel_main.c @MAKE_DLL_RULES@ diff --git a/dlls/schannel/lsamode.c b/dlls/schannel/lsamode.c new file mode 100644 index 00000000000..b017eb9beac --- /dev/null +++ b/dlls/schannel/lsamode.c @@ -0,0 +1,158 @@ +/* + * LSA-mode functions of the SChannel security provider + * + * Copyright 2007 Yuval Fledel + * + * 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 + +#include "ntstatus.h" +#define WIN32_NO_STATUS +#include "windef.h" +#include "winbase.h" +#include "sspi.h" +#include "ntsecapi.h" +#include "ntsecpkg.h" +#include "schannel.h" + +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(schannel); + +/*********************************************************************** + * SpGetInfoUnified + */ +static NTSTATUS WINAPI SpGetInfoUnified(PSecPkgInfoW PackageInfo) +{ + TRACE("(%p)\n", PackageInfo); + + PackageInfo->fCapabilities = SECPKG_FLAG_MUTUAL_AUTH | + SECPKG_FLAG_INTEGRITY | SECPKG_FLAG_PRIVACY | + SECPKG_FLAG_CONNECTION | SECPKG_FLAG_MULTI_REQUIRED | + SECPKG_FLAG_EXTENDED_ERROR | SECPKG_FLAG_IMPERSONATION | + SECPKG_FLAG_ACCEPT_WIN32_NAME | SECPKG_FLAG_STREAM; + PackageInfo->wVersion = 1; + PackageInfo->wRPCID = UNISP_RPC_ID; + PackageInfo->cbMaxToken = 0x4000; + PackageInfo->Name = (LPWSTR)UNISP_NAME_W; + PackageInfo->Comment = (LPWSTR)UNISP_NAME_W; + + return STATUS_SUCCESS; +} + +static SEC_WCHAR schannelCommentW[] = { 'S','c','h','a','n','n','e','l', + ' ','S','e','c','u','r','i','t','y',' ','P','a','c','k','a','g','e',0 }; + +/*********************************************************************** + * SpGetInfoSChannel + */ +static NTSTATUS WINAPI SpGetInfoSChannel(PSecPkgInfoW PackageInfo) +{ + TRACE("(%p)\n", PackageInfo); + + PackageInfo->fCapabilities = SECPKG_FLAG_MUTUAL_AUTH | + SECPKG_FLAG_INTEGRITY | SECPKG_FLAG_PRIVACY | + SECPKG_FLAG_CONNECTION | SECPKG_FLAG_MULTI_REQUIRED | + SECPKG_FLAG_EXTENDED_ERROR | SECPKG_FLAG_IMPERSONATION | + SECPKG_FLAG_ACCEPT_WIN32_NAME | SECPKG_FLAG_STREAM; + PackageInfo->wVersion = 1; + PackageInfo->wRPCID = UNISP_RPC_ID; + PackageInfo->cbMaxToken = 0x4000; + PackageInfo->Name = (LPWSTR)SCHANNEL_NAME_W; + PackageInfo->Comment = schannelCommentW; + + return STATUS_SUCCESS; +} + +static SECPKG_FUNCTION_TABLE secPkgFunctionTable[2] = +{ { + NULL, /* InitializePackage */ + NULL, /* LsaLogonUser */ + NULL, /* CallPackage */ + NULL, /* LogonTerminated */ + NULL, /* CallPackageUntrusted */ + NULL, /* CallPackagePassthrough */ + NULL, /* LogonUserEx */ + NULL, /* LogonUserEx2 */ + NULL, /* Initialize */ + NULL, /* Shutdown */ + SpGetInfoUnified, + NULL, /* AcceptCredentials */ + NULL, /* SpAcquireCredentialsHandle */ + NULL, /* SpQueryCredentialsAttributes */ + NULL, /* FreeCredentialsHandle */ + NULL, /* SaveCredentials */ + NULL, /* GetCredentials */ + NULL, /* DeleteCredentials */ + NULL, /* InitLsaModeContext */ + NULL, /* AcceptLsaModeContext */ + NULL, /* DeleteContext */ + NULL, /* ApplyControlToken */ + NULL, /* GetUserInfo */ + NULL, /* GetExtendedInformation */ + NULL, /* SpQueryContextAttributes */ + NULL, /* SpAddCredentials */ + NULL, /* SetExtendedInformation */ + NULL, /* SpSetContextAttributes */ + NULL, /* SetCredentialsAttributes */ + }, { + NULL, /* InitializePackage */ + NULL, /* LsaLogonUser */ + NULL, /* CallPackage */ + NULL, /* LogonTerminated */ + NULL, /* CallPackageUntrusted */ + NULL, /* CallPackagePassthrough */ + NULL, /* LogonUserEx */ + NULL, /* LogonUserEx2 */ + NULL, /* Initialize */ + NULL, /* Shutdown */ + SpGetInfoSChannel, + NULL, /* AcceptCredentials */ + NULL, /* SpAcquireCredentialsHandle */ + NULL, /* SpQueryCredentialsAttributes */ + NULL, /* FreeCredentialsHandle */ + NULL, /* SaveCredentials */ + NULL, /* GetCredentials */ + NULL, /* DeleteCredentials */ + NULL, /* InitLsaModeContext */ + NULL, /* AcceptLsaModeContext */ + NULL, /* DeleteContext */ + NULL, /* ApplyControlToken */ + NULL, /* GetUserInfo */ + NULL, /* GetExtendedInformation */ + NULL, /* SpQueryContextAttributes */ + NULL, /* SpAddCredentials */ + NULL, /* SetExtendedInformation */ + NULL, /* SpSetContextAttributes */ + NULL, /* SetCredentialsAttributes */ + } +}; + +/*********************************************************************** + * SpLsaModeInitialize (SCHANNEL.@) + */ +NTSTATUS WINAPI SpLsaModeInitialize(ULONG LsaVersion, PULONG PackageVersion, + PSECPKG_FUNCTION_TABLE *ppTables, PULONG pcTables) +{ + TRACE("(%u, %p, %p, %p)\n", LsaVersion, PackageVersion, ppTables, pcTables); + + *PackageVersion = SECPKG_INTERFACE_VERSION_3; + *pcTables = 2; + *ppTables = secPkgFunctionTable; + + return STATUS_SUCCESS; +} diff --git a/dlls/schannel/schannel.spec b/dlls/schannel/schannel.spec index 7dd12fa3d03..5c38050c801 100644 --- a/dlls/schannel/schannel.spec +++ b/dlls/schannel/schannel.spec @@ -23,7 +23,7 @@ @ stdcall QuerySecurityPackageInfoW(wstr ptr) secur32.QuerySecurityPackageInfoW @ stdcall RevertSecurityContext(ptr) secur32.RevertSecurityContext @ stdcall SealMessage(ptr long ptr long) secur32.SealMessage -@ stub SpLsaModeInitialize +@ stdcall SpLsaModeInitialize(long ptr ptr ptr) @ stub SpUserModeInitialize @ stub SslCrackCertificate @ stub SslEmptyCacheA