From: Stefan Metzmacher Date: Tue, 9 Mar 2021 15:15:49 +0000 (+0100) Subject: smb2_sesssetup: don't shutdown a session on failure when it's not valid yet on the... X-Git-Tag: tevent-0.11.0~1483 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d95e90fe4604e095161c0db8d925f3fc3c766070;p=thirdparty%2Fsamba.git smb2_sesssetup: don't shutdown a session on failure when it's not valid yet on the connection If someone tries to operate on a session that is not yet valid on the current connection and the current session setup fails, then we should not shutdown the session. BUG: https://bugzilla.samba.org/show_bug.cgi?id=14512 Signed-off-by: Stefan Metzmacher Reviewed-by: Jeremy Allison --- diff --git a/selftest/knownfail.d/smb2.session b/selftest/knownfail.d/smb2.session index 8fcecf00630..eb52a7a24ed 100644 --- a/selftest/knownfail.d/smb2.session +++ b/selftest/knownfail.d/smb2.session @@ -1,7 +1,7 @@ -^samba3.smb2.session.*.bind_invalid_auth ^samba3.smb2.session.*.bind_negative_smb210 ^samba3.smb2.session.*.bind_negative_smb2to3 ^samba3.smb2.session.*.bind_negative_smb3to2 ^samba3.smb2.session.*.bind_negative_smb3to3 ^samba3.smb2.session.*.bind_negative_smb3encGtoC ^samba3.smb2.session.*.bind_different_user.ad_dc +^samba3.smb2.session.*.bind_invalid_auth.ad_member_idmap_rid diff --git a/source3/smbd/smb2_sesssetup.c b/source3/smbd/smb2_sesssetup.c index da33b53b7e9..699a3bd742b 100644 --- a/source3/smbd/smb2_sesssetup.c +++ b/source3/smbd/smb2_sesssetup.c @@ -1115,6 +1115,21 @@ static void smbd_smb2_session_setup_wrap_setup_done(struct tevent_req *subreq) state->error = status; + if (state->in_flags & SMB2_SESSION_FLAG_BINDING) { + status = smbXsrv_session_remove_channel(state->smb2req->session, + state->smb2req->xconn); + if (tevent_req_nterror(req, status)) { + return; + } + tevent_req_nterror(req, state->error); + return; + } + + if (NT_STATUS_EQUAL(state->error, NT_STATUS_USER_SESSION_DELETED)) { + tevent_req_nterror(req, state->error); + return; + } + subreq = smb2srv_session_shutdown_send(state, state->ev, state->smb2req->session, state->smb2req);