smbd: Do an early exit on negprot failure
authorVolker Lendecke <vl@samba.org>
Tue, 28 Feb 2017 15:03:45 +0000 (15:03 +0000)
committerJeremy Allison <jra@samba.org>
Fri, 3 Mar 2017 01:24:09 +0000 (02:24 +0100)
BUG: https://bugzilla.samba.org/show_bug.cgi?id=12610

Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Ralph Böhme <slow@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
source3/smbd/negprot.c

index cdde334ccba62cae9f84a50565344c5b5d0e2d86..838ff45aad1f0fcdb36dfdee630545c94def5175 100644 (file)
@@ -723,17 +723,26 @@ void reply_negprot(struct smb_request *req)
                        break;
        }
 
-       if(choice != -1) {
-               fstrcpy(remote_proto,supported_protocols[protocol].short_name);
-               reload_services(sconn, conn_snum_used, true);
-               supported_protocols[protocol].proto_reply_fn(req, choice);
-               DEBUG(3,("Selected protocol %s\n",supported_protocols[protocol].proto_name));
-       } else {
+       if (choice == -1) {
+               bool ok;
+
                DBG_NOTICE("No protocol supported !\n");
                reply_outbuf(req, 1, 0);
                SSVAL(req->outbuf, smb_vwv0, choice);
+
+               ok = srv_send_smb(xconn, (char *)req->outbuf,
+                                 false, 0, false, NULL);
+               if (!ok) {
+                       DBG_NOTICE("srv_send_smb failed\n");
+               }
+               exit_server_cleanly("no protocol supported\n");
        }
 
+       fstrcpy(remote_proto,supported_protocols[protocol].short_name);
+       reload_services(sconn, conn_snum_used, true);
+       supported_protocols[protocol].proto_reply_fn(req, choice);
+       DEBUG(3,("Selected protocol %s\n",supported_protocols[protocol].proto_name));
+
        DEBUG( 5, ( "negprot index=%d\n", choice ) );
 
        /* We always have xconn->smb1.signing_state also for >= SMB2_02 */