summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Bartlett <abartlet@samba.org>2020-02-07 16:56:13 +1300
committerKarolin Seeger <kseeger@samba.org>2020-02-26 08:51:32 +0000
commitb81fd260ebb76f135c6e68b052fdcf61e4142a2e (patch)
treeff8d7d36979e40c69f5946dc0c79ca569d40e33f
parent811d8057973bf8c6109dd158debbe9bbbbbc436c (diff)
downloadsamba-b81fd260ebb76f135c6e68b052fdcf61e4142a2e.tar.gz
ldb: Fix search with scope ONE and small result sets
This changes the LDB behaviour in the combination of a SCOPE_ONE search and an index returning less than 10 results. After b6b5b5fe355fee2a4096e9214831cb88c7a2a4c6 the list->strict flag became set to false in all cases, rather than being left to the value set by the caller. This changes the ldb_kv_index_dn_one() code to force strict mode on success instead. Thanks to Marcus Granér, ICEYE Oy for reporting. BUG: https://bugzilla.samba.org/show_bug.cgi?id=14270 Signed-off-by: Andrew Bartlett <abartlet@samba.org> Reviewed-by: Stefan Metzmacher <metze@samba.org> (cherry picked from commit 3c7261c43da491b57f50e0e64d7050d85c6b973e)
-rw-r--r--lib/ldb/ldb_key_value/ldb_kv_index.c21
1 files changed, 12 insertions, 9 deletions
diff --git a/lib/ldb/ldb_key_value/ldb_kv_index.c b/lib/ldb/ldb_key_value/ldb_kv_index.c
index 0853b28fe40..8e756c1a8e5 100644
--- a/lib/ldb/ldb_key_value/ldb_kv_index.c
+++ b/lib/ldb/ldb_key_value/ldb_kv_index.c
@@ -2113,16 +2113,19 @@ static int ldb_kv_index_dn_one(struct ldb_module *module,
struct dn_list *list,
enum key_truncation *truncation)
{
- /*
- * Ensure we do not shortcut on intersection for this list.
- * We must never be lazy and return an entry not in this
- * list. This allows the index for
- * SCOPE_ONELEVEL to be trusted.
- */
-
- list->strict = true;
- return ldb_kv_index_dn_attr(
+ int ret = ldb_kv_index_dn_attr(
module, ldb_kv, LDB_KV_IDXONE, parent_dn, list, truncation);
+ if (ret == LDB_SUCCESS) {
+ /*
+ * Ensure we do not shortcut on intersection for this
+ * list. We must never be lazy and return an entry
+ * not in this list. This allows the index for
+ * SCOPE_ONELEVEL to be trusted.
+ */
+
+ list->strict = true;
+ }
+ return ret;
}
/*