s3: Fix bug 8238 -- KB2536276 prevents access to shares
[samba.git] / source3 / smbd / negprot.c
index 85dc32447db81c395304517bab686aceb73770b1..51ad80d648582f626f18f5e863d1809d0c85365a 100644 (file)
@@ -20,9 +20,9 @@
 
 #include "includes.h"
 #include "smbd/globals.h"
+#include "../libcli/auth/spnego.h"
 
 extern fstring remote_proto;
-extern enum protocol_types Protocol;
 
 static void get_challenge(uint8 buff[8])
 {
@@ -60,7 +60,7 @@ static void reply_corep(struct smb_request *req, uint16 choice)
        reply_outbuf(req, 1, 0);
        SSVAL(req->outbuf, smb_vwv0, choice);
 
-       Protocol = PROTOCOL_CORE;
+       set_Protocol(PROTOCOL_CORE);
 }
 
 /****************************************************************************
@@ -80,7 +80,7 @@ static void reply_coreplus(struct smb_request *req, uint16 choice)
        SCVAL(req->outbuf,smb_flg,FLAG_REPLY|FLAG_SUPPORT_LOCKREAD);
        SSVAL(req->outbuf,smb_vwv1,0x1); /* user level security, don't
                                          * encrypt */
-       Protocol = PROTOCOL_COREPLUS;
+       set_Protocol(PROTOCOL_COREPLUS);
 }
 
 /****************************************************************************
@@ -113,7 +113,7 @@ static void reply_lanman1(struct smb_request *req, uint16 choice)
                SSVAL(req->outbuf,smb_vwv11, 8);
        }
 
-       Protocol = PROTOCOL_LANMAN1;
+       set_Protocol(PROTOCOL_LANMAN1);
 
        /* Reply, SMBlockread, SMBwritelock supported. */
        SCVAL(req->outbuf,smb_flg,FLAG_REPLY|FLAG_SUPPORT_LOCKREAD);
@@ -162,7 +162,7 @@ static void reply_lanman2(struct smb_request *req, uint16 choice)
                SSVAL(req->outbuf,smb_vwv11, 8);
        }
 
-       Protocol = PROTOCOL_LANMAN2;
+       set_Protocol(PROTOCOL_LANMAN2);
 
        /* Reply, SMBlockread, SMBwritelock supported. */
        SCVAL(req->outbuf,smb_flg,FLAG_REPLY|FLAG_SUPPORT_LOCKREAD);
@@ -344,7 +344,7 @@ static void reply_nt1(struct smb_request *req, uint16 choice)
        SSVAL(req->outbuf,smb_vwv0,choice);
        SCVAL(req->outbuf,smb_vwv1,secword);
        
-       Protocol = PROTOCOL_NT1;
+       set_Protocol(PROTOCOL_NT1);
        
        SSVAL(req->outbuf,smb_vwv1+1,lp_maxmux()); /* maxmpx */
        SSVAL(req->outbuf,smb_vwv2+1,1); /* num vcs */
@@ -382,6 +382,7 @@ static void reply_nt1(struct smb_request *req, uint16 choice)
                        reply_nterror(req, NT_STATUS_NO_MEMORY);
                        return;
                }
+               p += ret;
                DEBUG(3,("not using SPNEGO\n"));
        } else {
                DATA_BLOB spnego_blob = negprot_spnego();
@@ -697,7 +698,7 @@ void reply_negprot(struct smb_request *req)
   
        DEBUG( 5, ( "negprot index=%d\n", choice ) );
 
-       if ((lp_server_signing() == Required) && (Protocol < PROTOCOL_NT1)) {
+       if ((lp_server_signing() == Required) && (get_Protocol() < PROTOCOL_NT1)) {
                exit_server_cleanly("SMB signing is required and "
                        "client negotiated a downlevel protocol");
        }