s3:dbwrap: add function dbwrap_wipe()
authorGregor Beck <gbeck@sernet.de>
Tue, 16 Aug 2011 12:39:19 +0000 (14:39 +0200)
committerMichael Adam <obnox@samba.org>
Tue, 11 Oct 2011 12:17:55 +0000 (14:17 +0200)
Signed-off-by: Michael Adam <obnox@samba.org>
source3/lib/dbwrap/dbwrap.c
source3/lib/dbwrap/dbwrap.h
source3/lib/dbwrap/dbwrap_open.c
source3/lib/dbwrap/dbwrap_private.h

index af8e28cb7e5a67c2a4fc5e115b124bc61cc6894a..ad3f914e41e850ce1fec7452461776c208beb1a2 100644 (file)
@@ -77,6 +77,23 @@ int dbwrap_fallback_parse_record(struct db_context *db, TDB_DATA key,
 }
 
 
+static int delete_record(struct db_record *rec, void *data)
+{
+       NTSTATUS status = rec->delete_rec(rec);
+       return NT_STATUS_IS_OK(status) ? 0 : -1;
+}
+
+/*
+ * Fallback wipe ipmlementation using traverse and delete if no genuine
+ * wipe operation is provided
+ */
+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;
+}
+
+
 TDB_DATA dbwrap_fetch(struct db_context *db, TALLOC_CTX *mem_ctx,
                      TDB_DATA key)
 {
@@ -186,3 +203,8 @@ int dbwrap_parse_record(struct db_context *db, TDB_DATA key,
                return dbwrap_fallback_parse_record(db, key, parser, private_data);
        }
 }
+
+int dbwrap_wipe(struct db_context *db)
+{
+       return db->wipe(db);
+}
index 0672de1f504a718a10d99e48fd039c5d84db6e67..0ddc9e145fc2b1c55dd13a5689b5249298e6a413 100644 (file)
@@ -53,6 +53,7 @@ struct db_context {
                                          void *private_data),
                            void *private_data);
        int (*exists)(struct db_context *db,TDB_DATA key);
+       int (*wipe)(struct db_context *db);
        void *private_data;
        bool persistent;
 };
@@ -77,6 +78,7 @@ int dbwrap_parse_record(struct db_context *db, TDB_DATA key,
                        int (*parser)(TDB_DATA key, TDB_DATA data,
                                      void *private_data),
                        void *private_data);
+int dbwrap_wipe(struct db_context *db);
 
 
 /* The following definitions come from lib/dbwrap_util.c  */
index b605e5f66cfa3aa91f8122d6cd22667557cb5241..ef500e19a8132c3899c851793670f7a20885cd23 100644 (file)
@@ -116,6 +116,9 @@ struct db_context *db_open(TALLOC_CTX *mem_ctx,
        if ((result != NULL) && (result->parse_record == NULL)) {
                result->parse_record = dbwrap_fallback_parse_record;
        }
+       if ((result != NULL) && (result->wipe == NULL)) {
+               result->wipe = dbwrap_fallback_wipe;
+       }
 
        return result;
 }
index c8f3a1062f7ee86d46de234da74eae9aadb1b9ee..1e221878f53c647b4a5b154fc17f0598ac78092b 100644 (file)
@@ -34,5 +34,7 @@ int dbwrap_fallback_parse_record(struct db_context *db, TDB_DATA key,
                                               void *private_data),
                                 void *private_data);
 
+int dbwrap_fallback_wipe(struct db_context *db);
+
 #endif /* __DBWRAP_PRIVATE_H__ */