Merge branch 'v3-2-test' of ssh://git.samba.org/data/git/samba into v3-2-test
[ira/wip.git] / source3 / smbd / negprot.c
index 06b17a9a24183d264c286174c45f20eba77265a0..9f56949eeb2f765caf9b8f2eaeb8c4c5a9f8ba24 100644 (file)
@@ -24,8 +24,8 @@ extern fstring remote_proto;
 extern enum protocol_types Protocol;
 extern int max_recv;
 
-BOOL global_encrypted_passwords_negotiated = False;
-BOOL global_spnego_negotiated = False;
+bool global_encrypted_passwords_negotiated = False;
+bool global_spnego_negotiated = False;
 struct auth_context *negprot_global_auth_context = NULL;
 
 static void get_challenge(uint8 buff[8])
@@ -229,10 +229,9 @@ static DATA_BLOB negprot_spnego(void)
                char *host_princ_s = NULL;
                name_to_fqdn(myname, global_myname());
                strlower_m(myname);
-               asprintf(&host_princ_s, "cifs/%s@%s", myname, lp_realm());
-               if (host_princ_s == NULL) {
-                       blob = data_blob_null;
-                       return blob;
+               if (asprintf(&host_princ_s, "cifs/%s@%s", myname, lp_realm())
+                   == -1) {
+                       return data_blob_null;
                }
                blob = spnego_gen_negTokenInit(guid, OIDs_krb5, host_princ_s);
                SAFE_FREE(host_princ_s);
@@ -253,7 +252,7 @@ static void reply_nt1(struct smb_request *req, uint16 choice)
 
        int secword=0;
        char *p, *q;
-       BOOL negotiate_spnego = False;
+       bool negotiate_spnego = False;
        time_t t = time(NULL);
        ssize_t ret;
 
@@ -506,7 +505,7 @@ static const struct {
  conn POINTER CAN BE NULL HERE !
 ****************************************************************************/
 
-void reply_negprot(connection_struct *conn, struct smb_request *req)
+void reply_negprot(struct smb_request *req)
 {
        size_t size = smb_len(req->inbuf) + 4;
        int choice= -1;
@@ -518,7 +517,7 @@ void reply_negprot(connection_struct *conn, struct smb_request *req)
        char **cliprotos;
        int i;
 
-       static BOOL done_negprot = False;
+       static bool done_negprot = False;
 
        START_PROFILE(SMBnegprot);
 
@@ -540,11 +539,11 @@ void reply_negprot(connection_struct *conn, struct smb_request *req)
        num_cliprotos = 0;
        cliprotos = NULL;
 
-       while (p < (smb_buf(req->inbuf) + bcc)) { 
+       while (p < (smb_buf(req->inbuf) + bcc)) {
 
                char **tmp;
 
-               tmp = TALLOC_REALLOC_ARRAY(tmp_talloc_ctx(), cliprotos, char *,
+               tmp = TALLOC_REALLOC_ARRAY(talloc_tos(), cliprotos, char *,
                                           num_cliprotos+1);
                if (tmp == NULL) {
                        DEBUG(0, ("talloc failed\n"));
@@ -674,6 +673,8 @@ void reply_negprot(connection_struct *conn, struct smb_request *req)
                DEBUG(3,("Selected protocol %s\n",supported_protocols[protocol].proto_name));
        } else {
                DEBUG(0,("No protocol supported !\n"));
+               reply_outbuf(req, 1, 0);
+               SSVAL(req->outbuf, smb_vwv0, choice);
        }
   
        DEBUG( 5, ( "negprot index=%d\n", choice ) );