Commit 0524963d authored by Jacek Caban's avatar Jacek Caban Committed by Alexandre Julliard

secur32: Added Kerberos provider stub implementation.

parent 3b6cb60e
...@@ -9,6 +9,7 @@ C_SRCS = \ ...@@ -9,6 +9,7 @@ C_SRCS = \
base64_codec.c \ base64_codec.c \
dispatcher.c \ dispatcher.c \
hmac_md5.c \ hmac_md5.c \
kerberos.c \
lsa.c \ lsa.c \
negotiate.c \ negotiate.c \
ntlm.c \ ntlm.c \
......
...@@ -564,6 +564,7 @@ static void SECUR32_initializeProviders(void) ...@@ -564,6 +564,7 @@ static void SECUR32_initializeProviders(void)
/* First load built-in providers */ /* First load built-in providers */
SECUR32_initSchannelSP(); SECUR32_initSchannelSP();
SECUR32_initNTLMSP(); SECUR32_initNTLMSP();
SECUR32_initKerberosSP();
/* Load the Negotiate provider last so apps stumble over the working NTLM /* Load the Negotiate provider last so apps stumble over the working NTLM
* provider first. Attempting to fix bug #16905 while keeping the * provider first. Attempting to fix bug #16905 while keeping the
* application reported on wine-users on 2006-09-12 working. */ * application reported on wine-users on 2006-09-12 working. */
......
...@@ -136,6 +136,7 @@ PSTR SECUR32_AllocMultiByteFromWide(PCWSTR str) DECLSPEC_HIDDEN; ...@@ -136,6 +136,7 @@ PSTR SECUR32_AllocMultiByteFromWide(PCWSTR str) DECLSPEC_HIDDEN;
void SECUR32_initSchannelSP(void) DECLSPEC_HIDDEN; void SECUR32_initSchannelSP(void) DECLSPEC_HIDDEN;
void SECUR32_initNegotiateSP(void) DECLSPEC_HIDDEN; void SECUR32_initNegotiateSP(void) DECLSPEC_HIDDEN;
void SECUR32_initNTLMSP(void) DECLSPEC_HIDDEN; void SECUR32_initNTLMSP(void) DECLSPEC_HIDDEN;
void SECUR32_initKerberosSP(void) DECLSPEC_HIDDEN;
/* Cleanup functions for built-in providers */ /* Cleanup functions for built-in providers */
void SECUR32_deinitSchannelSP(void) DECLSPEC_HIDDEN; void SECUR32_deinitSchannelSP(void) DECLSPEC_HIDDEN;
......
...@@ -22,6 +22,8 @@ ...@@ -22,6 +22,8 @@
#include <windef.h> #include <windef.h>
#include <winbase.h> #include <winbase.h>
#include <winnls.h> #include <winnls.h>
#include <rpc.h>
#include <rpcdce.h>
#define SECURITY_WIN32 #define SECURITY_WIN32
#include <security.h> #include <security.h>
#include <schannel.h> #include <schannel.h>
...@@ -315,6 +317,55 @@ static void test_SspiEncodeStringsAsAuthIdentity(void) ...@@ -315,6 +317,55 @@ static void test_SspiEncodeStringsAsAuthIdentity(void)
pSspiFreeAuthIdentity( id ); pSspiFreeAuthIdentity( id );
} }
static void test_kerberos(void)
{
SecPkgInfoA *info;
TimeStamp ttl;
CredHandle cred;
SECURITY_STATUS status;
SEC_CHAR provider[] = {'K','e','r','b','e','r','o','s',0};
static const ULONG expected_flags =
SECPKG_FLAG_INTEGRITY
| SECPKG_FLAG_PRIVACY
| SECPKG_FLAG_TOKEN_ONLY
| SECPKG_FLAG_DATAGRAM
| SECPKG_FLAG_CONNECTION
| SECPKG_FLAG_MULTI_REQUIRED
| SECPKG_FLAG_EXTENDED_ERROR
| SECPKG_FLAG_IMPERSONATION
| SECPKG_FLAG_ACCEPT_WIN32_NAME
| SECPKG_FLAG_NEGOTIABLE
| SECPKG_FLAG_GSS_COMPATIBLE
| SECPKG_FLAG_LOGON
| SECPKG_FLAG_MUTUAL_AUTH
| SECPKG_FLAG_DELEGATION
| SECPKG_FLAG_READONLY_WITH_CHECKSUM;
static const ULONG optional_mask =
SECPKG_FLAG_RESTRICTED_TOKENS
| SECPKG_FLAG_APPCONTAINER_CHECKS;
status = QuerySecurityPackageInfoA(provider, &info);
ok(status == SEC_E_OK, "Kerberos package not installed, skipping test\n");
if(status != SEC_E_OK)
return;
ok( (info->fCapabilities & ~optional_mask) == expected_flags, "got %08x, expected %08x\n", info->fCapabilities, expected_flags );
ok( info->wVersion == 1, "got %u\n", info->wVersion );
ok( info->wRPCID == RPC_C_AUTHN_GSS_KERBEROS, "got %u\n", info->wRPCID );
ok( info->cbMaxToken >= 12000, "got %u\n", info->cbMaxToken );
ok( !lstrcmpA( info->Name, "Kerberos" ), "got %s\n", info->Name );
ok( !lstrcmpA( info->Comment, "Microsoft Kerberos V1.0" ), "got %s\n", info->Comment );
FreeContextBuffer( info );
status = AcquireCredentialsHandleA( NULL, provider, SECPKG_CRED_OUTBOUND, NULL,
NULL, NULL, NULL, &cred, &ttl );
todo_wine ok( status == SEC_E_OK, "AcquireCredentialsHandleA returned %08x\n", status );
if(status == SEC_E_OK)
FreeCredentialHandle( &cred );
}
START_TEST(secur32) START_TEST(secur32)
{ {
secdll = LoadLibraryA("secur32.dll"); secdll = LoadLibraryA("secur32.dll");
...@@ -361,4 +412,6 @@ START_TEST(secur32) ...@@ -361,4 +412,6 @@ START_TEST(secur32)
FreeLibrary(secdll); FreeLibrary(secdll);
} }
test_kerberos();
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment