lib: Add tdb_fetch_talloc
authorVolker Lendecke <vl@samba.org>
Tue, 21 Oct 2014 10:39:53 +0000 (10:39 +0000)
committerJeremy Allison <jra@samba.org>
Tue, 16 Dec 2014 17:56:03 +0000 (18:56 +0100)
Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
lib/util/util_tdb.c
lib/util/util_tdb.h

index f84ab3314e5c7abfef088430fb057ebe89d4c853..9bf18dc092237c966ce9f26b88df19694778690d 100644 (file)
@@ -483,3 +483,36 @@ int map_unix_error_from_tdb(enum TDB_ERROR err)
        };
        return result;
 }
+
+struct tdb_fetch_talloc_state {
+       TALLOC_CTX *mem_ctx;
+       uint8_t *buf;
+};
+
+static int tdb_fetch_talloc_parser(TDB_DATA key, TDB_DATA data,
+                                   void *private_data)
+{
+       struct tdb_fetch_talloc_state *state = private_data;
+       state->buf = talloc_memdup(state->mem_ctx, data.dptr, data.dsize);
+       return 0;
+}
+
+int tdb_fetch_talloc(struct tdb_context *tdb, TDB_DATA key,
+                    TALLOC_CTX *mem_ctx, uint8_t **buf)
+{
+       struct tdb_fetch_talloc_state state = { .mem_ctx = mem_ctx };
+       int ret;
+
+       ret = tdb_parse_record(tdb, key, tdb_fetch_talloc_parser, &state);
+       if (ret == -1) {
+               enum TDB_ERROR err = tdb_error(tdb);
+               return map_unix_error_from_tdb(err);
+       }
+
+       if (state.buf == NULL) {
+               return ENOMEM;
+       }
+
+       *buf = state.buf;
+       return 0;
+}
index 7a457f736fd9a32498c8418580c94a5745fd8bdb..3b50789b01544440a44bc21b9c37a26895281730 100644 (file)
@@ -145,4 +145,7 @@ NTSTATUS map_nt_error_from_tdb(enum TDB_ERROR err);
 
 int map_unix_error_from_tdb(enum TDB_ERROR err);
 
+int tdb_fetch_talloc(struct tdb_context *tdb, TDB_DATA key,
+                    TALLOC_CTX *mem_ctx, uint8_t **buf);
+
 #endif /* _____LIB_UTIL_UTIL_TDB_H__ */