From f23b25cfbe62e4e3a43ff55fe95680ca33733467 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Wed, 13 Jul 2016 07:41:02 +0200 Subject: [PATCH] smbd: Convert smbXsrv_open_global.tdb to new dbwrap_watch Signed-off-by: Volker Lendecke Reviewed-by: Jeremy Allison --- source3/smbd/globals.h | 2 +- source3/smbd/server.c | 2 +- source3/smbd/smbXsrv_session.c | 42 +++++++++++++++++++--------------- 3 files changed, 25 insertions(+), 21 deletions(-) diff --git a/source3/smbd/globals.h b/source3/smbd/globals.h index 9e3e95c8904..02665336c26 100644 --- a/source3/smbd/globals.h +++ b/source3/smbd/globals.h @@ -554,7 +554,7 @@ NTSTATUS smb2srv_client_connection_pass(struct smbd_smb2_request *smb2req, NTSTATUS smbXsrv_connection_init_tables(struct smbXsrv_connection *conn, enum protocol_types protocol); -NTSTATUS smbXsrv_session_global_init(void); +NTSTATUS smbXsrv_session_global_init(struct messaging_context *msg_ctx); NTSTATUS smbXsrv_session_create(struct smbXsrv_connection *conn, NTTIME now, struct smbXsrv_session **_session); diff --git a/source3/smbd/server.c b/source3/smbd/server.c index 6e70edcd8b1..65dc173a0ef 100644 --- a/source3/smbd/server.c +++ b/source3/smbd/server.c @@ -1582,7 +1582,7 @@ extern void build_options(bool screen); exit_daemon("Samba cannot init server context", EACCES); } - status = smbXsrv_session_global_init(); + status = smbXsrv_session_global_init(msg_ctx); if (!NT_STATUS_IS_OK(status)) { exit_daemon("Samba cannot init session context", EACCES); } diff --git a/source3/smbd/smbXsrv_session.c b/source3/smbd/smbXsrv_session.c index 51668c22a47..381ce407c70 100644 --- a/source3/smbd/smbXsrv_session.c +++ b/source3/smbd/smbXsrv_session.c @@ -53,9 +53,10 @@ struct smbXsrv_session_table { static struct db_context *smbXsrv_session_global_db_ctx = NULL; -NTSTATUS smbXsrv_session_global_init(void) +NTSTATUS smbXsrv_session_global_init(struct messaging_context *msg_ctx) { char *global_path = NULL; + struct db_context *backend = NULL; struct db_context *db_ctx = NULL; if (smbXsrv_session_global_db_ctx != NULL) { @@ -70,16 +71,16 @@ NTSTATUS smbXsrv_session_global_init(void) return NT_STATUS_NO_MEMORY; } - db_ctx = db_open(NULL, global_path, - 0, /* hash_size */ - TDB_DEFAULT | - TDB_CLEAR_IF_FIRST | - TDB_INCOMPATIBLE_HASH, - O_RDWR | O_CREAT, 0600, - DBWRAP_LOCK_ORDER_1, - DBWRAP_FLAG_NONE); + backend = db_open(NULL, global_path, + 0, /* hash_size */ + TDB_DEFAULT | + TDB_CLEAR_IF_FIRST | + TDB_INCOMPATIBLE_HASH, + O_RDWR | O_CREAT, 0600, + DBWRAP_LOCK_ORDER_1, + DBWRAP_FLAG_NONE); TALLOC_FREE(global_path); - if (db_ctx == NULL) { + if (backend == NULL) { NTSTATUS status; status = map_nt_error_from_unix_common(errno); @@ -87,6 +88,12 @@ NTSTATUS smbXsrv_session_global_init(void) return status; } + db_ctx = db_open_watched(NULL, backend, server_messaging_context()); + if (db_ctx == NULL) { + TALLOC_FREE(backend); + return NT_STATUS_NO_MEMORY; + } + smbXsrv_session_global_db_ctx = db_ctx; return NT_STATUS_OK; @@ -242,7 +249,7 @@ static NTSTATUS smbXsrv_session_table_init(struct smbXsrv_connection *conn, table->local.highest_id = highest_id; table->local.max_sessions = max_sessions; - status = smbXsrv_session_global_init(); + status = smbXsrv_session_global_init(client->msg_ctx); if (!NT_STATUS_IS_OK(status)) { TALLOC_FREE(table); return status; @@ -250,8 +257,6 @@ static NTSTATUS smbXsrv_session_table_init(struct smbXsrv_connection *conn, table->global.db_ctx = smbXsrv_session_global_db_ctx; - dbwrap_watch_db(table->global.db_ctx, client->msg_ctx); - subreq = messaging_read_send(table, client->ev_ctx, client->msg_ctx, MSG_SMBXSRV_SESSION_CLOSE); if (subreq == NULL) { @@ -1065,9 +1070,8 @@ static void smb2srv_session_close_previous_check(struct tevent_req *req) return; } - subreq = dbwrap_record_watch_send(state, state->ev, - state->db_rec, conn->msg_ctx, - (struct server_id){0}); + subreq = dbwrap_watched_watch_send(state, state->ev, state->db_rec, + (struct server_id){0}); if (tevent_req_nomem(subreq, req)) { TALLOC_FREE(state->db_rec); return; @@ -1121,8 +1125,8 @@ static void smb2srv_session_close_previous_modified(struct tevent_req *subreq) struct smb2srv_session_close_previous_state); NTSTATUS status; - status = dbwrap_record_watch_recv(subreq, state, &state->db_rec, NULL, - NULL); + status = dbwrap_watched_watch_recv(subreq, state, &state->db_rec, NULL, + NULL); TALLOC_FREE(subreq); if (tevent_req_nterror(req, status)) { return; @@ -1931,7 +1935,7 @@ NTSTATUS smbXsrv_session_global_traverse( }; become_root(); - status = smbXsrv_session_global_init(); + status = smbXsrv_session_global_init(NULL); if (!NT_STATUS_IS_OK(status)) { unbecome_root(); DEBUG(0, ("Failed to initialize session_global: %s\n", -- 2.47.3