diff options
author | Michael Adam <obnox@samba.org> | 2016-02-27 01:06:13 +0100 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2016-02-28 05:03:22 +0100 |
commit | a9dcbd09801ab19c2abdb803c730120bd20d8175 (patch) | |
tree | dc3c1f69351217e92417974979c52518f831debf | |
parent | a5e4f14c3b132c886cda2ab4cc14f1f764ff04eb (diff) | |
download | samba-a9dcbd09801ab19c2abdb803c730120bd20d8175.tar.gz |
smbXsrv_tcon: factor fetch-locking of local record into function
Signed-off-by: Michael Adam <obnox@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
-rw-r--r-- | source3/smbd/smbXsrv_tcon.c | 58 |
1 files changed, 29 insertions, 29 deletions
diff --git a/source3/smbd/smbXsrv_tcon.c b/source3/smbd/smbXsrv_tcon.c index 5f10c4997c0..ddd03f61090 100644 --- a/source3/smbd/smbXsrv_tcon.c +++ b/source3/smbd/smbXsrv_tcon.c @@ -171,6 +171,27 @@ static struct db_record *smbXsrv_tcon_global_fetch_locked( return rec; } +static struct db_record *smbXsrv_tcon_local_fetch_locked( + struct db_context *db, + uint32_t id, + TALLOC_CTX *mem_ctx) +{ + TDB_DATA key; + uint8_t key_buf[SMBXSRV_TCON_LOCAL_TDB_KEY_SIZE]; + struct db_record *rec = NULL; + + key = smbXsrv_tcon_local_id_to_key(id, key_buf); + + rec = dbwrap_fetch_locked(db, mem_ctx, key); + + if (rec == NULL) { + DBG_DEBUG("Failed to lock local id 0x%08x, key '%s'\n", id, + hex_encode_talloc(talloc_tos(), key.dptr, key.dsize)); + } + + return rec; +} + static NTSTATUS smbXsrv_tcon_table_init(TALLOC_CTX *mem_ctx, struct smbXsrv_tcon_table *table, uint32_t lowest_id, @@ -287,8 +308,6 @@ static NTSTATUS smb1srv_tcon_local_allocate_id(struct db_context *db, for (i = 0; i < (range / 2); i++) { uint32_t id; - uint8_t key_buf[SMBXSRV_TCON_LOCAL_TDB_KEY_SIZE]; - TDB_DATA key; TDB_DATA val; struct db_record *rec = NULL; @@ -302,9 +321,7 @@ static NTSTATUS smb1srv_tcon_local_allocate_id(struct db_context *db, id = highest_id; } - key = smbXsrv_tcon_local_id_to_key(id, key_buf); - - rec = dbwrap_fetch_locked(db, mem_ctx, key); + rec = smbXsrv_tcon_local_fetch_locked(db, id, mem_ctx); if (rec == NULL) { return NT_STATUS_INSUFFICIENT_RESOURCES; } @@ -354,16 +371,12 @@ static NTSTATUS smb1srv_tcon_local_allocate_id(struct db_context *db, if (NT_STATUS_IS_OK(state.status)) { uint32_t id; - uint8_t key_buf[SMBXSRV_TCON_LOCAL_TDB_KEY_SIZE]; - TDB_DATA key; TDB_DATA val; struct db_record *rec = NULL; id = state.useable_id; - key = smbXsrv_tcon_local_id_to_key(id, key_buf); - - rec = dbwrap_fetch_locked(db, mem_ctx, key); + rec = smbXsrv_tcon_local_fetch_locked(db, id, mem_ctx); if (rec == NULL) { return NT_STATUS_INSUFFICIENT_RESOURCES; } @@ -755,17 +768,14 @@ static NTSTATUS smbXsrv_tcon_create(struct smbXsrv_tcon_table *table, if (protocol >= PROTOCOL_SMB2_02) { uint64_t id = global->tcon_global_id; - uint8_t key_buf[SMBXSRV_TCON_LOCAL_TDB_KEY_SIZE]; - TDB_DATA key; global->tcon_wire_id = id; tcon->local_id = global->tcon_global_id; - key = smbXsrv_tcon_local_id_to_key(tcon->local_id, key_buf); - - local_rec = dbwrap_fetch_locked(table->local.db_ctx, - tcon, key); + local_rec = smbXsrv_tcon_local_fetch_locked(table->local.db_ctx, + tcon->local_id, + tcon /* TALLOC_CTX */); if (local_rec == NULL) { TALLOC_FREE(tcon); return NT_STATUS_NO_MEMORY; @@ -926,20 +936,10 @@ NTSTATUS smbXsrv_tcon_disconnect(struct smbXsrv_tcon *tcon, uint64_t vuid) local_rec = tcon->db_rec; if (local_rec == NULL) { - uint8_t key_buf[SMBXSRV_TCON_LOCAL_TDB_KEY_SIZE]; - TDB_DATA key; - - key = smbXsrv_tcon_local_id_to_key(tcon->local_id, key_buf); - - local_rec = dbwrap_fetch_locked(table->local.db_ctx, - tcon, key); + local_rec = smbXsrv_tcon_local_fetch_locked(table->local.db_ctx, + tcon->local_id, + tcon /* TALLOC_CTX */); if (local_rec == NULL) { - DEBUG(0, ("smbXsrv_tcon_disconnect(0x%08x, '%s'): " - "Failed to lock local key '%s'\n", - tcon->global->tcon_global_id, - tcon->global->share_name, - hex_encode_talloc(local_rec, key.dptr, - key.dsize))); error = NT_STATUS_INTERNAL_ERROR; } } |