The following is a synchronization migration example from a Sun Directory Server Enterprise Edition (DSEE) topology to the PingDirectory server topology, including a change in the DIT structure to a flattened directory structure. The Sync Pipe connects the Sun Directory Server topology as the Sync Source and the PingDirectory server topology as the Sync Destination. Each endpoint is defined with three external servers in their respective topology. The Sync Pipe destination has its base DN set to o=example, which is used when performing LDAP searches for entries.

Two Sync Classes are defined: one for Subscribers, and one for Accounts. Each Sync Class uses a single "Sun DS to PingData Attribute Map" that has four attribute mappings defined. Each Sync Class also defines its own DN maps. For example, the Accounts Sync Class uses a DN map, called PingData Account Map, that is used to flatten a hierarchical DIT, so that the Account entries appear directly under ou=accountsas follows:

*,**,o=example ->{1},ou=accounts,o=example

With this mapping, if an entry DN has uid=jsmith,ou=people,o=example, then "*" matches uid=jsmith, "**" matches ou=people, and {1} matches uid=jsmith. Therefore, uid=jsmith,ou=people,o=examplegets mapped to uid=jsmith,ou=accounts,o=example. A similar map is configured for the Subscribers Sync Class.

Canvas 1 Layer 1 Subscribers Sync Class filter: {objectclass=subscc} synchronize: [creates, modifies, deletes] correlation attrs: (accountID AND userID) Subscribers DN Map *,**,o=example -> {1},ou=users,o=example Sync Destination base dn: o=example External Server: PingDS2 External Server: PingDS1 host: pingDS.example.com port: 389 dn: cn=Sync User password: ****** Accounts DN Map *,**,o=example -> {1},ou=subs,o=example Attributes Map accountID <- accountIdentifier ‘map src ids to dest ids userID <- userIdentifier cn <- “{givenname} {sn}” initials <- “{given name:/^(.).*/$1/}{sn:/^(.).*/$1/}” (remaining attributes are synced without transformation) Sync Source polling interval: 500ms External Server: DSEE3 External Server: DSEE2 External Server: DSEE1 host: dsee1.example.com port: 389 dn: cn=sync, o=example password: ****** Accounts Sync Class filter: {objectclass=accountoc} synchronize: [creates, modifies, deletes] correlation attrs: (accountID)