X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fmodify.c;h=1405ca9c7201c0d5aca34333748160195efa7ff7;hb=e8cd5c238692a6275b95104b3297029c1cd4a2ce;hp=f8b1d7b8724f1afce95d60fe11e88872952e36dd;hpb=759996c6e9b6b8bbc83da01c9f20ab236a51fecc;p=openldap diff --git a/servers/slapd/modify.c b/servers/slapd/modify.c index f8b1d7b872..1405ca9c72 100644 --- a/servers/slapd/modify.c +++ b/servers/slapd/modify.c @@ -391,10 +391,16 @@ do_modify( if ( op->o_bd->be_modify ) { /* do the update here */ int repl_user = be_isupdate( op->o_bd, &op->o_ndn ); -#ifndef SLAPD_MULTIMASTER + /* Multimaster slapd does not have to check for replicator dn * because it accepts each modify request */ +#if defined(LDAP_SYNCREPL) && !defined(SLAPD_MULTIMASTER) + if ( !op->o_bd->syncinfo && + ( !op->o_bd->be_update_ndn.bv_len || repl_user )) +#elif defined(LDAP_SYNCREPL) && defined(SLAPD_MULTIMASTER) + if ( !op->o_bd->syncinfo ) /* LDAP_SYNCREPL overrides MM */ +#elif !defined(LDAP_SYNCREPL) && !defined(SLAPD_MULTIMASTER) if ( !op->o_bd->be_update_ndn.bv_len || repl_user ) #endif { @@ -436,11 +442,19 @@ do_modify( replog( op ); } -#ifndef SLAPD_MULTIMASTER +#if defined(LDAP_SYNCREPL) || !defined(SLAPD_MULTIMASTER) /* send a referral */ } else { - BerVarray defref = op->o_bd->be_update_refs - ? op->o_bd->be_update_refs : default_referral; + BerVarray defref = NULL; +#ifdef LDAP_SYNCREPL + if ( op->o_bd->syncinfo ) { + defref = op->o_bd->syncinfo->master_bv; + } else +#endif + { + defref = op->o_bd->be_update_refs + ? op->o_bd->be_update_refs : default_referral; + } if ( defref != NULL ) { rs->sr_ref = referral_rewrite( defref, NULL, &op->o_req_dn,