From 339b1819bf232b440ce91147bbb6821cf8f200c6 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Fri, 20 May 2011 13:07:17 +0200 Subject: [PATCH] s3: Fork the echo handler only after SMB1 negprot is done 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 Autobuild-Date: Fri May 20 15:06:03 CEST 2011 on sn-devel-104 (cherry picked from commit 4ad4665e10a77038d7f3dd8400473c8fcf3db451) --- source3/smbd/negprot.c | 5 +++++ source3/smbd/process.c | 9 ++------- source3/smbd/proto.h | 1 + 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/source3/smbd/negprot.c b/source3/smbd/negprot.c index a2e7e0b54f9..562dcea5514 100644 --- a/source3/smbd/negprot.c +++ b/source3/smbd/negprot.c @@ -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; } diff --git a/source3/smbd/process.c b/source3/smbd/process.c index ccbaec594ac..a33746969bc 100644 --- a/source3/smbd/process.c +++ b/source3/smbd/process.c @@ -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"); diff --git a/source3/smbd/proto.h b/source3/smbd/proto.h index b7bb0636a3e..6cbbcfa8405 100644 --- a/source3/smbd/proto.h +++ b/source3/smbd/proto.h @@ -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 */ -- 2.11.4.GIT