return 0;
}
+/*
+ * Fall back using fetch if no genuine exists operation is provided
+ */
+
+static int dbwrap_fallback_exists(struct db_context *db, TDB_DATA key)
+{
+ TDB_DATA val;
+ if ( db->fetch(db, talloc_tos(), key, &val) != 0 ) {
+ return 0;
+ }
+ if (val.dptr == NULL ) {
+ return 0;
+ } else {
+ TALLOC_FREE(val.dptr);
+ return 1;
+ }
+}
+
/*
* Fall back using fetch if no genuine parse operation is provided
*/
return result;
}
+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);
+}
+
NTSTATUS dbwrap_store(struct db_context *db, TDB_DATA key,
TDB_DATA data, int flags)
{
int (*parser)(TDB_DATA key, TDB_DATA data,
void *private_data),
void *private_data);
+ int (*exists)(struct db_context *db,TDB_DATA key);
void *private_data;
bool persistent;
};
TDB_DATA data, int flags);
TDB_DATA dbwrap_fetch(struct db_context *db, TALLOC_CTX *mem_ctx,
TDB_DATA key);
+bool dbwrap_exists(struct db_context *db, TDB_DATA key);
NTSTATUS dbwrap_traverse(struct db_context *db,
int (*f)(struct db_record*, void*),
void *private_data,