...
Depending on the modified values, each basic operation may have some different semantic. The following table present all the possible actions :
modification | initial entry | imported Ldif | resulting entry | Comments | Reverse LDIF |
add | dn: cn=test, ou=system | dn: cn=test, ou=system | dn: cn=test, ou=system | In this case, the ou value is simply added | dn: cn=test, ou=system |
add | dn: cn=test, ou=system | dn: cn=test, ou=system | dn: cn=test, ou=system | The ou attribute and its value has been created | dn: cn=test, ou=system |
add | dn: cn=test, ou=system | dn: cn=test, ou=system | dn: cn=test, ou=system | Nothing is done. | no reverse, void operation |
delete | dn: cn=test, ou=system | dn: cn=test, ou=system | dn: cn=test, ou=system | The ou=acme corp value has been deleted | dn: cn=test, ou=system |
delete | dn: cn=test, ou=system | dn: cn=test, ou=system | dn: cn=test, ou=system | The ou attribute has been removed | dn: cn=test, ou=system |
delete | dn: cn=test, ou=system | dn: cn=test, ou=system | dn: cn=test, ou=system | As all the ou values have been removed, | dn: cn=test, ou=system |
replace | dn: cn=test, ou=system | dn: cn=test, ou=system | dn: cn=test, ou=system | The ou attributes' values are replaced | dn: cn=test, ou=system |
replace | dn: cn=test, ou=system | dn: cn=test, ou=system | dn: cn=test, ou=system | Create the ou attribute | dn: cn=test, ou=system |
replace | dn: cn=test, ou=system | dn: cn=test, ou=system | dn: cn=test, ou=system | Delete the ou attribute | dn: cn=test, ou=system |
...
- The initial RDN is simple, the target RDN is simple, we don't delete the oldRDN : We just have to remove the newly added AVA if it's not present into the original entry
- The initial RDN is simple, the target RDN is simple, we delete the oldRDN : We have to add the old AVA and to remove the newly added AVA if it's not present into the original entry
- The initial RDN is composite, the target is simple, they don't overlap, we don't delete the oldRDN : We just have to remove the newly added AVA if it's not present into the original entry
- The initial RDN is composite, the target is simple, they don't overlap, we delete the oldRDN : We have to add the original AVAs, and to remove the newly added AVAs if it's not present into the original entry
- The initial RDN is composite, the target is simple, they overlap, we don't delete the oldRDN : Nothing special to do
- The initial RDN is composite, the target is simple, they overlap, we delete the oldRDN : We have to add the removed AVAs except the one which is in the new RDN
- The initial RDN is simple, the target RDN is composite, they don't overlap, we don't delete the oldRDN : We have to remove all the new AVAs
- The initial RDN is simple, the target RDN is composite, they don't overlap, we delete the oldRDN : We have to remove all the new AVAs and to add the old AVA
- The initial RDN is simple, the target RDN is composite, they overlap, we don't delete the oldRDN : We have to remove all the new AVAs except the one whgich is in the old RDN
- The initial RDN is simple, the target RDN is composite, they overlap, we delete the oldRDN : We have to remove all the new AVAs except the one which is in the old RDN
- The initial RDN is composite, the target RDN is composite, they don't overlap, we don't delete the oldRDN : We have to remove all the new AVAs which are not present in the original entry
- The initial RDN is composite, the target RDN is composite, they don't overlap, we delete the oldRDN : We have to remove all the new AVAs which are not present in the original entry and add all the removed AVAs from the original entry
- The initial RDN is composite, the target RDN is composite, they overlap, we don't delete the oldRDN : We have to remove all the new AVAs which are not present in the original entry.
- The initial RDN is composite, the target RDN is composite, they overlap, we delete the oldRDN : We have to remove all the new AVAs which are not present in the original entry and add all the removed AVAs from the original entry
Case 11 and 13 are equivalent, so are case 12 and 14. They need two operations to be applied.
The following table gives an example for each of those cases applied on the two original initial entries :
No Format |
---|
dn: cn=test, ou=system
objectclass: top
objectclass: person
cn: test
sn: This is a test dn: cn=small+cn=test, ou=system
objectclass: top
objectclass: person
cn: testcn: small
sn: This is a test
|
We also have sub cases, depending in the presence (or not) of the new RDN AVAs into the initial entry. Rge following table expose all the different cases (28), assuming that the two subcases are :
- The initial entry does not contain any of the RDN AVA
- The initial entry contains at least one of the RDN AVA which is not part of the original RDN
case | orginal entry | target RDN | deleteoldrdn | forward ldif | resulting entry | reverse ldif | |||
1.1 | dn: cn=test,ou=system | cn=joe | no | dn: cn=test, ou=system | dn: cn=joe, ou=system | dn: cn=joe, ou=system | |||
1.2 | dn: cn=test,ou=system | cn=small | no | dn: cn=test, ou=system | dn: cn=small, ou=system | dn: cn=small, ou=system | |||
2.1 | dn: cn=test,ou=system | cn=joe | yes | dn: cn=test, ou=system | dn: cn=joe, ou=system | dn: cn=joe, ou=system | |||
2.2 | dn: cn=test,ou=system | cn=joe | yes | dn: cn=test, ou=system | dn: cn=joe, ou=system | dn: cn=joe, ou=system | |||
3 | cn=small+cn=test | cn=joe | no | dn: cn=small+cn=test, ou=system | dn: cn=joe, ou=system | dn: cn=joe, ou=system | |||
|
|
|
|
|
|
| |||
4 | cn=small+cn=test | cn=joe | yes | dn: cn=small+cn=test, ou=system | dn: cn=joe, ou=system | dn: cn=joe, ou=system | |||
|
|
|
|
|
|
| |||
5 | cn=small+cn=test | cn=test | no | dn: cn=small+cn=test, ou=system | dn: cn=test, ou=system | dn: cn=test, ou=system | |||
|
|
|
|
|
|
| |||
6 | cn=small+cn=test | cn=test | yes | dn: cn=small+cn=test, ou=system | dn: cn=test, ou=system | dn: cn=test, ou=system | |||
|
|
|
|
|
|
| |||
7 | cn=test | cn=joe+cn=plumber | no | dn: cn=test, ou=system | dn: cn=joe+cn=plumber, ou=system | dn: cn=joe+cn=plumber, ou=system | |||
|
|
|
|
|
|
| |||
8 | |||||||||
case | orginal RDN | target RDN | deleteoldrdn | forward ldif | resulting entry | reverse ldif | |||
1 | cn=test | cn=joe+cn=plumber | no yes | dn: cn=test, ou=system | dn: cn=joe+cn=plumber, ou=system | dn: cn=joe+cn=plumber, ou=system | |||
|
|
|
|
|
|
| |||
9 2 | cn=test | cn=joe | no yes | dn: cn=test, ou=system | dn: cn=small+cn=joetest, ou=system | dn: cn=joesmall+cn=test, ou=system | |||
|
|
|
|
|
|
| |||
10 | cn=test 3 | cn=small+cn=test cn=joe | yes | no | dn: cn=small+ cn=test, ou=system | dn: cn=joe, ou=system | test |
|
|
|
|
|
|
|
|
| |||
11 4 | cn=small+cn=test | cn=joe+cn=plumber | yes no | dn: cn=small+cn=test, ou=system | dn: cn=joe, ou=system | +cn=plumber |
|
| |
|
|
|
|
|
|
| |||
12 | cn=small+cn=test | cn=joe+cn=plumber | yes | dn: cn=small+cn=test dn: cn=joe, ou=system |
|
| |||
|
|
|
|
|
|
| |||
13 5 | cn=small+cn=test | cn=big+cn=test | no | dn: cn=small+cn=test, ou=system | dn: cn=test, ou=system | dn: cn=test, ou=system |
|
| |
|
|
|
|
|
|
| |||
14 6 | cn=small+cn=test | cn=big+cn=test | yes | dn: cn=small+cn=test, ou=system |
|
| |||
|
|
|
|
|
|
|
Computing the reverse LDIF for a ModifyDN request follows the algorithm :
...