TDB_DATA val;
void *ptr = NULL;
struct smbXsrv_session *session = NULL;
+ struct smbXsrv_connection *xconn = NULL;
NTSTATUS status;
val = dbwrap_record_get_value(local_rec);
session = talloc_get_type_abort(ptr, struct smbXsrv_session);
session->db_rec = local_rec;
+
+ if (session->client != NULL) {
+ xconn = session->client->connections;
+ }
+ for (; xconn != NULL; xconn = xconn->next) {
+ struct smbd_smb2_request *preq;
+
+ for (preq = xconn->smb2.requests; 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)) {