[Fedora-directory-devel] Please review: Bug 471068 - winsync doesn't recognize some changes
by Rich Megginson
https://bugzilla.redhat.com/show_bug.cgi?id=471068
Resolves: bug 471068
Bug Description: winsync doesn't recognize some changes
Reviewed by: ???
Files: see diff
Branch: HEAD
Fix Description: Before sending updates to AD, first check to see if the
updates still apply. For modify/add operations, check to make sure the
value to add doesn't exist. If it does, remove it from the list of
values in the mod. If all values are removed, then just skip the
modify/add op altogether. For modify/del ops, check to see if the
attribute exists. If not, just skip the op. If it does exist, check to
see if the values exist, and remove the values from the mod/del op that
do not exist anymore. If all values have been removed, just skip the
mod/del op.
I added a new slapi function - slapi_mod_init_valueset_byval - which
will init a Slapi_Mod and init the list of values using a valueset.
Fortunately there was already a function for converting a Slapi_Value**
to a berval**.
I also fixed a few compiler warnings.
Platforms tested: RHEL5
Flag Day: no
Doc impact: yes - add new function to slapi docs
https://bugzilla.redhat.com/attachment.cgi?id=328589&action=diff
15 years, 2 months
[Fedora-directory-devel] Please review: [Bug 464854] ldapsearch with size limit (-z) doesn't work with OR filter and range search
by Noriko Hosoi
[Bug 464854] ldapsearch with size limit (-z) doesn't work with OR filter
and range search
https://bugzilla.redhat.com/show_bug.cgi?id=464854
[Description of Problem]
If sizelimit is specified (e.g., -z 5) in ldapsearch, the filter including a range search does not return expected entries even if entries matches the filter.
How to reproduce the problem:
Create a test ldif file with dbgen.pl
$ dbgen.pl -o /path/to/example10k.ldif -n 10000
Import it
$ ldif2db -n userRoot -i /path/to/example10k.ldif
Start the server
$ start-slapd
Run the following command
$ ldapsearch -D 'cn=Directory Manager' -w <pw> -b "dc=example,dc=com"
"(&(l=Boston)(|(ou=Payroll)(ou=Accounting))(roomNumber>=9700))" dn roomNumber l ou
It returns 7 entries.
$ ldapsearch -D 'cn=Directory Manager' -w <pw> -b "dc=example,dc=com" -z 5
"(&(l=Boston)(|(ou=Payroll)(ou=Accounting))(roomNumber>=9700))" dn roomNumber l ou
It returns no entries. This entry count could be random from 0 to 5.
Expected result: returns 5 entries
Problem description:
SIZELIMIT is checked in index_range_read to eliminate the unnecessary data
retrieval. But when the filter contains a range search which is connected by
AND, then we should not do sizelimit. There was a bug in the function which
sets is_and. The flag should have been cleared only when the function set it
to 1. Instead, it was cleared each time the function is called. It let
index_range_read stop reading when it reaches sizelimit even though it should
not have.
[Proposed Fix]
Created an attachment (id=328581)
--> (https://bugzilla.redhat.com/attachment.cgi?id=328581)
cvs diff ldapserver/ldap/servers/slapd/back-ldbm/filterindex.c
Fix Description: list_candidates sets SLAPI_SEARCH_IS_AND to 1 in pblock when
the filter starts with AND. This function is recursively called and the IS_AND
info should be passed to the descendent candidates functions. The IS_AND flag
is cleared only by the function which sets it to 1.
15 years, 2 months