return db->transaction_cancel(db);
}
-void dbwrap_db_id(struct db_context *db, const uint8_t **id, size_t *idlen)
+size_t dbwrap_db_id(struct db_context *db, uint8_t *id, size_t idlen)
{
- db->id(db, id, idlen);
+ return db->id(db, id, idlen);
}
bool dbwrap_is_persistent(struct db_context *db)
NTSTATUS dbwrap_transaction_start_nonblock(struct db_context *db);
int dbwrap_transaction_commit(struct db_context *db);
int dbwrap_transaction_cancel(struct db_context *db);
-void dbwrap_db_id(struct db_context *db, const uint8_t **id, size_t *idlen);
+size_t dbwrap_db_id(struct db_context *db, uint8_t *id, size_t idlen);
bool dbwrap_is_persistent(struct db_context *db);
const char *dbwrap_name(struct db_context *db);
return dbwrap_exists(ctx->backing, key);
}
-static void dbwrap_cache_id(struct db_context *db, const uint8_t **id,
- size_t *idlen)
+static size_t dbwrap_cache_id(struct db_context *db, uint8_t *id,
+ size_t idlen)
{
struct db_cache_ctx *ctx = talloc_get_type_abort(
db->private_data, struct db_cache_ctx);
- dbwrap_db_id(ctx->backing, id, idlen);
+
+ return dbwrap_db_id(ctx->backing, id, idlen);
}
struct db_context *db_open_cache(TALLOC_CTX *mem_ctx,
int (*exists)(struct db_context *db,TDB_DATA key);
int (*wipe)(struct db_context *db);
int (*check)(struct db_context *db);
- void (*id)(struct db_context *db, const uint8_t **id, size_t *idlen);
+ size_t (*id)(struct db_context *db, uint8_t *id, size_t idlen);
+
const char *name;
void *private_data;
enum dbwrap_lock_order lock_order;
return 0;
}
-static void db_rbt_id(struct db_context *db, const uint8_t **id, size_t *idlen)
+static size_t db_rbt_id(struct db_context *db, uint8_t *id, size_t idlen)
{
- *id = (uint8_t *)db;
- *idlen = sizeof(struct db_context *);
+ if (idlen >= sizeof(struct db_context *)) {
+ memcpy(id, &db, sizeof(struct db_context *));
+ }
+ return sizeof(struct db_context *);
}
struct db_context *db_open_rbt(TALLOC_CTX *mem_ctx)
return 0;
}
-static void db_tdb_id(struct db_context *db, const uint8_t **id, size_t *idlen)
+static size_t db_tdb_id(struct db_context *db, uint8_t *id, size_t idlen)
{
struct db_tdb_ctx *db_ctx =
talloc_get_type_abort(db->private_data, struct db_tdb_ctx);
- *id = (uint8_t *)&db_ctx->id;
- *idlen = sizeof(db_ctx->id);
+
+ if (idlen >= sizeof(db_ctx->id)) {
+ memcpy(id, &db_ctx->id, sizeof(db_ctx->id));
+ }
+
+ return sizeof(db_ctx->id);
}
struct db_context *db_open_tdb(TALLOC_CTX *mem_ctx,
return tdb_get_seqnum(ctx->wtdb->tdb);
}
-static void db_ctdb_id(struct db_context *db, const uint8_t **id,
- size_t *idlen)
+static size_t db_ctdb_id(struct db_context *db, uint8_t *id, size_t idlen)
{
struct db_ctdb_ctx *ctx = talloc_get_type_abort(
db->private_data, struct db_ctdb_ctx);
- *id = (uint8_t *)&ctx->db_id;
- *idlen = sizeof(ctx->db_id);
+ if (idlen >= sizeof(ctx->db_id)) {
+ memcpy(id, &ctx->db_id, sizeof(ctx->db_id));
+ }
+
+ return sizeof(ctx->db_id);
}
struct db_context *db_open_ctdb(TALLOC_CTX *mem_ctx,
struct db_record *rec,
TDB_DATA *rec_key)
{
- const uint8_t *db_id;
- size_t db_id_len;
+ size_t db_id_len = dbwrap_db_id(db, NULL, 0);
+ uint8_t db_id[db_id_len];
TDB_DATA key, wkey;
- dbwrap_db_id(db, &db_id, &db_id_len);
+ dbwrap_db_id(db, db_id, db_id_len);
+
key = dbwrap_record_get_key(rec);
wkey.dsize = sizeof(uint32_t) + db_id_len + key.dsize;