]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-ldbm/modify.c
fix ACL value checking for bind (ITS#3446)
[openldap] / servers / slapd / back-ldbm / modify.c
index 4f9a79706a585c2f9c7d69d5fc64d81855fcf9cf..21e4bdb74ccaffede7771496a5b47d7618f02b35 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
@@ -249,6 +249,7 @@ ldbm_back_modify(
 
        /* 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 = ch_strdup( matched->e_dn );
                        rs->sr_ref = is_entry_referral( matched )
@@ -256,7 +257,6 @@ ldbm_back_modify(
                                : 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 ) {
@@ -268,7 +268,7 @@ ldbm_back_modify(
                                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);
@@ -276,6 +276,9 @@ ldbm_back_modify(
                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;