/* * 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, /* 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; }