+ return NT_STATUS_OK;
+}
+
+
+static int delete_record(struct db_record *rec, void *data)
+{
+ NTSTATUS status = dbwrap_record_delete(rec);
+ return NT_STATUS_IS_OK(status) ? 0 : -1;
+}
+
+/*
+ * Fallback wipe implementation using traverse and delete if no genuine
+ * wipe operation is provided
+ */
+static int dbwrap_fallback_wipe(struct db_context *db)
+{
+ NTSTATUS status = dbwrap_trans_traverse(db, delete_record, NULL);
+ return NT_STATUS_IS_OK(status) ? 0 : -1;
+}
+
+
+/*
+ * Wrapper functions for the backend methods
+ */
+
+TDB_DATA dbwrap_record_get_key(const struct db_record *rec)
+{
+ return rec->key;
+}
+
+TDB_DATA dbwrap_record_get_value(const struct db_record *rec)
+{
+ return rec->value;
+}
+
+NTSTATUS dbwrap_record_store(struct db_record *rec, TDB_DATA data, int flags)
+{
+ return rec->store(rec, data, flags);
+}
+
+NTSTATUS dbwrap_record_delete(struct db_record *rec)
+{
+ return rec->delete_rec(rec);
+}
+
+struct db_record *dbwrap_fetch_locked(struct db_context *db,
+ TALLOC_CTX *mem_ctx,
+ TDB_DATA key)
+{
+ return db->fetch_locked(db, mem_ctx, key);
+}
+
+NTSTATUS dbwrap_fetch(struct db_context *db, TALLOC_CTX *mem_ctx,
+ TDB_DATA key, TDB_DATA *value)
+{
+ if (value == NULL) {
+ return NT_STATUS_INVALID_PARAMETER;
+ }
+ if (db->fetch == NULL) {
+ return dbwrap_fallback_fetch(db, mem_ctx, key, value);
+ }
+ return db->fetch(db, mem_ctx, key, value);
+}
+
+bool dbwrap_exists(struct db_context *db, TDB_DATA key)
+{
+ int result;
+ if (db->exists != NULL) {
+ result = db->exists(db, key);
+ } else {
+ result = dbwrap_fallback_exists(db,key);
+ }
+ return (result == 1);