From: Kurt Zeilenga Date: Fri, 24 Sep 2004 00:32:12 +0000 (+0000) Subject: More syncrepl fixes X-Git-Tag: OPENLDAP_REL_ENG_2_2_18~22 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=79d27e960063db4487521a0202ac32633faa9744;p=openldap More syncrepl fixes --- diff --git a/CHANGES b/CHANGES index 5021c185ae..a20b646d79 100644 --- a/CHANGES +++ b/CHANGES @@ -1,5 +1,7 @@ OpenLDAP 2.2 Change Log +OpenLDAP 2.2.18 Engineering + OpenLDAP 2.2.17 Release Fixed slapd syncrepl memory leak bugs Documentation diff --git a/build/version.var b/build/version.var index e551659fa3..662f77c249 100644 --- a/build/version.var +++ b/build/version.var @@ -15,7 +15,7 @@ ol_package=OpenLDAP ol_major=2 ol_minor=2 -ol_patch=17 +ol_patch=X ol_api_inc=20217 ol_api_current=7 ol_api_revision=10 diff --git a/servers/slapd/back-bdb/delete.c b/servers/slapd/back-bdb/delete.c index 18b0c0b1b9..c433e1dce7 100644 --- a/servers/slapd/back-bdb/delete.c +++ b/servers/slapd/back-bdb/delete.c @@ -158,6 +158,8 @@ retry: /* transaction retry */ /* FIXME : dn2entry() should return non-glue entry */ if ( e == NULL || ( !manageDSAit && is_entry_glue( e ))) { + BerVarray deref = NULL; + #ifdef NEW_LOGGING LDAP_LOG ( OPERATION, ARGS, "<=- bdb_delete: no such object %s\n", op->o_req_dn.bv_val, 0, 0); @@ -176,7 +178,6 @@ retry: /* transaction retry */ matched = 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 ) { @@ -188,7 +189,7 @@ 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; @@ -197,6 +198,9 @@ retry: /* transaction retry */ if ( rs->sr_ref != default_referral ) { 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; diff --git a/servers/slapd/back-bdb/modify.c b/servers/slapd/back-bdb/modify.c index 45d2efeb11..d45f1ba09c 100644 --- a/servers/slapd/back-bdb/modify.c +++ b/servers/slapd/back-bdb/modify.c @@ -482,6 +482,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 ) @@ -491,7 +492,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 ) { @@ -503,7 +503,7 @@ 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; @@ -512,6 +512,9 @@ retry: /* transaction retry */ if ( rs->sr_ref != default_referral ) { 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; diff --git a/servers/slapd/back-bdb/modrdn.c b/servers/slapd/back-bdb/modrdn.c index 0956d8cdfd..fd88485bd0 100644 --- a/servers/slapd/back-bdb/modrdn.c +++ b/servers/slapd/back-bdb/modrdn.c @@ -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; diff --git a/servers/slapd/back-ldbm/delete.c b/servers/slapd/back-ldbm/delete.c index 234b30a3ab..17d9e0e7ae 100644 --- a/servers/slapd/back-ldbm/delete.c +++ b/servers/slapd/back-ldbm/delete.c @@ -53,6 +53,8 @@ ldbm_back_delete( /* FIXME : dn2entry() should return non-glue entry */ if ( e == NULL || ( !manageDSAit && is_entry_glue( e ))) { + BerVarray deref = NULL; + #ifdef NEW_LOGGING LDAP_LOG( BACK_LDBM, INFO, "ldbm_back_delete: no such object %s\n", op->o_req_dn.bv_val, 0, 0 ); @@ -69,7 +71,6 @@ ldbm_back_delete( 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 ) { @@ -81,7 +82,7 @@ ldbm_back_delete( 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); @@ -90,6 +91,9 @@ ldbm_back_delete( 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; diff --git a/servers/slapd/back-ldbm/modify.c b/servers/slapd/back-ldbm/modify.c index 3382356e5a..40c8d9bbaf 100644 --- a/servers/slapd/back-ldbm/modify.c +++ b/servers/slapd/back-ldbm/modify.c @@ -339,6 +339,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 ) @@ -346,7 +347,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 ) { @@ -358,7 +358,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); @@ -366,6 +366,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; diff --git a/servers/slapd/back-ldbm/modrdn.c b/servers/slapd/back-ldbm/modrdn.c index ccc7bf9233..7b5fa0c06c 100644 --- a/servers/slapd/back-ldbm/modrdn.c +++ b/servers/slapd/back-ldbm/modrdn.c @@ -84,6 +84,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 ) @@ -91,7 +92,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 ) { @@ -103,7 +103,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); @@ -112,6 +112,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; diff --git a/servers/slapd/init.c b/servers/slapd/init.c index a8a8e812ea..1fee4fab22 100644 --- a/servers/slapd/init.c +++ b/servers/slapd/init.c @@ -257,6 +257,9 @@ int slap_destroy(void) slap_name, 0, 0 ); #endif + if ( default_referral ) { + ber_bvarray_free( default_referral ); + } rc = backend_destroy();