return NT_STATUS_IS_OK(status) ? 0 : -1;
}
+static int do_nothing(struct db_record *rec, void *unused)
+{
+ return 0;
+}
+
+/*
+ * Fallback check operation: just traverse.
+ */
+static int dbwrap_fallback_check(struct db_context *db)
+{
+ NTSTATUS status = dbwrap_traverse_read(db, do_nothing, NULL, NULL);
+ return NT_STATUS_IS_OK(status) ? 0 : -1;
+}
/*
* Wrapper functions for the backend methods
return db->wipe(db);
}
+int dbwrap_check(struct db_context *db)
+{
+ if (db->check == NULL) {
+ return dbwrap_fallback_check(db);
+ }
+ return db->check(db);
+}
+
int dbwrap_get_seqnum(struct db_context *db)
{
return db->get_seqnum(db);
void *private_data),
void *private_data);
int dbwrap_wipe(struct db_context *db);
+int dbwrap_check(struct db_context *db);
int dbwrap_get_seqnum(struct db_context *db);
int dbwrap_transaction_start(struct db_context *db);
int dbwrap_transaction_commit(struct db_context *db);
void *private_data);
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);
void *private_data;
enum dbwrap_lock_order lock_order;
return tdb_wipe_all(ctx->wtdb->tdb);
}
+static int db_tdb_check(struct db_context *db)
+{
+ struct db_tdb_ctx *ctx = talloc_get_type_abort(
+ db->private_data, struct db_tdb_ctx);
+ return tdb_check(ctx->wtdb->tdb, NULL, NULL);
+}
+
struct db_tdb_parse_state {
void (*parser)(TDB_DATA key, TDB_DATA data,
void *private_data);
result->exists = db_tdb_exists;
result->wipe = db_tdb_wipe;
result->id = db_tdb_id;
+ result->check = db_tdb_check;
result->stored_callback = NULL;
return result;