mirror of
https://github.com/samba-team/samba.git
synced 2025-08-26 01:49:31 +03:00
s3-spnego: Fix Bug #6815. Windows 2008 R2 SPNEGO negTokenTarg parsing failure.
When parsing a SPNEGO session setup retry (falling back from KRB5 to NTLMSSP), we failed to parse the ASN1_ENUMERATED negResult in the negTokenTarg, thus failing spnego_parse_auth() completely. By just using the shared spnego/asn1 code, we get the parsing the correct way. Guenther
This commit is contained in:
@ -506,7 +506,9 @@ SCHANNEL_OBJ = ../libcli/auth/credentials.o \
|
||||
passdb/secrets_schannel.o
|
||||
|
||||
LIBSMB_OBJ = libsmb/clientgen.o libsmb/cliconnect.o libsmb/clifile.o \
|
||||
libsmb/clikrb5.o libsmb/clispnego.o ../lib/util/asn1.o \
|
||||
libsmb/clikrb5.o libsmb/clispnego.o \
|
||||
../libcli/auth/spnego_parse.o \
|
||||
../lib/util/asn1.o \
|
||||
libsmb/clirap.o libsmb/clierror.o libsmb/climessage.o \
|
||||
libsmb/clireadwrite.o libsmb/clilist.o libsmb/cliprint.o \
|
||||
libsmb/clitrans.o libsmb/clisecdesc.o libsmb/clidgram.o \
|
||||
|
@ -495,31 +495,24 @@ DATA_BLOB spnego_gen_auth(DATA_BLOB blob)
|
||||
*/
|
||||
bool spnego_parse_auth(DATA_BLOB blob, DATA_BLOB *auth)
|
||||
{
|
||||
ASN1_DATA *data;
|
||||
ssize_t len;
|
||||
struct spnego_data token;
|
||||
|
||||
data = asn1_init(talloc_tos());
|
||||
if (data == NULL) {
|
||||
len = spnego_read_data(talloc_tos(), blob, &token);
|
||||
if (len == -1) {
|
||||
DEBUG(3,("spnego_parse_auth: spnego_read_data failed\n"));
|
||||
return false;
|
||||
}
|
||||
|
||||
asn1_load(data, blob);
|
||||
asn1_start_tag(data, ASN1_CONTEXT(1));
|
||||
asn1_start_tag(data, ASN1_SEQUENCE(0));
|
||||
asn1_start_tag(data, ASN1_CONTEXT(2));
|
||||
asn1_read_OctetString(data, talloc_autofree_context(), auth);
|
||||
asn1_end_tag(data);
|
||||
asn1_end_tag(data);
|
||||
asn1_end_tag(data);
|
||||
|
||||
if (data->has_error) {
|
||||
DEBUG(3,("spnego_parse_auth failed at %d\n", (int)data->ofs));
|
||||
data_blob_free(auth);
|
||||
asn1_free(data);
|
||||
return False;
|
||||
if (token.type != SPNEGO_NEG_TOKEN_TARG) {
|
||||
DEBUG(3,("spnego_parse_auth: wrong token type: %d\n",
|
||||
token.type));
|
||||
return false;
|
||||
}
|
||||
|
||||
asn1_free(data);
|
||||
return True;
|
||||
*auth = token.negTokenTarg.responseToken;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
|
Reference in New Issue
Block a user