]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
ldb: Use ldb_unpack_data_only_attr_list_flags in re_index()
authorAndrew Bartlett <abartlet@samba.org>
Tue, 26 Jul 2016 23:21:43 +0000 (11:21 +1200)
committerStefan Metzmacher <metze@samba.org>
Thu, 28 Jul 2016 08:06:12 +0000 (10:06 +0200)
This avoids allocation of every value during a re-index scan

Signed-off-by: Andrew Bartlett <abartlet@samba.org>
Reviewed-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
lib/ldb/ldb_tdb/ldb_index.c

index d29662305b2c94461240423f26bb84f3a3210bf7..392b4a71d6c20ac8f446f7c5e91ec51f4224e6c2 100644 (file)
@@ -1534,6 +1534,7 @@ static int re_index(struct tdb_context *tdb, TDB_DATA key, TDB_DATA data, void *
        struct ltdb_reindex_context *ctx = (struct ltdb_reindex_context *)state;
        struct ldb_module *module = ctx->module;
        struct ldb_message *msg;
+       unsigned int nb_elements_in_db;
        const struct ldb_val val = {
                .data = data.dptr,
                .length = data.dsize,
@@ -1554,7 +1555,11 @@ static int re_index(struct tdb_context *tdb, TDB_DATA key, TDB_DATA data, void *
                return -1;
        }
 
-       ret = ldb_unpack_data(ldb, &val, msg);
+       ret = ldb_unpack_data_only_attr_list_flags(ldb, &val,
+                                                  msg,
+                                                  NULL, 0,
+                                                  LDB_UNPACK_DATA_FLAG_NO_DATA_ALLOC,
+                                                  &nb_elements_in_db);
        if (ret != 0) {
                ldb_debug(ldb, LDB_DEBUG_ERROR, "Invalid data for index %s\n",
                                                ldb_dn_get_linearized(msg->dn));