s3: Fork the echo handler only after SMB1 negprot is done
authorVolker Lendecke <vl@samba.org>
Fri, 20 May 2011 11:07:17 +0000 (13:07 +0200)
committerKarolin Seeger <kseeger@samba.org>
Thu, 15 Sep 2011 18:32:43 +0000 (20:32 +0200)
This enables activating the echo responder also if SMB2 is enabled, albeit it
will only be used for SMB1 at this moment.

Autobuild-User: Volker Lendecke <vlendec@samba.org>
Autobuild-Date: Fri May 20 15:06:03 CEST 2011 on sn-devel-104

source3/smbd/negprot.c
source3/smbd/process.c
source3/smbd/proto.h

index a2e7e0b54f955ab3d3be463aa00233c38e166c32..562dcea5514f35765bb02a842c52388d9657ce8b 100644 (file)
@@ -716,6 +716,11 @@ void reply_negprot(struct smb_request *req)
        }
 
        TALLOC_FREE(cliprotos);
+
+       if (lp_async_smb_echo_handler() && !fork_echo_handler(sconn)) {
+               exit_server("Failed to fork echo handler");
+       }
+
        END_PROFILE(SMBnegprot);
        return;
 }
index ccbaec594ac72aa139cd2a680679ec1cb36e699f..a33746969bca9966ffc687f0de35a7a531a0b1fc 100644 (file)
@@ -2806,7 +2806,7 @@ static void smbd_echo_loop(struct smbd_server_connection *sconn,
 /*
  * Handle SMBecho requests in a forked child process
  */
-static bool fork_echo_handler(struct smbd_server_connection *sconn)
+bool fork_echo_handler(struct smbd_server_connection *sconn)
 {
        int listener_pipe[2];
        int res;
@@ -2920,8 +2920,7 @@ void smbd_process(struct smbd_server_connection *sconn)
        const char *remaddr = NULL;
        int ret;
 
-       if (lp_maxprotocol() == PROTOCOL_SMB2 &&
-           !lp_async_smb_echo_handler()) {
+       if (lp_maxprotocol() == PROTOCOL_SMB2) {
                /*
                 * We're not making the decision here,
                 * we're just allowing the client
@@ -3042,10 +3041,6 @@ void smbd_process(struct smbd_server_connection *sconn)
                exit_server("Failed to init smb_signing");
        }
 
-       if (lp_async_smb_echo_handler() && !fork_echo_handler(sconn)) {
-               exit_server("Failed to fork echo handler");
-       }
-
        /* Setup oplocks */
        if (!init_oplocks(sconn->msg_ctx))
                exit_server("Failed to init oplocks");
index b7bb0636a3eb2c951bcc50af7e5c774b0c884d05..6cbbcfa8405726a443b116b1dc5392dcb1231db1 100644 (file)
@@ -793,6 +793,7 @@ size_t req_wct_ofs(struct smb_request *req);
 void chain_reply(struct smb_request *req);
 bool req_is_in_chain(struct smb_request *req);
 void smbd_process(struct smbd_server_connection *sconn);
+bool fork_echo_handler(struct smbd_server_connection *sconn);
 
 /* The following definitions come from smbd/quotas.c  */