#48294 Linked Attributes plug-in - won't update links after MODRDN operation
Closed: Fixed None Opened 4 years ago by nhosoi.

Description of problem:
If a MODRDN operation is made to an entry that has a managed type present, the
links pointing to the renamed entry will not be updated to use the new DN.

How reproducible:
Always

Steps to Reproduce:
1) Enable Linked Attributes plug-in;
ldapmodify -h localhost -p 389 -D "cn=Directory manager" -W
cn=Linked Attributes,cn=plugins,cn=config
changetype: modify
replace: nsslapd-pluginEnabled
nsslapd-pluginEnabled: on

2) Create the plug-in instance;
ldapmodify -h localhost -p 389 -D "cn=Directory manager" -W
dn: cn=Manager Link,cn=Linked Attributes,cn=plugins,cn=config
changetype: add
objectClass: top
objectClass: extensibleObject
cn: Manager Link
linkType: directReport
managedType: manager

3) Add two entries;
ldapmodify -h localhost -p 389 -D "cn=Directory manager" -W
dn: uid=employee1,ou=People,dc=example,dc=com
changetype: add
objectClass: extensibleobject
objectClass: inetorgperson
objectClass: organizationalPerson
objectClass: person
objectClass: top
cn: Employee 1
sn: Employee 1
uid: employee1

dn: uid=manager1,ou=People,dc=example,dc=com
changetype: add
objectClass: extensibleobject
objectClass: inetorgperson
objectClass: organizationalPerson
objectClass: person
objectClass: top
cn: manager 1
sn: manager 1
uid: manager1

4) Execute link operation;
ldapmodify -h localhost -p 389 -D "cn=Directory manager" -W
dn: uid=manager1,ou=People,dc=example,dc=com
changetype: modify
add: directreport
directreport: uid=employee1,ou=People,dc=example,dc=com

5) Execute MODRDN operation on the uid=employee1,ou=People,dc=example,dc=com.
ldapmodify -h localhost -p 389 -D "cn=Directory manager" -W
dn: uid=employee1,ou=People,dc=example,dc=com
changetype: modrdn
newrdn: uid=employee2
deleteoldrdn: 1

Actual results:
ldapsearch -h localhost -p 389 -D "cn=Directory manager" -W -b
ou=people,dc=example,dc=com

employee2, People, example.com

dn: uid=employee2,ou=People,dc=example,dc=com
objectClass: extensibleobject
objectClass: inetorgperson
objectClass: organizationalPerson
objectClass: person
objectClass: top
cn: Employee 3
sn: Employee 3
manager: uid=manager1,ou=people,dc=example,dc=com
uid: employee2

manager1, People, example.com

dn: uid=manager1,ou=People,dc=example,dc=com
objectClass: extensibleobject
objectClass: inetorgperson
objectClass: organizationalPerson
objectClass: person
objectClass: top
cn: manager 1
sn: manager 1
directreport: uid=employee1,ou=People,dc=example,dc=com
uid: manager1

Expected results:
ldapsearch -h localhost -p 389 -D "cn=Directory manager" -W -b
ou=people,dc=example,dc=com

employee2, People, example.com

dn: uid=employee2,ou=People,dc=example,dc=com
objectClass: extensibleobject
objectClass: inetorgperson
objectClass: organizationalPerson
objectClass: person
objectClass: top
cn: Employee 3
sn: Employee 3
manager: uid=manager1,ou=people,dc=example,dc=com
uid: employee2

manager1, People, example.com

dn: uid=manager1,ou=People,dc=example,dc=com
objectClass: extensibleobject
objectClass: inetorgperson
objectClass: organizationalPerson
objectClass: person
objectClass: top
cn: manager 1
sn: manager 1
directreport: uid=employee2,ou=People,dc=example,dc=com
uid: manager1

Additional info:
If we try to repair it with fixup-linkedattrs.pl or "cn=fixup linked attributes
task", then "manager" attribute will be deleted from the
uid=employee2,ou=People,dc=example,dc=com. And "directreport" will stay the
same in the uid=manager1,ou=People,dc=example,dc=com.

Also it will be impossible to delete "directreport" after that.
ldapmodify -h localhost -p 389 -D "cn=Directory manager" -W
dn: uid=manager1,ou=People,dc=example,dc=com
changetype: modify
delete: directreport

modifying entry "uid=manager1,ou=People,dc=example,dc=com"
ldap_modify: Server is unwilling to perform (53)
additional info: Linked Attrs Plugin: Failed to update link to target
entry (uid=employee1,ou=People,dc=example,dc=com) error 32


I don't agree with the expected result

dn: uid=manager1,ou=People,dc=example,dc=com
directreport: uid=employee2,ou=People,dc=example,dc=com

The linktype value has to be modified manually.

Rather, if uid=manager1 is renamed, the managed attribute (the value of 'manager' is supposed to be taken care by the linked attribute plug-in and it is as expected.)

But currently, there is a bug and updating linktype 'directReport' fails with LDAP_NO_SUCH_OBJECT and LDAP_TYPE_OR_VALUE_EXISTS, which is fixed in the patch to be attached.

Reviewed by Mark (Thank you!!)

Pushed to master:
c44a3e9..c3b4c0c master -> master
commit 26a749a
commit c3b4c0c

Metadata Update from @nhosoi:
- Issue assigned to nhosoi
- Issue set to the milestone: 1.3.5.0

2 years ago

Login to comment on this ticket.

Metadata