s3: add function dbwrap_trans_traverse
authorGregor Beck <gbeck@sernet.de>
Wed, 16 Mar 2011 08:13:40 +0000 (09:13 +0100)
committerMichael Adam <obnox@samba.org>
Mon, 4 Apr 2011 13:57:35 +0000 (15:57 +0200)
source3/include/dbwrap.h
source3/lib/dbwrap_util.c

index 8dba624de0c2429832a171ca040b08f8c8fcc01f..3d4de279222794294558b1b7075bfd3a9b927113 100644 (file)
@@ -127,6 +127,9 @@ NTSTATUS dbwrap_trans_delete_bystring(struct db_context *db, const char *key);
 NTSTATUS dbwrap_trans_do(struct db_context *db,
                         NTSTATUS (*action)(struct db_context *, void *),
                         void *private_data);
+NTSTATUS dbwrap_trans_traverse(struct db_context *db,
+                              int (*f)(struct db_record*, void*),
+                              void *private_data);
 NTSTATUS dbwrap_delete_bystring_upper(struct db_context *db, const char *key);
 NTSTATUS dbwrap_store_bystring_upper(struct db_context *db, const char *key,
                                     TDB_DATA data, int flags);
index 0020fc675edf43bc16c8639937d4849ee714c110..6e5f14af333ed944c3c67d4100051c998dca56d5 100644 (file)
@@ -416,6 +416,36 @@ NTSTATUS dbwrap_trans_do(struct db_context *db,
        return NT_STATUS_INTERNAL_DB_CORRUPTION;
 }
 
+struct dbwrap_trans_traverse_action_ctx {
+       int (*f)(struct db_record* rec, void* private_data);
+       void* private_data;
+};
+
+
+static NTSTATUS dbwrap_trans_traverse_action(struct db_context* db, void* private_data)
+{
+       struct dbwrap_trans_traverse_action_ctx* ctx =
+               (struct dbwrap_trans_traverse_action_ctx*)private_data;
+
+       int ret = db->traverse(db, ctx->f, ctx->private_data);
+
+       return (ret == -1) ? NT_STATUS_INTERNAL_DB_CORRUPTION : NT_STATUS_OK;
+}
+
+NTSTATUS dbwrap_trans_traverse(struct db_context *db,
+                              int (*f)(struct db_record*, void*),
+                              void *private_data)
+{
+       struct dbwrap_trans_traverse_action_ctx ctx = {
+               .f = f,
+               .private_data = private_data,
+       };
+       return dbwrap_trans_do(db, dbwrap_trans_traverse_action, &ctx);
+}
+
+
+
+
 NTSTATUS dbwrap_delete_bystring_upper(struct db_context *db, const char *key)
 {
        char *key_upper;