From b5d056ca231f67b4c6fd608ecbe6f83f1823a33b Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Thu, 8 Dec 2011 16:43:40 +0100 Subject: [PATCH] s3-dbwrap: Rewrite dbwrap_fetch in terms of dbwrap_parse_record Signed-off-by: Michael Adam --- source3/lib/dbwrap/dbwrap.c | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/source3/lib/dbwrap/dbwrap.c b/source3/lib/dbwrap/dbwrap.c index 0635d76b2cb..4df2474ea17 100644 --- a/source3/lib/dbwrap/dbwrap.c +++ b/source3/lib/dbwrap/dbwrap.c @@ -135,16 +135,43 @@ struct db_record *dbwrap_fetch_locked(struct db_context *db, return db->fetch_locked(db, mem_ctx, key); } +struct dbwrap_fetch_state { + TALLOC_CTX *mem_ctx; + TDB_DATA data; +}; + +static void dbwrap_fetch_parser(TDB_DATA key, TDB_DATA data, + void *private_data) +{ + struct dbwrap_fetch_state *state = + (struct dbwrap_fetch_state *)private_data; + + state->data.dsize = data.dsize; + state->data.dptr = (uint8_t *)talloc_memdup(state->mem_ctx, data.dptr, + data.dsize); +} + NTSTATUS dbwrap_fetch(struct db_context *db, TALLOC_CTX *mem_ctx, TDB_DATA key, TDB_DATA *value) { + struct dbwrap_fetch_state state; + NTSTATUS status; + if (value == NULL) { return NT_STATUS_INVALID_PARAMETER; } - if (db->fetch == NULL) { - return dbwrap_fallback_fetch(db, mem_ctx, key, value); + + state.mem_ctx = mem_ctx; + + status = dbwrap_parse_record(db, key, dbwrap_fetch_parser, &state); + if (!NT_STATUS_IS_OK(status)) { + return status; + } + if ((state.data.dsize != 0) && (state.data.dptr == NULL)) { + return NT_STATUS_NO_MEMORY; } - return db->fetch(db, mem_ctx, key, value); + *value = state.data; + return NT_STATUS_OK; } bool dbwrap_exists(struct db_context *db, TDB_DATA key) -- 2.34.1