smbd: Avoid using dbwrap_watched_watch_recv's prec argument
authorVolker Lendecke <vl@samba.org>
Sat, 1 Jul 2017 06:20:23 +0000 (08:20 +0200)
committerRalph Boehme <slow@samba.org>
Wed, 29 Nov 2017 15:59:15 +0000 (16:59 +0100)
This is the only user of the "prec" argument of
dbwrap_watched_watch_recv. The next patch will remove this
functionality, as it's easily replaced here.

Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
source3/smbd/smbXsrv_session.c

index f84d2a94ce1d60900126e992359e7cf994c3055a..24767483287df2de7f8ac7cbd0d2d4e0d656c33c 100644 (file)
@@ -956,6 +956,7 @@ struct smb2srv_session_close_previous_state {
        struct tevent_context *ev;
        struct smbXsrv_connection *connection;
        struct dom_sid *current_sid;
+       uint64_t previous_session_id;
        uint64_t current_session_id;
        struct db_record *db_rec;
 };
@@ -984,6 +985,7 @@ struct tevent_req *smb2srv_session_close_previous_send(TALLOC_CTX *mem_ctx,
        }
        state->ev = ev;
        state->connection = conn;
+       state->previous_session_id = previous_session_id;
        state->current_session_id = current_session_id;
 
        if (global_zeros != 0) {
@@ -1124,15 +1126,21 @@ static void smb2srv_session_close_previous_modified(struct tevent_req *subreq)
        struct smb2srv_session_close_previous_state *state =
                tevent_req_data(req,
                struct smb2srv_session_close_previous_state);
+       uint32_t global_id;
        NTSTATUS status;
 
-       status = dbwrap_watched_watch_recv(subreq, state, &state->db_rec, NULL,
-                                          NULL);
+       status = dbwrap_watched_watch_recv(subreq, state, NULL, NULL, NULL);
        TALLOC_FREE(subreq);
        if (tevent_req_nterror(req, status)) {
                return;
        }
 
+       global_id = state->previous_session_id & UINT32_MAX;
+
+       state->db_rec = smbXsrv_session_global_fetch_locked(
+               state->connection->client->session_table->global.db_ctx,
+               global_id, state /* TALLOC_CTX */);
+
        smb2srv_session_close_previous_check(req);
 }