kerberos: Calling InitializeSecurityContext without a token buffer is not an error.

This patch makes Kerberos Authentication Tester work with https and dotnet40.
Apparently that's a dotnet40 quirk that it passes not NULL input buffers
but doesn't mark any of buffers as a token, dotnet20 passes NULL input.

Note, that in order to make version 2.0 applications work (Kerberos
Authentication Tester is such an application) with dotnet40+ one
needs to add to the registry key
[Software\\Microsoft\\.NETFramework]
"OnlyUseLatestCLR"=dword:00000001

Signed-off-by: Dmitry Timoshkov <dmitry@baikal.ru>
Signed-off-by: Hans Leidekker <hans@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Dmitry Timoshkov 2018-02-05 12:49:16 +08:00 committed by Alexandre Julliard
parent c03b41c896
commit b8f0649851
1 changed files with 7 additions and 3 deletions

View File

@ -913,10 +913,14 @@ static NTSTATUS NTAPI kerberos_SpInitLsaModeContext( LSA_SEC_HANDLE credential,
if (!input) input_token.length = 0; if (!input) input_token.length = 0;
else else
{ {
if ((idx = get_buffer_index( input, SECBUFFER_TOKEN )) == -1) return SEC_E_INVALID_TOKEN; if ((idx = get_buffer_index( input, SECBUFFER_TOKEN )) == -1)
input_token.length = 0;
else
{
input_token.length = input->pBuffers[idx].cbBuffer; input_token.length = input->pBuffers[idx].cbBuffer;
input_token.value = input->pBuffers[idx].pvBuffer; input_token.value = input->pBuffers[idx].pvBuffer;
} }
}
if ((idx = get_buffer_index( output, SECBUFFER_TOKEN )) == -1) return SEC_E_INVALID_TOKEN; if ((idx = get_buffer_index( output, SECBUFFER_TOKEN )) == -1) return SEC_E_INVALID_TOKEN;
output_token.length = 0; output_token.length = 0;