diff options
author | Andrew Bartlett <abartlet@samba.org> | 2020-02-07 16:56:13 +1300 |
---|---|---|
committer | Karolin Seeger <kseeger@samba.org> | 2020-02-26 08:51:32 +0000 |
commit | b81fd260ebb76f135c6e68b052fdcf61e4142a2e (patch) | |
tree | ff8d7d36979e40c69f5946dc0c79ca569d40e33f | |
parent | 811d8057973bf8c6109dd158debbe9bbbbbc436c (diff) | |
download | samba-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.c | 21 |
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; } /* |