...
No Format |
---|
dn: cn=test, dc=example, dc=com
objectclass: top
objectclass: person
cn: test
sn: This is a testcreatorsName: dc=admin, ou=systemcreateTimestamp: 20071010150132ZmodifiersName: dc=admin, ou=systemmodifyTimestamp: 20071010150133Z
|
if if we have a delRequest which ldif is :
No Format |
---|
dn: cn=test, dc=example, dc=com
changetype: delete
|
the the reversed ldif should be :
No Format |
---|
dn: cn=test, dc=example, dc=comchangetype: add
objectclass: top
objectclass: person
cn: test
sn: This is a test
|
...
modification | initial entry | imported Ldif | resulting entry | Comments | Reverse LDIF |
add | dn: cn=test, ou=system objectclass: top objectclass: person cn: test sn: joe doe l: USA ou: apache ou: acme corp | dn: cn=test, ou=system changetype: modify add: ou ou: BigCompany inc. - | dn: cn=test, ou=system objectclass: top objectclass: person cn: test sn: joe doe l: USA ou: apache ou: acme corp ou: BigCompany inc. | In this case, the ou value is simply added | dn: cn=test, ou=system changetype: modify delete: ou ou: BigCompany inc. - |
add | dn: cn=test, ou=system objectclass: top objectclass: person cn: test sn: joe doe l: USA | dn: cn=test, ou=system changetype: modify add: ou ou: BigCompany inc. - | dn: cn=test, ou=system objectclass: top objectclass: person cn: test sn: joe doe l: USA ou: BigCompany inc. | The ou attribute and its value has been created | dn: cn=test, ou=system changetype: modify delete: ou ou: BigCompany inc. - |
add | dn: cn=test, ou=system objectclass: top objectclass: person cn: test sn: joe doe l: USA | dn: cn=test, ou=system changetype: modify add: cn cn: test - | dn: cn=test, ou=system objectclass: top objectclass: person cn: test sn: joe doe l: USA | Nothing is done. | no reverse, void operation |
delete | dn: cn=test, ou=system objectclass: top objectclass: person cn: test sn: joe doe l: USA ou: apache ou: acme corp | dn: cn=test, ou=system changetype: modify delete: ou ou: acme corp - | dn: cn=test, ou=system objectclass: top objectclass: person cn: test sn: joe doe l: USA ou: apache | The ou=acme corp value has been deleted | dn: cn=test, ou=system changetype: modify add: ou ou: acme corp - |
delete | dn: cn=test, ou=system objectclass: top objectclass: person cn: test sn: joe doe l: USA ou: apache ou: acme corp | dn: cn=test, ou=system changetype: modify delete: ou - | dn: cn=test, ou=system objectclass: top objectclass: person cn: test sn: joe doe l: USA | The ou attribute has been removed | dn: cn=test, ou=system changetype: modify add: ou ou: apache ou: acme corp - |
delete | dn: cn=test, ou=system objectclass: top objectclass: person cn: test sn: joe doe l: USA ou: apache ou: acme corp | dn: cn=test, ou=system changetype: modify delete: ou ou: apache ou: acme corp - | dn: cn=test, ou=system objectclass: top objectclass: person cn: test sn: joe doe l: USA | As all the ou values have been removed, the attribute itself is deleted | dn: cn=test, ou=system changetype: modify add: ou ou: apache ou: acme corp - |
replace | dn: cn=test, ou=system objectclass: top objectclass: person cn: test sn: joe doe l: USA ou: apache ou: acme corp | dn: cn=test, ou=system changetype: modify replace: ou ou: directory ou: BigCompany inc. - | dn: cn=test, ou=system objectclass: top objectclass: person cn: test sn: joe doe l: USA ou: directory ou: BigCompany inc. | The ou attributes' values are replaced by the new values. | dn: cn=test, ou=system changetype: modify replace: ou ou: apache ou: acme corp - |
replace | dn: cn=test, ou=system objectclass: top objectclass: person cn: test sn: joe doe l: USA | dn: cn=test, ou=system changetype: modify replace: ou ou: apache ou: acme corp - | dn: cn=test, ou=system objectclass: top objectclass: person cn: test sn: joe doe l: USA ou: apache ou: acme corp | Create the ou attribute | dn: cn=test, ou=system changetype: modify replace: ou - |
replace | dn: cn=test, ou=system objectclass: top objectclass: person cn: test sn: joe doe l: USA ou: apache ou: acme corp | dn: cn=test, ou=system changetype: modify replace: ou - | dn: cn=test, ou=system objectclass: top objectclass: person cn: test sn: joe doe l: USA | Delete the ou attribute | dn: cn=test, ou=system changetype: modify replace: ou ou: apache ou: acme corp - |
ModifyDNRequest
This request is used to move entries or to rename entries or to move and rename entries. Its counterpart in a ldif file is a 'changetype: moddn' or a 'changetype: modrdn' operation (moddn or modrdn are synonymous).
We will separate the ModifyDN into 3 different cases :
- A simple move operation : we change the superior, the RDN remains the same
- A rename operation : the RDN is changed
- A move and rename operation : a combinaison of both previous operations
Move Move operation
This is the simplest one : we change the superior, without changing the entry's attributes nor the RDN
the the following entry :
No Format |
---|
cn=test, dc=example, dc=orgobjectClass: personobjectClass: topcn: 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 The initial entry does not contain any of the RDN AVA
- The The initial entry contains at least one of the RDN AVA which is not part of the original RDN
case entry | orginal entry | target RDN | deleteoldrdn | forward ldif | resulting entry | reverse ldif |
1.1 | dn: cn=test,ou=system objectclass: top objectclass: person cn: test sn: This is a test | cn=joe | no | dn: cn=test, ou=system changetype: moddn newrdn: cn=joe deleteoldrdn: 0 | dn: cn=joe, ou=system objectclass: top objectclass: person cn: test cn: joe sn: This is a test | dn: cn=joe, ou=system changetype: moddn newrdn: cn=test deleteoldrdn: 1 |
1.2 | dn: cn=test,ou=system objectclass: top objectclass: person cn: test cn:small sn: This is a test | cn=small | no | dn: cn=test, ou=system changetype: moddn newrdn: cn=small deleteoldrdn: 0 | dn: cn=small, ou=system objectclass: top objectclass: person cn: test cn: small sn: This is a test test | dn: cn=small, ou=system changetype: moddn newrdn: cn=test deleteoldrdn: 0 |
2.1 | dn: cn=test,ou=system objectclass: top objectclass: person cn: test sn: This is a test | cn=joe | yes | dn: cn=test, ou=system changetype: moddn newrdn: cn=joe deleteoldrdn: 1 | dn: cn=joe, ou=system objectclass: top objectclass: person cn: joe sn: This is a test | dn: cn=joe, ou=system changetype: moddn newrdn: cn=test deleteoldrdn: 1 |
2.2 | dn: cn=test,ou=system objectclass: top objectclass: person cn: test cn:small sn: This is a test | cn=small | yes | dn: cn=test, ou=system changetype: moddn newrdn: cn=small deleteoldrdn: 1 | dn: cn=small, ou=system objectclass: top objectclass: person cn: joe cn: small sn: This is a test | dn: cn=joe, ou=system changetype: moddn newrdn: cn=test deleteoldrdn: 0 0 |
3.1 | dn: cn=small+cn=test,ou=system objectclass: top objectclass: person cn: test cn: small sn: This is a test | cn=joe | no | dn: cn=small+cn=test, ou=system changetype: moddn newrdn: cn=joe deleteoldrdn: 0 | dn: cn=joe, ou=system objectclass: top objectclass: person cn: test cn: small cn: joe sn: This is a test | dn: cn=joe, ou=system changetype: moddn deleteoldrdn: 1 newrdn: cn=small+cn=test |
3.2 | dn: cn=small+cn=test,ou=system objectclass: top objectclass: person cn: test cn: small cn: big sn: This is a test | cn=big | no | dn: cn=small+cn=test, ou=system changetype: moddn newrdn: cn=big deleteoldrdn: 0 | dn: cn=big, ou=system objectclass: top objectclass: person cn: test cn: small cn: big sn: This is a test | dn: cn=big, ou=system changetype: moddn deleteoldrdn: 0 newrdn: cn=small+cn=test |
4.1 | dn: cn=small+cn=test,ou=system objectclass: top objectclass: person cn: test cn: small sn: This is a test | cn=joe | yes | dn: cn=small+cn=test, ou=system changetype: moddn newrdn: cn=joe deleteoldrdn: 1 | dn: cn=joe, ou=system objectclass: top objectclass: person cn: joe sn: This is a test | dn: cn=joe, ou=system changetype: moddn deleteoldrdn: 1 newrdn: cn=small+cn=test |
4.2 | dn: cn=small+cn=test,ou=system objectclass: top objectclass: person cn: test cn: big cn: small sn: This is a test | cn=big | yes | dn: cn=small+cn=test, ou=system changetype: moddn newrdn: cn=big deleteoldrdn: 1 1 | dn: cn=big, ou=system objectclass: top objectclass: person cn: big sn: This is a test | dn: cn=big, ou=system changetype: moddn deleteoldrdn: 0 newrdn: cn=small+cn=test |
5 | cn=small+cn=test objectclass: top objectclass: person cn: test cn: small sn: This is a test test | cn=test | no | dn: cn=small+cn=test, ou=system changetype: moddn newrdn: cn=test deleteoldrdn: 0 | dn: cn=test, ou=system objectclass: top objectclass: person cn: test cn: small sn: This is a test | dn: cn=test, ou=system changetype: moddn deleteoldrdn: 0 newrdn: cn=small+cn=test |
6 | cn=small+cn=test objectclass: top objectclass: person cn: test cn: small sn: This is a test test | cn=test | yes | dn: cn=small+cn=test, ou=system changetype: moddn newrdn: cn=test deleteoldrdn: 1 | dn: cn=test, ou=system objectclass: top objectclass: person cn: test sn: This is a test | dn: cn=test, ou=system changetype: moddn deleteoldrdn: 0 newrdn: cn=small+cn=test |
7.1 | cn=test objectclass: top objectclass: person cn: test cn: small sn: This is a test test | cn=joe+cn=plumber | no | dn: cn=test, ou=system changetype: moddn newrdn: cn=joe+cn=plumber deleteoldrdn: 0 | dn: cn=joe+cn=plumber, ou=system objectclass: top objectclass: person cn: test cn: small cn: joe cn: plumber sn: This is a test | dn: cn=joe+cn=plumber, ou=system changetype: moddn deleteoldrdn: 1 newrdn: cn=test |
7.2 | cn=test objectclass: top objectclass: person cn: test cn: small sn: This is a test test | cn=joe+cn=small | no | dn: cn=test, ou=system changetype: moddn newrdn: cn=joe+cn=small deleteoldrdn: 0 | dn: cn=joe+cn=small, ou=system objectclass: top objectclass: person cn: test cn: small cn: joe cn: plumber sn: This is a test | dn: cn=joe+cn=small, ou=system changetype: moddn deleteoldrdn: 1 newrdn: cn=test test |
and
dn: cn=test,ou=system
changetype: modify
add: cn
cn: small
- |
8.1 | cn=test objectclass: top objectclass: person cn: test cn: small sn: This is a test | cn=joe+cn=plumber | yes | dn: cn=test, ou=system changetype: moddn newrdn: cn=joe+cn=plumber deleteoldrdn: 1 | dn: cn=joe+cn=plumber, ou=system objectclass: top objectclass: person cn: joe cn: plumber sn: This is a test | dn: cn=joe+cn=plumber, ou=system changetype: moddn deleteoldrdn: 1newrdn1 newrdn: cn=test test |
| | | | | | |
8.2 | cn=test objectclass: top objectclass: person cn: test cn: small sn: This is a | 9 | cn= test | cn=smalljoe+cn=test small | no yes | dn: cn=test, ou=system changetype: moddn newrdn: cn=smalljoe+cn=test small deleteoldrdn: 0 1 | dn: cn=smalljoe+cn=testsmall, ou=system objectclass: top objectclass: person cn: small cn: joe cn: test plumber sn: This is a test | dn: cn=smalljoe+cn=testsmall, ou=system changetype: moddn deleteoldrdn: 1 newrdn: cn=test |
| | | | | | |
10 |
and
dn: cn=test,ou=system
changetype: modify
add: cn
cn: small
- |
9.1 | cn=test objectclass: top objectclass: person cn: test cn: big sn: This is a test | cn= cn=small+cn=test | yes no | dn: cn=test, ou=system changetype: moddn newrdn: cn=small+cn=test deleteoldrdn: 1 | | |
| | | | | | |
0 | 11 | dn: | cn=small+cn=test | cn=joe+cn=plumber | no , ou=system objectclass: top objectclass: person cn: small cn: test sn: This is a test | dn: cn=small+cn=test, ou=system changetype: moddn deleteoldrdn: 1 newrdn: test |
9.2 | cn=joe+cn=plumber deleteoldrdn: 0 | | |
| | | | | | |
test objectclass: top objectclass: person cn: test cn: big sn: This is a test | cn=big | 12 | cn=small+cn=test+ cn=joe+cn=plumber small | no yes | dn: cn=small+cn=test, ou=system changetype: moddn newrdn: cn=joebig+cn=plumber deleteoldrdn: 1 | | |
| | | | | | |
test+ cn=small deleteoldrdn: 0 | 13 | cn=small+cn=test | dn: | cn=big+cn=test | no | dn: +cn=small+cn=test, ou=system changetype objectclass: moddn top newrdn objectclass: person cn=: big + cn=: test deleteoldrdncn: 0 | | |
| | | | | | |
small sn: This is a test | dn: cn=big | 14 | cn=small+cn=test+cn=big+cn=test yes small, ou=system changetype: moddn deleteoldrdn: 1 newrdn: test |
and
dn: cn=
...
test, ou=system
changetype:
...
modify
...
cn: add
cn: big
- |
10.1 | =big+ cn=test deleteoldrdn objectclass: 1 top
| | |
| | | | | | |
Computing the reverse LDIF for a ModifyDN request follows the algorithm :
if the newRdn is different from the existing RDN
objectclass: person cn: test cn: big sn: This is a test | cn=small+cn=test | yes | dn: cn=test, ou=system changetype: moddn newrdn: cn=small+cn=test deleteoldrdn: 1 | dn: cn=small+cn=test, ou=system objectclass: top objectclass: person cn: small cn: test sn: This is a test | dn: cn=small+cn=test,ou=system changetype: moddn deleteoldrdn: 1 newrdn: test |
10.2 | cn=test objectclass: top objectclass: person cn: test cn: big sn: This is a test | cn=big+cn=test+ cn=small | yes | dn: cn=test, ou=system changetype: moddn newrdn: cn=big+cn=test+ cn=small deleteoldrdn: 1 | dn: cn=big+cn=test+cn=small, ou=system objectclass: top objectclass: person cn: big cn: test cn: small sn: This is a test | dn: cn=big+cn=test+cn=small, ou=system changetype: moddn deleteoldrdn: 1 newrdn: test |
and
dn: cn=test, ou=system
changetype: modify
cn: add
cn: big
- |
11.1 | cn=small+cn=test objectclass: top objectclass: person cn: test cn: big cn: small sn: This is a test | cn=joe+cn=plumber | no | dn: cn=small+cn=test, ou=system changetype: moddn newrdn: cn=joe+cn=plumber deleteoldrdn: 0 | dn: cn=joe+cn=plumber, ou=system objectclass: top objectclass: person cn: test cn: big cn: small cn: joe cn: plumber sn: This is a test | dn: cn=joe+cn=plumber, ou=system changetype: moddn deleteoldrdn: 1 newrdn: cn=small+cn=test |
11.2 | cn=small+cn=test objectclass: top objectclass: person cn: test cn: big cn: small sn: This is a test | cn=joe+cn=big | no | dn: cn=small+cn=test, ou=system changetype: moddn newrdn: cn=joe+cn=big deleteoldrdn: 0 | dn: cn=joe+cn=big, ou=system objectclass: top objectclass: person cn: test cn: big cn: small cn: joe sn: This is a test | dn: cn=joe+cn=big, ou=system changetype: moddn deleteoldrdn: 1newrdn: cn=small+cn=test |
and
dn: cn=small+cn=test, ou=system
changetype: modify
cn: add
cn: big
- |
12.1 | cn=small+cn=test objectclass: top objectclass: person cn: test cn: big cn: small sn: This is a test | cn=joe+cn=plumber | yes | dn: cn=small+cn=test, ou=system changetype: moddn newrdn: cn=joe+cn=plumber deleteoldrdn: 1 | dn: cn=joe+cn=plumber, ou=system objectclass: top objectclass: person cn: big cn: joe cn: plumber sn: This is a test | dn: cn=joe+cn=plumber, ou=system changetype: moddn deleteoldrdn: 1 newrdn: cn=small+cn=test |
12.2 | cn=small+cn=test objectclass: top objectclass: person cn: test cn: big cn: small sn: This is a test | cn=joe+cn=big | yes | dn: cn=small+cn=test, ou=system changetype: moddn newrdn: cn=joe+cn=big deleteoldrdn: 1 | dn: cn=joe+cn=big, ou=system objectclass: top objectclass: person cn: big cn: joe sn: This is a test | dn: cn=joe+cn=big, ou=system changetype: moddn deleteoldrdn: 1 newrdn: cn=small+cn=test |
and
dn: cn=small+cn=test, ou=system
changetype: modify
cn: add
cn: big
- |
13.1 | cn=small+cn=test objectclass: top objectclass: person cn: test cn: big cn: small sn: This is a test | cn=joe+cn=test | no | dn: cn=small+cn=test, ou=system changetype: moddn newrdn: cn=joe+cn=test deleteoldrdn: 0 | dn: cn=joe+cn=test, ou=system objectclass: top objectclass: person cn: test cn: small cn: joe sn: This is a test | dn: cn=joe+cn=test, ou=system changetype: moddn deleteoldrdn: 1 newrdn: cn=small+cn=test |
13.2 | cn=small+cn=test objectclass: top objectclass: person cn: test cn: big cn: small sn: This is a test | cn=big+cn=test | no | dn: cn=small+cn=test, ou=system changetype: moddn newrdn: cn=big+cn=test deleteoldrdn: 0 | dn: cn=big+cn=test, ou=system objectclass: top objectclass: person cn: test cn: small cn: big sn: This is a test | dn: cn=big+cn=test, ou=system changetype: moddn deleteoldrdn: 0 newrdn: cn=small+cn=test |
14.1 | cn=small+cn=test objectclass: top objectclass: person cn: test cn: big cn: small sn: This is a test | cn=joe+cn=test | yes | dn: cn=small+cn=test, ou=system changetype: moddn newrdn: cn=joe+cn=test deleteoldrdn: 1 | dn: cn=joe+cn=test, ou=system objectclass: top objectclass: person cn: test cn: big cn: joe sn: This is a test | dn: cn=joe+cn=test, ou=system changetype: moddn deleteoldrdn: 1 newrdn: cn=small+cn=test |
14.2 | cn=small+cn=test objectclass: top objectclass: person cn: test cn: big cn: small sn: This is a test | cn=big+cn=test | yes | dn: cn=small+cn=test, ou=system changetype: moddn newrdn: cn=big+cn=test deleteoldrdn: 1 | dn: cn=big+cn=test, ou=system objectclass: top objectclass: person cn: test cn: big sn: This is a test | dn: cn=big+cn=test, ou=system changetype: moddn deleteoldrdn: 0 newrdn: cn=small+cn=test |
and
dn: cn=small+cn=test, ou=system
changetype: modify
cn: add
cn: big
- | then reverseLdif.deleteOldRdn = true
else reverseLdif.deleteOldRdn = false
if modifyDn.newSuperior not empty
then reverseLdif.newSuperior = modifyDn.dn minus the modifyDN.dn.getRDN
reverseLdif.newRdn = modifyDn.dn.getRDN