/*
* This contains secret information like session keys!
*/
- global_path = lock_path("smbXsrv_session_global.tdb");
+ global_path = lock_path(talloc_tos(), "smbXsrv_session_global.tdb");
if (global_path == NULL) {
return NT_STATUS_NO_MEMORY;
}
return status;
}
- db_ctx = db_open_watched(NULL, backend, server_messaging_context());
+ db_ctx = db_open_watched(NULL, &backend, global_messaging_context());
if (db_ctx == NULL) {
TALLOC_FREE(backend);
return NT_STATUS_NO_MEMORY;
table->global.db_ctx = smbXsrv_session_global_db_ctx;
- subreq = messaging_read_send(table, client->ev_ctx, client->msg_ctx,
+ subreq = messaging_read_send(table,
+ client->raw_ev_ctx,
+ client->msg_ctx,
MSG_SMBXSRV_SESSION_CLOSE);
if (subreq == NULL) {
TALLOC_FREE(table);
goto next;
}
- subreq = smb2srv_session_shutdown_send(session, client->ev_ctx,
+ subreq = smb2srv_session_shutdown_send(session, client->raw_ev_ctx,
session, NULL);
if (subreq == NULL) {
status = NT_STATUS_NO_MEMORY;
next:
TALLOC_FREE(rec);
- subreq = messaging_read_send(table, client->ev_ctx, client->msg_ctx,
+ subreq = messaging_read_send(table,
+ client->raw_ev_ctx,
+ client->msg_ctx,
MSG_SMBXSRV_SESSION_CLOSE);
if (subreq == NULL) {
const char *r;
return;
}
- status = messaging_send(conn->msg_ctx,
+ status = messaging_send(conn->client->msg_ctx,
global->channels[0].server_id,
MSG_SMBXSRV_SESSION_CLOSE, &blob);
TALLOC_FREE(state->db_rec);
session->idle_time = now;
session->status = NT_STATUS_MORE_PROCESSING_REQUIRED;
session->client = conn->client;
+ session->homes_snum = -1;
status = smbXsrv_session_global_allocate(table->global.db_ctx,
session,
}
if (DEBUGLVL(10)) {
- struct smbXsrv_sessionB session_blob;
-
- ZERO_STRUCT(session_blob);
- session_blob.version = SMBXSRV_VERSION_0;
- session_blob.info.info0 = session;
+ struct smbXsrv_sessionB session_blob = {
+ .version = SMBXSRV_VERSION_0,
+ .info.info0 = session,
+ };
DEBUG(10,("smbXsrv_session_create: global_id (0x%08x) stored\n",
session->global->session_global_id));
c = &global->channels[global->num_channels];
ZERO_STRUCTP(c);
- c->server_id = messaging_server_id(conn->msg_ctx);
+ c->server_id = messaging_server_id(conn->client->msg_ctx);
c->local_address = tsocket_address_string(conn->local_address,
global->channels);
if (c->local_address == NULL) {
}
if (DEBUGLVL(10)) {
- struct smbXsrv_sessionB session_blob;
-
- ZERO_STRUCT(session_blob);
- session_blob.version = SMBXSRV_VERSION_0;
- session_blob.info.info0 = session;
+ struct smbXsrv_sessionB session_blob = {
+ .version = SMBXSRV_VERSION_0,
+ .info.info0 = session,
+ };
DEBUG(10,("smbXsrv_session_update: global_id (0x%08x) stored\n",
session->global->session_global_id));
session->client = NULL;
session->status = NT_STATUS_USER_SESSION_DELETED;
+ if (session->compat) {
+ /*
+ * For SMB2 this is a bit redundant as files are also close
+ * below via smb2srv_tcon_disconnect_all() -> ... ->
+ * smbXsrv_tcon_disconnect() -> close_cnum() ->
+ * file_close_conn().
+ */
+ file_close_user(sconn, session->compat->vuid);
+ }
+
+ if (session->tcon_table != NULL) {
+ /*
+ * Note: We only have a tcon_table for SMB2.
+ */
+ status = smb2srv_tcon_disconnect_all(session);
+ if (!NT_STATUS_IS_OK(status)) {
+ DEBUG(0, ("smbXsrv_session_logoff(0x%08x): "
+ "smb2srv_tcon_disconnect_all() failed: %s\n",
+ session->global->session_global_id,
+ nt_errstr(status)));
+ error = status;
+ }
+ }
+
+ if (session->compat) {
+ invalidate_vuid(sconn, session->compat->vuid);
+ session->compat = NULL;
+ }
+
global_rec = session->global->db_rec;
session->global->db_rec = NULL;
if (global_rec == NULL) {
}
session->db_rec = NULL;
- if (session->compat) {
- file_close_user(sconn, session->compat->vuid);
- }
-
- if (session->tcon_table != NULL) {
- /*
- * Note: We only have a tcon_table for SMB2.
- */
- status = smb2srv_tcon_disconnect_all(session);
- if (!NT_STATUS_IS_OK(status)) {
- DEBUG(0, ("smbXsrv_session_logoff(0x%08x): "
- "smb2srv_tcon_disconnect_all() failed: %s\n",
- session->global->session_global_id,
- nt_errstr(status)));
- error = status;
- }
- }
-
- if (session->compat) {
- invalidate_vuid(sconn, session->compat->vuid);
- session->compat = NULL;
- }
-
return error;
}
static int smbXsrv_session_logoff_all_callback(struct db_record *local_rec,
void *private_data);
-NTSTATUS smbXsrv_session_logoff_all(struct smbXsrv_connection *conn)
+NTSTATUS smbXsrv_session_logoff_all(struct smbXsrv_client *client)
{
- struct smbXsrv_session_table *table = conn->client->session_table;
+ struct smbXsrv_session_table *table = client->session_table;
struct smbXsrv_session_logoff_all_state state;
NTSTATUS status;
int count = 0;