[Date Prev][Date Next] [Chronological] [Thread] [Top]

Re: modify dn while replication



Jehan,

the fact of using updatedn in the proxy is a hack,
to instruct the proxy about leaving operational
attributes in the modification structure;
what I suspect is that the test if the incoming
request is a replication is done AFTER the bound DN
has been rewrittien, so, assuming

"cn=replicator,ou=people,dc=int-evry,dc=fr" is a real

entry in your master, you should use

"cn=replicator-<uid>,ou=people,dc=int-evry,dc=fr"

as updatedn in the proxy.

If this is not the case, I'll dig further.

p.


> OK, i've move to the rewrite stuff ! unfortunatly I get new problems .
> Here I test with  adding a new entry (user maisel)
> $ ldapadd -f maisel.ldif -h localhost -D "cn=admin,dc=int-evry,dc=fr"
> -x  -W -p
> 389
> Enter LDAP Password:
> adding new entry "uid=maisel,ou=People,dc=int-evry,dc=fr"
>
> Logs on the proxy server
>
>  Feb 19 13:27:21 corbeau slapd[7260]: conn=0 op=0 BIND
> dn="cn=replicator,ou=people,dc=int-evry,dc=fr" mech=simple ssf=0
> Feb 19 13:27:21 corbeau slapd[7260]: conn=0 op=0 RESULT tag=97 err=0
> text= Feb 19 13:27:21 corbeau slapd[7260]: conn=0 op=1 ADD
> dn="uid=maisel,ou=People,dc=int-evry,dc=fr"
> Feb 19 13:27:22 corbeau slapd[7260]: conn=0 op=1 RESULT tag=105 err=80
> text=no structuralObjectClass operational attribute
>
> Logs on the slave:
> Feb 19 13:27:21 corbeau slapd[7278]: conn=0 op=0 BIND
> dn="cn=replicator,ou=people,dc=int-evry,dc=fr" mech=simple ssf=0
> Feb 19 13:27:21 corbeau slapd[7278]: conn=0 op=0 RESULT tag=97 err=0
> text= Feb 19 13:27:22 corbeau slapd[7278]: conn=0 op=1 ADD
> dn="uid=maisel-maisel,ou=People,dc=int-evry,dc=fr"
> Feb 19 13:27:22 corbeau slapd[7278]: No structuralObjectClass for entry
> (uid=maisel-maisel,ou=People,dc=int-evry,dc=fr)
> Feb 19 13:27:22 corbeau slapd[7278]: conn=0 op=1 RESULT tag=105 err=80
> text=no structuralObjectClass operational attribute
>
> However on the master it does have a structuralObjectClass opreational
> attribute; proof :
> $ ldapsearch -x uid=maisel -D"cn=admin,dc=int-evry,dc=fr"
> -b'ou=people,dc=int-evry,dc=fr' -W -h localhost -p 389 + | grep
> structuralObjectClass
> Enter LDAP Password:
> structuralObjectClass: inetOrgPerson
>
>  is this a pb of dn not beeing normalized ? uid=maisel-maisel is
> normalized ? should'nt it be also the same value in the dn and in the
> attribute uid itself in the entry:
> dn: uid=maisel-maisel,ou=People,dc=int-evry,dc=fr
> uid: maisel-maisel
> so there should be a rewrite rule for the uid atribute itself and not
> only for the dn ?
>
> Configurations; slave and proxy replicate only the subtree:
> ou=people,dc=int-evry,dc=fr, master suffix is dc=int-evry,dc=fr . I
> tested before rewrite stuff , replication worked fine.
>
> Master slapd.conf
> replica         host=127.0.0.1:8006
>                 suffix="ou=people,dc=int-evry,dc=fr"
>                 binddn="cn=replicator,ou=people,dc=int-evry,dc=fr"
> bindmethod=simple   credentials=secret
> replogfile      /var/lib/ldap/replica/replogfile
>
> Proxy slapd_proxy.conf
> database ldap
> suffix          "ou=people,dc=int-evry,dc=fr"
> uri             "ldap://127.0.0.1:9006";;
> updatedn  "cn=replicator,ou=people,dc=int-evry,dc=fr"
> lastmod on
> rewriteEngine on
> rewriteContext default
> binddn cn=admin,ou=people,dc=int-evry,dc=fr
> bindpw {crypt}secret
> rewriteMap      ldap uidMap
> "ldap:///ou=People,dc=int-evry,dc=fr?uid?one"; rewriteRule
> "^(uid=[^,]+)(,.*)$$" "%1-%{uidMap(%1)}%2" ":@I"
>
> Slave slapd_slave.conf
>
> database        bdb
> suffix          "ou=people,dc=int-evry,dc=fr"
> rootdn          "cn=admin,ou=people,dc=int-evry,dc=fr"
> rootpw          {crypt}secret
> directory       /var/lib/ldap/int_slave
> #lastmod off
> updatedn        "cn=replicator,ou=people,dc=int-evry,dc=fr"
> updateref       "ldap://127.0.0.1:389";
>
> Thanks.
>
>>>:-(
>>>
>>>here's the error message on the proxy server logs:
>>>Feb 16 16:27:23 corbeau slapd[15683]: conn=0 op=1 MOD
>>>dn="uid=test,ou=People,dc=int-evry,dc=fr"
>>>Feb 16 16:27:23 corbeau slapd[15683]: conn=0 op=1 MOD
>>> attr=userPassword homePostalAddress entryCSN modifiersName
>>> modifyTimestamp
>>>Feb 16 16:27:23 corbeau slapd[15683]: conn=0 op=1 RESULT tag=103
>>> err=19 text=entryCSN: no user modification allowed
>>>
>>>
>>>slapd.conf: (running on localhost port 389)
>>>database        bdb
>>>suffix          "dc=int-evry, dc=fr"
>>>rootdn          "cn=admin, dc=int-evry, dc=fr"
>>>rootpw          secret
>>>directory       /var/lib/ldap/int
>>>replica         host=127.0.0.1:8006
>>>                binddn="cn=replicator,ou=System,dc=int-evry,dc=fr"
>>>bindmethod=simple   credentials=secret
>>>replogfile      /var/lib/ldap/replica/replogfile
>>>
>>>
>>>slapd_proxy.conf: (running on localhost port 8006)
>>>database ldap
>>>suffix          "dc=int-evry,dc=fr"
>>>uri             "ldap://127.0.0.1:9006";;
>>>lastmod on
>>>binddn cn=admin,dc=int-evry,dc=fr
>>>bindpw secret
>>>
>>>slapd_slave.conf: (running on localhost port 9006)
>>>
>>>database        bdb
>>>suffix          "dc=int-evry,dc=fr"
>>>rootdn          "cn=admin,dc=int-evry,dc=fr"
>>>rootpw          secret
>>>directory       /var/lib/ldap/int_slave
>>>updatedn        "cn=replicator,ou=System,dc=int-evry,dc=fr"
>>>updateref       "ldap://127.0.0.1:389";
>>>
>>>What a I doing wrong ?,
>>>
>>>thanks .
>>>
>>>
>>>Pierangelo Masarati wrote:
>>>
>>>
>>>
>>>>>Pierangelo Masarati wrote:
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>>It could be possible, but it's going to be rather clumsy;
>>>>>>it depends on whether there's a clear way you can extract
>>>>>>a filtering attribute from the DN, e.g. the "uid=<smtg>"
>>>>>>part, to do:
>>>>>>
>>>>>>rewriteMap      ldap uidMap "ldap:///<naming context>?uid?sub"
>>>>>> rewriteRule     "^(uid=[^,]+)(,.*)$$" "%1-%{uidMap(%1)}%2" ":@I"
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>OK thanks a lot for the example :-), I'll try out, but before one
>>>>> question, where should I put
>>>>>these rewrite rules, in the replica section of the master ? this way
>>>>> :
>>>>>
>>>>>replica         host=127.0.0.1:9006
>>>>>               suffix="ou=people,dc=int-evry,dc=fr"
>>>>>
>>>>>attr!="posixAccount,shadowAccount,loginShell,homeDirectory,uidNumber,gidNumber,gecos"
>>>>>               binddn="cn=replicator,ou=people,dc=int-evry,dc=fr"
>>>>>bindmethod=simple   credentials=secret
>>>>>               rewriteMap      ldap uidMap
>>>>>"ldap:///ou=People,dc=int-evry,dc=fr?uid?one";
>>>>>               rewriteRule     "^(uid=[^,]+)(,.*)$$"
>>>>>"%1-%{uidMap(%1)}%2" ":@I"
>>>>>replogfile /var/lib/ldap/replica/replogfile
>>>>>
>>>>>or on a dediceted ldap or meta backend ? sorry for beeing so
>>>>> ignorant, but it's the first time I play with the rewrite engine !
>>>>> by the way, I suspect I need a " rewriteEngine on" somewhere, in
>>>>> slapd.conf ?
>>>>>
>>>>>
>>>>>
>>>>>
>>>>Sorry, my answer was incomplete.  Yes, you need to replicate
>>>>thru a proxy server, e.g. a server in between the master and
>>>>the slave so that
>>>>
>>>>master --> m2s-proxy: uid=test,... ==> uid=test-number,... --> slave
>>>>
>>>>you need to figure out what you intend to do with referrals
>>>>
>>>>
>>>>from slave to master; if you need to rewrite as well, then
>>>
>>>
>>>>you need another proxy to revert the massaging.
>>>>
>>>>slave --> s2m-proxy: uid=test-number,... ==> uid=test,... --> master
>>>>
>>>>the proxy needs to be a back-ldap compiled with --enable-rewrite, and
>>>> needs to be configured with
>>>>
>>>>database ldap
>>>>uri ldap://<slave>
>>>>lastmod on
>>>>rewriteEngine on
>>>>rewriteContext default
>>>><rules as in example>
>>>>
>>>>Note:
>>>>
>>>>if the proxy is used also for normal operations,
>>>>you'll need to deal with other rewrite contexts,
>>>>e.g. searchBase, searchFilter, compareDN,
>>>>compareAttrDN if you want any rewriting to occur
>>>>in these cases.
>>>>
>>>>you'll also need to deal with searchResults and more,
>>>>otherwise they'll be treated with the default rules.
>>>>see slapd-meta(5) in the REWRITE section for what
>>>>rewrite contexts are active.  otherwise you can add
>>>>
>>>>rewriteContext searchBase
>>>>rewriteContext searchFilter
>>>>rewriteContext compareDN
>>>>rewriteContext compareAttrDN
>>>>
>>>>rewriteContext searchResult
>>>>rewriteContext searchAttrDN
>>>>rewriteContext matchedDN
>>>>
>>>>if you don't want any rewrite to occur for these
>>>>rewrite contexts.
>>>>
>>>>On the contrary, the default rewriting should occur
>>>>for any write operation; the default naming context
>>>>is picked if you don't specify any.
>>>>
>>>>Note: the "lastmod on" should work since the target
>>>>is a replica; it is important wince you want the
>>>>replica to be in sync with the master also in terms
>>>>of timestamps.
>>>>
>>>>p.
>>>>
>>>>
>>>>
>>>>
>>
>>
>>


-- 
Pierangelo Masarati
mailto:pierangelo.masarati@sys-net.it