mirror of
https://github.com/samba-team/samba.git
synced 2025-01-11 05:18:09 +03:00
ldb: One-level search was incorrectly falling back to full DB scan
When no search filter is specified, the code falls back to using '(|(objectClass=*)(distinguishedName=*)'. ltdb_index_dn() then failed because matching against '*' is not indexed. The error return then caused the code to fallback to a full-scan of the DB, which could have a considerable performance hit. Instead, we want to continue on and do the ltdb_index_filter() over the indexed results that were returned. BUG: https://bugzilla.samba.org/show_bug.cgi?id=13448 Signed-off-by: Tim Beale <timbeale@catalyst.net.nz> Signed-off-by: Andrew Bartlett <abartlet@samba.org> Reviewed-by: Garming Sam <garming@catalyst.net.nz>
This commit is contained in:
parent
9e143ee9b9
commit
88ae60ed18
@ -1994,20 +1994,21 @@ int ltdb_search_indexed(struct ltdb_context *ac, uint32_t *match_count)
|
||||
}
|
||||
/*
|
||||
* Here we load the index for the tree.
|
||||
*
|
||||
* We only care if this is successful, if the
|
||||
* index can't trim the result list down then
|
||||
* the ONELEVEL index is still good enough.
|
||||
*/
|
||||
ret = ltdb_index_dn(ac->module, ltdb, ac->tree,
|
||||
idx_one_tree_list);
|
||||
if (ret != LDB_SUCCESS) {
|
||||
talloc_free(idx_one_tree_list);
|
||||
talloc_free(dn_list);
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (!list_intersect(ldb, ltdb,
|
||||
dn_list, idx_one_tree_list)) {
|
||||
talloc_free(idx_one_tree_list);
|
||||
talloc_free(dn_list);
|
||||
return LDB_ERR_OPERATIONS_ERROR;
|
||||
if (ret == LDB_SUCCESS) {
|
||||
if (!list_intersect(ldb, ltdb,
|
||||
dn_list,
|
||||
idx_one_tree_list)) {
|
||||
talloc_free(idx_one_tree_list);
|
||||
talloc_free(dn_list);
|
||||
return LDB_ERR_OPERATIONS_ERROR;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
Loading…
Reference in New Issue
Block a user