The branch, master has been updated
       via  449ab39... s3-spnego: Fix Bug #6815. Windows 2008 R2 SPNEGO 
negTokenTarg parsing failure.
      from  fb13eb7... s4:w32err_code.py script - put it under "scripting/bin"

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 449ab398f58c6e0041621752322ebe24e6d70225
Author: Günther Deschner <g...@samba.org>
Date:   Thu Oct 15 14:13:26 2009 +0200

    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

-----------------------------------------------------------------------

Summary of changes:
 source3/Makefile.in        |    4 +++-
 source3/libsmb/clispnego.c |   31 ++++++++++++-------------------
 2 files changed, 15 insertions(+), 20 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/Makefile.in b/source3/Makefile.in
index 90faadf..d12c991 100644
--- a/source3/Makefile.in
+++ b/source3/Makefile.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 \
diff --git a/source3/libsmb/clispnego.c b/source3/libsmb/clispnego.c
index 5d7e43d..1103ef8 100644
--- a/source3/libsmb/clispnego.c
+++ b/source3/libsmb/clispnego.c
@@ -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;
 }
 
 /*


-- 
Samba Shared Repository

Reply via email to