I am using OpenLDAP 2.4.11 with all overlays and all backends compiled.  My company is in the middle if rebuilding our LDAP environment and we would like to use OpenLDAP + Syncrepl + RWM to neatly move objects into their new places within the DIT.

Our old DIT looks like:

ou=people,dc=company,dc=com
  uid=abc_jsmith
  uid=abc_jdoe
  uid=xyz_hsmith
  uid=xyz_dsmith

Our new DIT looks like:

ou=users,o=abc,dc=company,dc=com
  uid=abc_jsmith
  uid=abc_jdoe
ou=users,o=xyz,dc=company,dc=com
  uid=xyz_hsmith
  uid=xyz_dsmith

There are about 3100 objects in the ou=people container and we have several hundred clients to the current ldap setup so we will not  be able to migrate all in one night.

We are setting the new DIT/servers up in paralell to the old and would like to use syncrepl on the new servers to pull in objects from the old DIT and use syncrepl to find their new place in the tree.  At the moment we are testing this setup in a lab enviornment so I am using another backend to represent the old DIT.

Here's what my config looks like:

... snip ...
database ldif
suffix ou=people,dc=company,dc=com
directory /var/lib/ldap/people
rootdn "cn=Manager,ou=people,dc=company,dc=com"
rootpw *******

overlay rwm
rwm-rewriteEngine on
rwm-rewriteContext default
rwm-rewriteRule "(uid=abc_.+),ou=people,dc=company,dc=com$" "$1,ou=users,o=abc,dc=company,dc=com"

database        bdb
suffix          "dc=company,dc=com"
rootdn          "cn=Manager,dc=company,dc=com"
rootpw                  ********

syncrepl rid=002
        provider=ldap://localhost/
        bindmethod=simple
        binddn="cn=Manager,dc=company,dc=com"
        credentials=********
        searchbase="ou=people,dc=company,dc=com"
        schemachecking=off
        type=refreshOnly
        starttls=yes
        tls_reqcert=allow
        retry="60 +"
... snip ...

The ldif backend works as expected, if I do:
ldapsearch -x uid=abc_\* -b ou=people,dc=company,dc=com

I get nicely translated DNs and if I save the output to a file and ldap add it to the new DIT I get users where they belong.

But, I am not getting synchronization.  I know I am missing something, probably more RWM rules.  Maybe instead of doing the rewrites on the 'old' backend I should be doing them on the 'new' backend as the data comes into syncrepl?

I am also thinking that the searchbase in the syncrepl clause is part of the problem, I am telling it to sync ou=people and its getting ou=users,o=abc back so it should probably ignore them correct?

Can anyone steer me in the right direction?