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 below. ./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. Additional info:
Created attachment 356215 [details] git patch file [Files] ldap/servers/plugins/chainingdb/cb.h ldap/servers/plugins/chainingdb/cb_init.c ldap/servers/plugins/chainingdb/cb_search.c ldap/servers/slapd/back-ldbm/idl_common.c ldap/servers/slapd/back-ldbm/idl_new.c ldap/servers/slapd/back-ldbm/init.c ldap/servers/slapd/back-ldbm/ldbm_search.c ldap/servers/slapd/back-ldbm/proto-back-ldbm.h ldap/servers/slapd/backend.c ldap/servers/slapd/backend_manager.c ldap/servers/slapd/dl.c ldap/servers/slapd/dse.c ldap/servers/slapd/opshared.c ldap/servers/slapd/pblock.c ldap/servers/slapd/proto-slap.h ldap/servers/slapd/slap.h ldap/servers/slapd/slapi-private.h [Fix Description] 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 END. 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.
(In reply to comment #1) > Created an attachment (id=356215) [details] > git patch file Sorry, a wrong patch... :(
Created attachment 356229 [details] git patch file (a correct one...)
Reviewed by Nathan (Thank you !!) Pushed to master. $ git merge paged Updating cbed8a2..0565e8c Fast forward ldap/servers/plugins/chainingdb/cb.h | 3 + ldap/servers/plugins/chainingdb/cb_init.c | 4 + ldap/servers/plugins/chainingdb/cb_search.c | 40 +++++++++++++ ldap/servers/slapd/back-ldbm/idl_common.c | 4 +- ldap/servers/slapd/back-ldbm/idl_new.c | 9 +-- ldap/servers/slapd/back-ldbm/init.c | 2 + ldap/servers/slapd/back-ldbm/ldbm_search.c | 16 +++++ ldap/servers/slapd/back-ldbm/proto-back-ldbm.h | 1 + ldap/servers/slapd/backend.c | 6 ++ ldap/servers/slapd/backend_manager.c | 1 + ldap/servers/slapd/dl.c | 13 ++++ ldap/servers/slapd/dse.c | 12 ++++ ldap/servers/slapd/opshared.c | 71 +++++++++++++---------- ldap/servers/slapd/pblock.c | 12 ++++ ldap/servers/slapd/proto-slap.h | 2 +- ldap/servers/slapd/slap.h | 3 + ldap/servers/slapd/slapi-private.h | 2 + 17 files changed, 163 insertions(+), 38 deletions(-) $ git push Counting objects: 49, done. Delta compression using 4 threads. Compressing objects: 100% (25/25), done. Writing objects: 100% (25/25), 4.21 KiB, done. Total 25 (delta 23), reused 0 (delta 0) To ssh://git.fedorahosted.org/git/389/ds.git cbed8a2..0565e8c master -> master
verified - RHEL 4 version: redhat-ds-base-8.2.0-2010051204.el4dsrv subtree searched contains 4 users # perl ./ldapsearch.pl -x -pg 2 "(uid=test*)" "dn sn" dn: uid=test1,ou=Special Users,dc=example,dc=com sn: test dn: uid=test2,ou=Special Users,dc=example,dc=com sn: test2 next page size (2): dn: uid=test3,ou=Special Users,dc=example,dc=com sn: test3 dn: uid=test4,ou=Special Users,dc=example,dc=com sn: test4 # perl ./ldapsearch.pl -x -pg 4 "(uid=test*)" "dn sn" dn: uid=test1,ou=Special Users,dc=example,dc=com sn: test dn: uid=test2,ou=Special Users,dc=example,dc=com sn: test2 dn: uid=test3,ou=Special Users,dc=example,dc=com sn: test3 dn: uid=test4,ou=Special Users,dc=example,dc=com sn: test4