| /* | |
| * 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 <stdarg.h> | |
| #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, /* SetContextAttributes */ | |
| NULL, /* SetCredentialsAttributes */ | |
| NULL, /* ChangeAccountPassword */ | |
| NULL, /* QueryMetaData */ | |
| NULL, /* ExchangeMetaData */ | |
| NULL, /* GetCredUIContext */ | |
| NULL, /* UpdateCredentials */ | |
| NULL, /* ValidateTargetInfo */ | |
| NULL, /* PostLogonUser */ | |
| }, { | |
| 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, /* SetContextAttributes */ | |
| NULL, /* SetCredentialsAttributes */ | |
| NULL, /* ChangeAccountPassword */ | |
| NULL, /* QueryMetaData */ | |
| NULL, /* ExchangeMetaData */ | |
| NULL, /* GetCredUIContext */ | |
| NULL, /* UpdateCredentials */ | |
| NULL, /* ValidateTargetInfo */ | |
| NULL, /* PostLogonUser */ | |
| } | |
| }; | |
| /*********************************************************************** | |
| * 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_7; | |
| *pcTables = 2; | |
| *ppTables = secPkgFunctionTable; | |
| return STATUS_SUCCESS; | |
| } |