diff options
author | Volker Lendecke <vl@samba.org> | 2014-07-17 14:07:45 +0000 |
---|---|---|
committer | Volker Lendecke <vl@samba.org> | 2014-07-21 18:00:10 +0200 |
commit | 658b7ec4eef5227f7b0e7470faae043509dac24d (patch) | |
tree | 01ec9704ea7d7dd46bdacf7360e76f9e01e44cba /source4/lib/messaging/messaging.c | |
parent | 705e4174c988eea5c5b3a834710f9f920369c8ee (diff) | |
download | samba-658b7ec4eef5227f7b0e7470faae043509dac24d.tar.gz samba-658b7ec4eef5227f7b0e7470faae043509dac24d.tar.xz samba-658b7ec4eef5227f7b0e7470faae043509dac24d.zip |
messaging4: Use tdb_append in irpc_add_name
This makes the custom locking code unnecessary here
Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
Diffstat (limited to 'source4/lib/messaging/messaging.c')
-rw-r--r-- | source4/lib/messaging/messaging.c | 30 |
1 files changed, 11 insertions, 19 deletions
diff --git a/source4/lib/messaging/messaging.c b/source4/lib/messaging/messaging.c index 66732ceb46..e7b1e9d6cd 100644 --- a/source4/lib/messaging/messaging.c +++ b/source4/lib/messaging/messaging.c @@ -924,28 +924,20 @@ static struct tdb_wrap *irpc_namedb_open(TALLOC_CTX *mem_ctx, const char *base_p */ NTSTATUS irpc_add_name(struct imessaging_context *msg_ctx, const char *name) { - struct tdb_wrap *t = msg_ctx->names_db; - TDB_DATA rec; - int count; + struct tdb_context *t = msg_ctx->names_db->tdb; + struct server_id pid = msg_ctx->server_id; + TDB_DATA key, data; + int ret; NTSTATUS status = NT_STATUS_OK; - if (tdb_lock_bystring(t->tdb, name) != 0) { - return NT_STATUS_LOCK_NOT_GRANTED; - } - rec = tdb_fetch_bystring(t->tdb, name); - count = rec.dsize / sizeof(struct server_id); - rec.dptr = (unsigned char *)realloc_p(rec.dptr, struct server_id, count+1); - rec.dsize += sizeof(struct server_id); - if (rec.dptr == NULL) { - tdb_unlock_bystring(t->tdb, name); - return NT_STATUS_NO_MEMORY; - } - ((struct server_id *)rec.dptr)[count] = msg_ctx->server_id; - if (tdb_store_bystring(t->tdb, name, rec, 0) != 0) { - status = NT_STATUS_INTERNAL_ERROR; + key = string_term_tdb_data(name); + data = (TDB_DATA) { .dptr = (uint8_t *)&pid, .dsize = sizeof(pid) }; + + ret = tdb_append(t, key, data); + if (ret != 0) { + enum TDB_ERROR err = tdb_error(t); + return map_nt_error_from_tdb(err); } - free(rec.dptr); - tdb_unlock_bystring(t->tdb, name); msg_ctx->names = str_list_add(msg_ctx->names, name); talloc_steal(msg_ctx, msg_ctx->names); |