Description of problem:
RHDS fails when replacing multi-valued attributes. The problem only occurs when replication is enabled (the server executing the modification is configured as a single master and there is at least one replication agreement).
The modification requests are refused by the master server, which returns code 20 (error message is 'Type or value exists'). These requests are replacements of multi-valued attributes. The error only occurs when one of the new values matches one of the current values of the attribute, but has a different letter case. For exemple, you have a cn attribute which contains 'ROBERT', and you want to replace it by 'Robert' and 'Bob', but the server gives an error 20.
Version-Release number of selected component (if applicable): RHDS 8.2 / 9
How reproducible: Always
Steps to Reproduce: 1. Enable replication. 2. Create an multi-valued attribute with one or more values 3. Try to replace the attribute with a different set of values (including one value that's similar to an existing value)
Actual results: Directory server returns err=20
Expected results: ldapmodification success, no errors.
Additional info:
Commands / logs:
uid=iuser4, exist on Directory server and it's cn is set to 'foo'
dn: uid=iuser4,ou=People,dc=gsslab,dc=pnq,dc=redhat,dc=com" cn: foo
Try to re-place the cn (foo) with new values "cn: FOO" and "cn: Idm User".
// ============ Replication Enabled ============:
$ ldapmodify -D cn=Directory\ manager -w go4linux -h 10.65.209.198 dn: uid=iuser4,ou=People,dc=gsslab,dc=pnq,dc=redhat,dc=com changetype: modify replace:cn cn: FOO cn: Idm User modifying entry "uid=iuser4,ou=People,dc=gsslab,dc=pnq,dc=redhat,dc=com" ldap_modify: Type or value exists (20)
//logs conn=12 fd=68 slot=68 connection from 10.65.222.102 to 10.65.209.198 conn=12 op=0 BIND dn="cn=Directory manager" method=128 version=3 conn=12 op=0 RESULT err=0 tag=97 nentries=0 etime=0 dn="cn=directory manager" conn=12 op=1 MOD dn="uid=iuser4,ou=People,dc=gsslab,dc=pnq,dc=redhat,dc=com" conn=12 op=1 RESULT err=20 tag=103 nentries=0 etime=0 csn=50d98df700000ca00000 conn=12 op=2 UNBIND conn=12 op=2 fd=68 closed - U1
// ============No replication ============:
$ ldapmodify -D cn=Directory\ manager -w go4linux -h 10.65.209.198 changetype: modify replace:cn cn: FOO cn: Idm User modifying entry "uid=iuser4,ou=People,dc=gsslab,dc=pnq,dc=redhat,dc=com"
//logs conn=16 op=0 RESULT err=0 tag=97 nentries=0 etime=0 dn="cn=directory manager" conn=16 op=1 MOD dn="uid=iuser4,ou=People,dc=gsslab,dc=pnq,dc=redhat,dc=com"
attachment 0001-Ticket-570-DS-returns-error-20-when-replacing-values.patch
Pushed to 389-ds-base-1.2.11: commit 5c01932
pushed to 1.3.0:
commit 8e0a35c
Metadata Update from @mreynolds: - Issue assigned to mreynolds - Issue set to the milestone: 1.2.11.19
389-ds-base is moving from Pagure to Github. This means that new issues and pull requests will be accepted only in 389-ds-base's github repository.
This issue has been cloned to Github and is available here: - https://github.com/389ds/389-ds-base/issues/570
If you want to receive further updates on the issue, please navigate to the github issue and click on subscribe button.
subscribe
Thank you for understanding. We apologize for all inconvenience.
Metadata Update from @spichugi: - Issue close_status updated to: wontfix (was: Fixed)
Login to comment on this ticket.