]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/modify.c
- LDAP_SYNCREPL defined in include/ldap.h
[openldap] / servers / slapd / modify.c
index f8b1d7b8724f1afce95d60fe11e88872952e36dd..1405ca9c7201c0d5aca34333748160195efa7ff7 100644 (file)
@@ -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,