s4/replmd: delete checks flag before laborious search
authorDouglas Bagnall <douglas.bagnall@catalyst.net.nz>
Tue, 30 Apr 2019 22:35:46 +0000 (10:35 +1200)
committerAndrew Bartlett <abartlet@samba.org>
Wed, 1 May 2019 03:12:07 +0000 (03:12 +0000)
Most (perhaps all) attributes that are in the "must not remove" list also
have the PRESERVEONDELETE bit set, and checking bits is much cheaper
than a linear search involving strcasecmp. If we check the bit first
we save work.

Signed-off-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
source4/dsdb/samdb/ldb_modules/repl_meta_data.c

index 7440e9b50f18fd893f97f2f3a40b845b2b7434d2..1b080137a2ec46fc192d8b7b626a9a84ffd43c80 100644 (file)
@@ -4612,10 +4612,10 @@ static int replmd_delete_internals(struct ldb_module *module, struct ldb_request
                                dsdb_flags |= DSDB_REPLMD_VANISH_LINKS;
 
                        } else if (sa->linkID == 0) {
-                               if (ldb_attr_in_list(preserved_attrs, el->name)) {
+                               if (sa->searchFlags & SEARCH_FLAG_PRESERVEONDELETE) {
                                        continue;
                                }
-                               if (sa->searchFlags & SEARCH_FLAG_PRESERVEONDELETE) {
+                               if (ldb_attr_in_list(preserved_attrs, el->name)) {
                                        continue;
                                }
                        } else {