- } else if( conn->c_authz_backend->be_update_ndn != NULL ) {
- /* we SHOULD return a referral in this case */
- *refs = conn->c_authz_backend->be_update_refs;
- rc = LDAP_REFERRAL;
-
- } else {
- rc = conn->c_authz_backend->be_extended(
- conn->c_authz_backend, conn, op,
- reqoid, reqdata,
- rspoid, rspdata, rspctrls,
- text, refs );
+ if( op->o_bd == NULL ) {
+#ifdef HAVE_CYRUS_SASL
+ rs->sr_err = slap_sasl_setpass( op, rs );
+#else
+ rs->sr_text = "no authz backend";
+ rs->sr_err = LDAP_OTHER;
+#endif
+
+#if defined(LDAP_SYNCREPL) || !defined(SLAPD_MULTIMASTER)
+ /* This does not apply to multi-master case */
+ } else if( op->o_bd->be_update_ndn.bv_len ) {
+ /* we SHOULD return a referral in this case */
+ BerVarray defref = NULL;
+#ifdef LDAP_SYNCREPL
+ if ( op->o_bd->syncinfo ) {
+ defref = op->o_bd->syncinfo->master_bv;
+ } else
+#endif
+ {
+ defref = referral_rewrite( op->o_bd->be_update_refs,
+ NULL, NULL, LDAP_SCOPE_DEFAULT );