Summary: Index maintenance mechanism causes wrong search results when
modifying attributes with subtypes
When adding a value to an attribute with subtype indexed on equality and then
deleting this attribute subtype the index is not maintained correctly which
results in wrong search results afterwards. After stopping the server and
reindexing with db2index everything works correctly again. The unindexed and
substring searches do not seem to be concerned.
When checking the same value exists in the entry, instead of using the
type to be modified, pass the basetype. It covers the both cases removing
the attribute with subtype as well as with no subtype (basetype).
Created an attachment (id=356696)
git patch file (index.c)
Thanks to Nathan for his idea to fix this problem. I verified your suggestion
worked on the case that Andrey reported.
*Bug 513916* <https://bugzilla.redhat.com/show_bug.cgi?id=513916> -Server doesn't ignore paged control, if page size and server's estimate of total no of entries are same
Description of problem: simple paged control which is equal to page size
returned is not returning to the shell prompt. Paged control prompt even though
there are no entries to be returned.
How reproducible: Consistently
Steps to Reproduce:
1. Add few entries to Directory server.
2. Write a simple paged search with page control which is equal to the no of
entries returned by server.
3. Observe the prompt.
For Eg: no of entries returned for the search is 6. Write a paged request as
./ldapsearch.pl -x -pg 6 "cn=test*" "cn sn" -S "sn"
Actual results: Server doesn't ignore the paged control even the request can be
satisfied in a single page.
Expected results: Server should ignore the paged control if the page size is
equal to paged control.
The code processing search results were returning the PAGE END without knowing
there are more entries to return or not. To learn it, introduced "read ahead"
one entry when it comes to the PAGE END. If there are more entries, the code
undo the read ahead, which prompts for the next page on the client side.
If there is no more entries, it returns the status SEARCH END instead of PAGE
In addition to the read ahead implementation to fix the bug 513916,
* supporting Simple Paged Results for chaining backend is added.
* fixed a bug in idl_new_fetch (idl_new.c) -- idlistscanlimit was not checked
when the cursor comes to the end of an index file.
Created an attachment (id=356215)
git patch file