Hello,
In the software mailinglist someone noticed a problem with the
multimaster configuration of slapd. I've analysed this some time ago,
but due to a busy schedule I had no time to mention it.
In the /servers/slapd/add.c I found the following condition:
if( be->be_add ) {
/* do the update here */
#ifdef SLAPD_MULTIMASTER
if(be->be_lastmod == ON ||
(be->be_lastmod == UNDEFINED &&
global_lastmod == ON) &&
(be->be_update_ndn == NULL ||
strcmp(be->be_update_ndn,op->o_ndn))
#else
if(be->be_update_ndn == NULL ||
strcmp(be->be_update_ndn,op->o_ndn) == 0)
#endif
.
.
.
What happens is that in multimaster configuration only additions coming
from a client (be_update_ndn is different from op->o_ndn) and not the
other LDAP server are processed. Hence replica's from the other LDAP
server are not processed by this server.
In other cases (modify, delete etc.) we see the following condition for
processing the message (see servers/slapd/delete.c)
if(be->be_delete){
/* Do the update here */
#ifNdef SLAPD_MULTIMASTER
if(be->be_update_ndn == NULL ||
strcmp(be->be_update_ndn,op->o_ndn) == 0)
{
#endif
.
.
.
In this case in the multimaster configuration the update is always
processed independent on the op->o_ndn. I believe this is what you also
want for addition.
If someone has another opinion, please let me know.
Regards,
Edwin Roos.