* if we don't hold it.
*/
if ( (be = select_backend( ndn, manageDSAit )) == NULL ) {
+ struct berval **ref = referral_rewrite( default_referral,
+ NULL, dn, LDAP_SCOPE_DEFAULT );
+
send_ldap_result( conn, op, rc = LDAP_REFERRAL,
- NULL, NULL, default_referral, NULL );
+ NULL, NULL, ref ? ref : default_referral, NULL );
+
+ ber_bvecfree( ref );
goto cleanup;
}
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 )
+ int repl_user = be_isupdate( be, op->o_ndn );
+ if ( be->be_update_ndn == NULL || repl_user )
#endif
{
if ( (*be->be_delete)( be, conn, op, dn, ndn ) == 0 ) {
#ifdef SLAPD_MULTIMASTER
- if (be->be_update_ndn == NULL ||
- strcmp( be->be_update_ndn, op->o_ndn ))
+ if (be->be_update_ndn == NULL || !repl_user )
#endif
{
replog( be, op, dn, NULL );
}
#ifndef SLAPD_MULTIMASTER
} else {
+ struct berval **defref = be->be_update_refs
+ ? be->be_update_refs : default_referral;
+ struct berval **ref = referral_rewrite( default_referral,
+ NULL, dn, LDAP_SCOPE_DEFAULT );
+
send_ldap_result( conn, op, rc = LDAP_REFERRAL, NULL, NULL,
- be->be_update_refs ? be->be_update_refs : default_referral, NULL );
+ ref ? ref : defref, NULL );
+
+ ber_bvecfree( ref );
#endif
}