From f91aec92ec9418dc2521bb68e5c3635c4fc9a304 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Thu, 26 Apr 2012 17:36:44 +0200 Subject: [PATCH] TODO anon? s3:smb3_sesssetup: close the previous SMB2 session if requested and allowed metze --- source3/smbd/smb2_sesssetup.c | 37 +++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/source3/smbd/smb2_sesssetup.c b/source3/smbd/smb2_sesssetup.c index ebe1068e46d2..bf7001938a57 100644 --- a/source3/smbd/smb2_sesssetup.c +++ b/source3/smbd/smb2_sesssetup.c @@ -306,6 +306,43 @@ static NTSTATUS smbd_smb2_auth_generic_return(struct smbXsrv_session *session, session->global->auth_session_info_seqnum; session->global->expiration_time = gensec_expire_time(session->gensec); + if ((in_previous_session_id != 0) && + (session->global->session_wire_id != + in_previous_session_id)) + { + struct tevent_context *ev; + struct tevent_req *subreq; + bool ok; + + ev = event_context_init(talloc_tos()); + if (ev == NULL) { + TALLOC_FREE(session); + return NT_STATUS_LOGON_FAILURE; + } + + subreq = smb2srv_session_close_previous_send(smb2req, ev, + session, + in_previous_session_id); + if (subreq == NULL) { + TALLOC_FREE(session); + return NT_STATUS_LOGON_FAILURE; + } + + ok = tevent_req_poll_ntstatus(subreq, ev, &status); + if (!ok) { + TALLOC_FREE(subreq); + TALLOC_FREE(session); + return status; + } + + status = smb2srv_session_close_previous_recv(subreq); + TALLOC_FREE(subreq); + if (!NT_STATUS_IS_OK(status)) { + TALLOC_FREE(session); + return status; + } + } + status = smbXsrv_session_update(session); if (!NT_STATUS_IS_OK(status)) { DEBUG(0, ("smb2: Failed to update session for vuid=%d - %s\n", -- 2.34.1