X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;ds=sidebyside;f=servers%2Fslapd%2Fmodrdn.c;h=3f542adb4b81e1ed9a561a6fb8470bab5692fe7e;hb=9184d038ead9aeabff5b7c0bb2ed0d1e6bc95c8c;hp=0644a8995a8d56a76615c016fd3719d9cc0e934f;hpb=b5e9378d4f2532e9bfe14b7b4aa3e2a1445619da;p=openldap diff --git a/servers/slapd/modrdn.c b/servers/slapd/modrdn.c index 0644a8995a..3f542adb4b 100644 --- a/servers/slapd/modrdn.c +++ b/servers/slapd/modrdn.c @@ -336,8 +336,10 @@ do_modrdn( Debug(LDAP_DEBUG_TRACE, "do_modrdn: modrdn preoperation plugin " "failed.\n", 0, 0, 0); #endif - if ( slapi_pblock_get( pb, SLAPI_RESULT_CODE, (void *)&rs->sr_err ) != 0) + if ( ( slapi_pblock_get( pb, SLAPI_RESULT_CODE, (void *)&rs->sr_err ) != 0 ) || + rs->sr_err == LDAP_SUCCESS ) { rs->sr_err = LDAP_OTHER; + } goto cleanup; } #endif /* defined( LDAP_SLAPI ) */ @@ -351,7 +353,12 @@ do_modrdn( if ( op->o_bd->be_modrdn ) { /* do the update here */ int repl_user = be_isupdate( op->o_bd, &op->o_ndn ); -#ifndef SLAPD_MULTIMASTER +#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 { @@ -363,10 +370,18 @@ do_modrdn( ) { replog( op ); } -#ifndef SLAPD_MULTIMASTER +#if defined(LDAP_SYNCREPL) || !defined(SLAPD_MULTIMASTER) } 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, LDAP_SCOPE_DEFAULT );