]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-ldbm/modrdn.c
fix ACL value checking for bind (ITS#3446)
[openldap] / servers / slapd / back-ldbm / modrdn.c
index a76c7874d31ff393feb2706764d167367d49d2e0..d2cdf89816ff11be0f0fc6c48c237cffa44b4815 100644 (file)
@@ -2,7 +2,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 1998-2004 The OpenLDAP Foundation.
+ * Copyright 1998-2005 The OpenLDAP Foundation.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -77,6 +77,7 @@ ldbm_back_modrdn(
        /* get entry with writer lock */
        /* FIXME: dn2entry() should return non-glue entry */
        if (( e == NULL  ) || ( !manageDSAit && e && is_entry_glue( e ))) {
+               BerVarray deref = NULL;
                if ( matched != NULL ) {
                        rs->sr_matched = strdup( matched->e_dn );
                        rs->sr_ref = is_entry_referral( matched )
@@ -84,7 +85,6 @@ ldbm_back_modrdn(
                                : NULL;
                        cache_return_entry_r( &li->li_cache, matched );
                } 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 ) {
@@ -96,7 +96,7 @@ ldbm_back_modrdn(
                                deref = default_referral;
                        }
                        rs->sr_ref = referral_rewrite( deref, NULL, &op->o_req_dn,
-                                                       LDAP_SCOPE_DEFAULT );
+                                               LDAP_SCOPE_DEFAULT );
                }
 
                ldap_pvt_thread_rdwr_wunlock(&li->li_giant_rwlock);
@@ -105,6 +105,9 @@ ldbm_back_modrdn(
                send_ldap_result( op, rs );
 
                if ( rs->sr_ref ) 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;