From 2aeae27cb4fc1d78e899e93716fddcc717ad044d Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 15 Jun 2016 09:59:57 +1200 Subject: [PATCH] dsdb: Provide shortcuut for repl_meta_data avoiding search of link targets This makes processing of large numbers of linked attributes much faster, as we never care about the names during that processing Signed-off-by: Andrew Bartlett Reviewed-by: Garming Sam --- .../dsdb/samdb/ldb_modules/extended_dn_out.c | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/source4/dsdb/samdb/ldb_modules/extended_dn_out.c b/source4/dsdb/samdb/ldb_modules/extended_dn_out.c index bdb35be4690..31835a73d29 100644 --- a/source4/dsdb/samdb/ldb_modules/extended_dn_out.c +++ b/source4/dsdb/samdb/ldb_modules/extended_dn_out.c @@ -472,6 +472,20 @@ static int extended_callback(struct ldb_request *req, struct ldb_reply *ares, } } + if (!checked_reveal_control) { + have_reveal_control = + ldb_request_get_control(req, LDB_CONTROL_REVEAL_INTERNALS) != NULL; + checked_reveal_control = true; + } + + /* + * Shortcut for repl_meta_data. We asked for the data + * 'as-is', so stop processing here! + */ + if (have_reveal_control && p->normalise == false && ac->inject == true) { + return ldb_module_send_entry(ac->req, msg, ares->controls); + } + /* Walk the returned elements (but only if we have a schema to * interpret the list with) */ for (i = 0; ac->schema && i < msg->num_elements; i++) { @@ -518,12 +532,6 @@ static int extended_callback(struct ldb_request *req, struct ldb_reply *ares, struct ldb_val *plain_dn = &msg->elements[i].values[j]; bool is_deleted_objects = false; - if (!checked_reveal_control) { - have_reveal_control = - ldb_request_get_control(req, LDB_CONTROL_REVEAL_INTERNALS) != NULL; - checked_reveal_control = true; - } - /* this is a fast method for detecting deleted linked attributes, working on the unparsed ldb_val */ -- 2.47.2