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",