smb2_sesssetup: don't shutdown a session on failure when it's not valid yet on the...
authorStefan Metzmacher <metze@samba.org>
Tue, 9 Mar 2021 15:15:49 +0000 (16:15 +0100)
committerJeremy Allison <jra@samba.org>
Wed, 17 Mar 2021 00:49:32 +0000 (00:49 +0000)
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 <metze@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
selftest/knownfail.d/smb2.session
source3/smbd/smb2_sesssetup.c

index 8fcecf006302fc38a89152d6bfbcd535af12cece..eb52a7a24ed9578a1030134be01e65f3100e6d3c 100644 (file)
@@ -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
index da33b53b7e978dd4db5c44c3adfaead473430247..699a3bd742b09b4147c170e5e0c351bf5e27ae76 100644 (file)
@@ -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);