]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-bdb/modrdn.c
More syncrepl fixes
[openldap] / servers / slapd / back-bdb / modrdn.c
index 0956d8cdfd01a903432ed0f85b3c0a6b09d39f88..fd88485bd08bb54df9893b030a10ceacf481d207 100644 (file)
@@ -186,6 +186,7 @@ retry:      /* transaction retry */
        if (( rs->sr_err == DB_NOTFOUND ) ||
                ( !manageDSAit && e && is_entry_glue( e )))
        {
+               BerVarray deref = NULL;
                if( e != NULL ) {
                        rs->sr_matched = ch_strdup( e->e_dn );
                        rs->sr_ref = is_entry_referral( e )
@@ -195,7 +196,6 @@ retry:      /* transaction retry */
                        e = NULL;
 
                } else {
-                       BerVarray deref = NULL;
                        if ( !LDAP_STAILQ_EMPTY( &op->o_bd->be_syncinfo )) {
                                syncinfo_t *si;
                                LDAP_STAILQ_FOREACH( si, &op->o_bd->be_syncinfo, si_next ) {
@@ -207,13 +207,16 @@ retry:    /* transaction retry */
                                deref = default_referral;
                        }
                        rs->sr_ref = referral_rewrite( deref, NULL, &op->o_req_dn,
-                               LDAP_SCOPE_DEFAULT );
+                                       LDAP_SCOPE_DEFAULT );
                }
 
                rs->sr_err = LDAP_REFERRAL;
                send_ldap_result( op, rs );
 
                ber_bvarray_free( rs->sr_ref );
+               if ( deref != default_referral ) {
+                       ber_bvarray_free( deref );
+               }
                free( (char *)rs->sr_matched );
                rs->sr_ref = NULL;
                rs->sr_matched = NULL;