ldb_tdb: Use key value ops for fetch command
authorGarming Sam <garming@catalyst.net.nz>
Tue, 10 Jan 2017 07:43:38 +0000 (20:43 +1300)
committerAndrew Bartlett <abartlet@samba.org>
Mon, 5 Mar 2018 19:50:15 +0000 (20:50 +0100)
Signed-off-by: Garming Sam <garming@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
lib/ldb/ldb_tdb/ldb_search.c
lib/ldb/ldb_tdb/ldb_tdb.c
lib/ldb/ldb_tdb/ldb_tdb.h

index 58cb36d1f33f9ffa399faf6a9fe76692d3171c5c..4332036790b8684c3ae1ec11ae7c5c871f595453 100644 (file)
@@ -252,9 +252,9 @@ int ltdb_search_key(struct ldb_module *module, struct ltdb_private *ltdb,
        msg->num_elements = 0;
        msg->elements = NULL;
 
-       ret = tdb_parse_record(ltdb->tdb, tdb_key, 
-                              ltdb_parse_data_unpack, &ctx); 
-       
+       ret = ltdb->kv_ops->fetch_and_parse(ltdb, tdb_key,
+                                           ltdb_parse_data_unpack, &ctx);
+
        if (ret == -1) {
                ret = ltdb->kv_ops->error(ltdb);
                if (ret == LDB_SUCCESS) {
index 6593dc2ee93a842afeb74cfcbdba267b90f7e1de..f02ad5b53b16fd391281f1a32f4abf9c7282ebd8 100644 (file)
@@ -1714,6 +1714,14 @@ static void ltdb_handle_extended(struct ltdb_context *ctx)
        ltdb_request_extended_done(ctx, ext, ret);
 }
 
+static int ltdb_tdb_parse_record(struct ltdb_private *ltdb, TDB_DATA key,
+                                int (*parser)(TDB_DATA key, TDB_DATA data,
+                                              void *private_data),
+                                void *ctx)
+{
+       return tdb_parse_record(ltdb->tdb, key, parser, ctx);
+}
+
 static const char * ltdb_tdb_name(struct ltdb_private *ltdb)
 {
        return tdb_name(ltdb->tdb);
@@ -1731,6 +1739,7 @@ static bool ltdb_tdb_changed(struct ltdb_private *ltdb)
 static const struct kv_db_ops key_value_ops = {
        .store = ltdb_tdb_store,
        .delete = ltdb_tdb_delete,
+       .fetch_and_parse = ltdb_tdb_parse_record,
        .lock_read = ltdb_lock_read,
        .unlock_read = ltdb_unlock_read,
        .begin_write = ltdb_tdb_transaction_start,
index a40bbad96996f6bded7877a28b61714633a16223..ce8f19c2265bc71440b59e5b00ccf2b1d4609cf3 100644 (file)
@@ -8,6 +8,10 @@ struct ltdb_private;
 struct kv_db_ops {
        int (*store)(struct ltdb_private *ltdb, TDB_DATA key, TDB_DATA data, int flags);
        int (*delete)(struct ltdb_private *ltdb, TDB_DATA key);
+       int (*fetch_and_parse)(struct ltdb_private *ltdb, TDB_DATA key,
+                               int (*parser)(TDB_DATA key, TDB_DATA data,
+                                             void *private_data),
+                               void *ctx);
        int (*lock_read)(struct ldb_module *);
        int (*unlock_read)(struct ldb_module *);
        int (*begin_write)(struct ltdb_private *);