Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

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 :

  1. The  The initial entry does not contain any of the RDN AVA
  2. 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

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

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