summaryrefslogtreecommitdiffstats
path: root/source4/lib/messaging/messaging.c
diff options
context:
space:
mode:
authorVolker Lendecke <vl@samba.org>2014-07-17 14:07:45 +0000
committerVolker Lendecke <vl@samba.org>2014-07-21 18:00:10 +0200
commit658b7ec4eef5227f7b0e7470faae043509dac24d (patch)
tree01ec9704ea7d7dd46bdacf7360e76f9e01e44cba /source4/lib/messaging/messaging.c
parent705e4174c988eea5c5b3a834710f9f920369c8ee (diff)
downloadsamba-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.c30
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);