Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3

...

Generally speaking, the revert operation may be a simple one or a combinaison of a moddn and a add/delete operation, depending on the case.

There are 14 13 cases :

  1. 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
  2. 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
  3. 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
  4. 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
  5. The initial RDN is composite, the target is simple, they overlap, we don't delete the oldRDN : Nothing special to doThe 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
  6. 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
  7. 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
  8. 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
  9. 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
  10. 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
  11. 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
  12. 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.
  13. 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.

...

  1. The initial entry does not contain any of the RDN AVA
  2. The initial entry contains at least one of the RDN AVA which is not part of the original RDN

One special and important point : we can't use the deleteOldDN for composite operation, as this may lead to the deletion of a mandatory attribute, hence generating an error when applying the revert operation.

case

orginal entry

target RDN

deleteoldrdn

forward ldif

resulting entry

reverse ldif

1.1

dn: cn=test,ou

case

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

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

3 .1

dn: cn=small+cn=test,ou=system
objectclass: top
objectclass: person
cn: test
cn: small
sn: This is a test

cn=joe

N/A 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

[cn: small]
cn: joe

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

dn: cn=big, ou=system
objectclass: top
objectclass: person
cn: big
sn: This is a test

dn: cn=bigjoe, ou=system
changetype: moddn
deleteoldrdn: 0 1
newrdn: cn=small+cn=test

5 4

dn: cn=small+cn=test,ou=system
objectclass: top
objectclass: person
cn: test
cn: small
cn: big
sn: This is a test

cn=test big

no N/A

dn: cn=small+cn=test, ou=system
changetype: moddn
newrdn: cn=test big
deleteoldrdn: 0

dn: cn=testbig, ou=system
objectclass: top
objectclass: person
[cn: test]
[cn: small]
cn: big
sn: This is a test

dn: cn=testbig, ou=system
changetype: moddn
deleteoldrdn: 0
newrdn: cn=small+cn=test

6 5

cn=small+cn=test
objectclass: top
objectclass: person
cn: test
cn: small
sn: This is a test

cn=test

yes N/A

dn: cn=small+cn=test, ou=system
changetype: moddn
newrdn: cn=test
deleteoldrdn: 1 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

7 6.1

cn=test
objectclass: top
objectclass: person
cn: test
cn: small
sn: This is a 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 6.2

cn=test
objectclass: top
objectclass: person
cn: test
cn: small
sn: This is a 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 0
newrdn: cn=test

and

dn: cn=test,ou=system
changetype: modify
add delete: cn
cn: small joe
-

8 7.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: 1
newrdn: cn=test

8 7.2

cn=test
objectclass: top
objectclass: person
cn: test
cn: small
sn: This is a test

cn=joe+cn=small

yes

dn: cn=test, ou=system
changetype: moddn
newrdn: cn=joe+cn=small
deleteoldrdn: 1

dn: cn=joe+cn=small, ou=system
objectclass: top
objectclass: person
cn: small
cn: joe
cn: plumber
sn: This is a test

dn: cn=joe+cn=small, ou=system
changetype: moddn
deleteoldrdn: 1 0
newrdn: cn=test

and

dn: cn=test,ou=system
changetype: modify
add delete: cn
cn: small joe
-

9 8.1

cn=test
objectclass: top
objectclass: person
cn: test
cn: big
sn: This is a test

cn=small+cn=test

no

dn: cn=test, ou=system
changetype: moddn
newrdn: cn=small+cn=test
deleteoldrdn: 0

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

9 8.2

cn=test
objectclass: top
objectclass: person
cn: test
cn: big
sn: This is a test

cn=big+cn=test+
cn=small

no

dn: cn=test, ou=system
changetype: moddn
newrdn: cn=big+cn=test+
cn=small
deleteoldrdn: 0

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 0
newrdn: test

and

dn: cn=test, ou=system
changetype: modify
cn: add delete
cn: big small
-

10 9.1

cn=test
objectclass: top
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 9.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 0
newrdn: test

and

dn: cn=test, ou=system
changetype: modify
cn: add delete
cn: big small
-

11 10.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 10.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: 1newrdn0
newrdn: cn=small+cn=test

and

dn: cn=small+cn=test, ou=system
changetype: modify
cn: adddelete
cn: bigsmall
-

12 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

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 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

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: 10
newrdn: cn=small+cn=test

and

dn: cn=small+cn=test, ou=system
changetype: modify
cn: adddelete
cn: bigjoe
-

13 12.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 12.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 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

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 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

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
-

The following picture represent all the different cases as a decision tree :