]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-bdb/referral.c
return structuralObjectClass errors
[openldap] / servers / slapd / back-bdb / referral.c
index 2e602ddd6aa006f8e16e311ee379503dc24ca3f0..168da4677d54275fcad90ddae900b930be368ef7 100644 (file)
@@ -91,8 +91,11 @@ dn2entry_retry:
                                (long) op->o_tag, op->o_req_dn.bv_val, e->e_name.bv_val );
 
                        if( is_entry_referral( e ) ) {
+                               BerVarray ref = get_entry_referrals( op, e );
                                rc = LDAP_OTHER;
-                               rs->sr_ref = get_entry_referrals( op, e );
+                               rs->sr_ref = referral_rewrite( ref, NULL,
+                                       &op->o_req_dn, LDAP_SCOPE_DEFAULT );
+                               ber_bvarray_free( ref );
                                if ( rs->sr_ref ) {
                                        rs->sr_matched = ber_strdup_x(
                                        e->e_name.bv_val, op->o_tmpmemctx );
@@ -101,7 +104,7 @@ dn2entry_retry:
 
                        bdb_cache_return_entry_r (bdb->bi_dbenv, &bdb->bi_cache, e, &lock);
                        e = NULL;
-               } else if ( default_referral != NULL ) {
+               } else if ( !be_issuffix( op->o_bd, &op->o_req_ndn ) && default_referral != NULL ) {
                        rc = LDAP_OTHER;
                        rs->sr_ref = referral_rewrite( default_referral,
                                NULL, &op->o_req_dn, LDAP_SCOPE_DEFAULT );