From 33e4cee17dbfbb79e5ae68fda893a4d313865eb5 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Wed, 8 Dec 2004 08:09:42 +0000 Subject: [PATCH] r4095: smbsrv_terminate_connection() doesn't exit() in single processor mode, so after we call it we need to return, and not continue processing packets --- source/smb_server/negprot.c | 4 ++++ source/smb_server/reply.c | 7 +++++-- source/smb_server/request.c | 2 ++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/source/smb_server/negprot.c b/source/smb_server/negprot.c index 1c2e1ff7f83..e903969aa7c 100644 --- a/source/smb_server/negprot.c +++ b/source/smb_server/negprot.c @@ -63,6 +63,7 @@ static void reply_corep(struct smbsrv_request *req, uint16_t choice) if (req->smb_conn->signing.mandatory_signing) { smbsrv_terminate_connection(req->smb_conn, "CORE does not support SMB signing, and it is mandetory\n"); + return; } req_send_reply(req); @@ -95,6 +96,7 @@ static void reply_coreplus(struct smbsrv_request *req, uint16_t choice) if (req->smb_conn->signing.mandatory_signing) { smbsrv_terminate_connection(req->smb_conn, "COREPLUS does not support SMB signing, and it is mandetory\n"); + return; } req_send_reply(req); @@ -145,6 +147,7 @@ static void reply_lanman1(struct smbsrv_request *req, uint16_t choice) if (req->smb_conn->signing.mandatory_signing) { smbsrv_terminate_connection(req->smb_conn, "LANMAN1 does not support SMB signing, and it is mandetory\n"); + return; } req_send_reply(req); @@ -193,6 +196,7 @@ static void reply_lanman2(struct smbsrv_request *req, uint16_t choice) if (req->smb_conn->signing.mandatory_signing) { smbsrv_terminate_connection(req->smb_conn, "LANMAN2 does not support SMB signing, and it is mandetory\n"); + return; } req_send_reply(req); diff --git a/source/smb_server/reply.c b/source/smb_server/reply.c index d81b2bfeefb..708dae05ff1 100644 --- a/source/smb_server/reply.c +++ b/source/smb_server/reply.c @@ -2378,14 +2378,17 @@ void reply_special(struct smbsrv_request *req) switch (msg_type) { case 0x81: /* session request */ if (req->smb_conn->negotiate.done_nbt_session) { - smbsrv_terminate_connection(req->smb_conn, "multiple session request not permitted"); + smbsrv_terminate_connection(req->smb_conn, + "multiple session request not permitted"); + return; } SCVAL(buf,0,0x82); SCVAL(buf,3,0); DEBUG(0,("REWRITE: not parsing netbios names in NBT session request!\n")); - /* TODO: store the name for the session setup 'remote machine' code, as well as smbstatus */ + /* TODO: store the name for the session setup 'remote + machine' code, as well as smbstatus */ req->smb_conn->negotiate.done_nbt_session = True; diff --git a/source/smb_server/request.c b/source/smb_server/request.c index 4e63acdd924..7f13998605e 100644 --- a/source/smb_server/request.c +++ b/source/smb_server/request.c @@ -86,6 +86,7 @@ static void req_setup_chain_reply(struct smbsrv_request *req, uint_t wct, uint_t req->out.buffer = talloc_realloc(req, req->out.buffer, req->out.allocated); if (!req->out.buffer) { smbsrv_terminate_connection(req->smb_conn, "allocation failed"); + return; } req->out.hdr = req->out.buffer + NBT_HDR_SIZE; @@ -120,6 +121,7 @@ void req_setup_reply(struct smbsrv_request *req, uint_t wct, uint_t buflen) req->out.buffer = talloc(req, req->out.allocated); if (!req->out.buffer) { smbsrv_terminate_connection(req->smb_conn, "allocation failed"); + return; } req->out.hdr = req->out.buffer + NBT_HDR_SIZE;