From: Stefan Metzmacher Date: Sat, 2 May 2015 14:17:34 +0000 (+0200) Subject: s3:smbXsrv_session: clear smb2req->session of pending requests in smbXsrv_session_log... X-Git-Tag: samba-4.1.19~29 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=749e6fd8ee8364cb23a84780488b80f5b181b750;p=thirdparty%2Fsamba.git s3:smbXsrv_session: clear smb2req->session of pending requests in smbXsrv_session_logoff_all_callback() smbXsrv_session_logoff_all_callback() is called when the last transport connection is gone, which means we won't need to sign any response... Bug: https://bugzilla.samba.org/show_bug.cgi?id=11182 Signed-off-by: Stefan Metzmacher Reviewed-by: Jeremy Allison (similar to commit b6c34a07760141bda3e78624d62eb556bb70da65) --- diff --git a/source3/smbd/smbXsrv_session.c b/source3/smbd/smbXsrv_session.c index 5391fc60018..362cff8c989 100644 --- a/source3/smbd/smbXsrv_session.c +++ b/source3/smbd/smbXsrv_session.c @@ -1473,6 +1473,7 @@ static int smbXsrv_session_logoff_all_callback(struct db_record *local_rec, TDB_DATA val; void *ptr = NULL; struct smbXsrv_session *session = NULL; + struct smbd_smb2_request *preq = NULL; NTSTATUS status; val = dbwrap_record_get_value(local_rec); @@ -1489,6 +1490,25 @@ static int smbXsrv_session_logoff_all_callback(struct db_record *local_rec, session = talloc_get_type_abort(ptr, struct smbXsrv_session); session->db_rec = local_rec; + + if (session->connection != NULL) { + preq = session->connection->sconn->smb2.requests; + } + + for (; preq != NULL; preq = preq->next) { + if (preq->session != session) { + continue; + } + + preq->session = NULL; + /* + * If we no longer have a session we can't + * sign or encrypt replies. + */ + preq->do_signing = false; + preq->do_encryption = false; + } + status = smbXsrv_session_logoff(session); if (!NT_STATUS_IS_OK(status)) { if (NT_STATUS_IS_OK(state->first_status)) {