From: Howard Chu Date: Mon, 28 Feb 2005 17:35:11 +0000 (+0000) Subject: Fix ITS#3571 (crash in syncrepl sessionlog), plug memleak in sessionlog X-Git-Tag: OPENLDAP_REL_ENG_2_2_24~31 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=323e744ee362f090942ddb1f1f0a5f168a84f9ac;p=thirdparty%2Fopenldap.git Fix ITS#3571 (crash in syncrepl sessionlog), plug memleak in sessionlog --- diff --git a/servers/slapd/sessionlog.c b/servers/slapd/sessionlog.c index 6c414eb726..4ecc19c57f 100644 --- a/servers/slapd/sessionlog.c +++ b/servers/slapd/sessionlog.c @@ -80,9 +80,8 @@ slap_send_session_log( if ( rs->sr_err != LDAP_SUCCESS ) return rs->sr_err; - if ( e.e_name.bv_val ) - ch_free( e.e_name.bv_val ); - ber_dupbv( &e.e_name, &slog_e->sl_name ); + e.e_name = slog_e->sl_name; + e.e_nname = slog_e->sl_nname; rs->sr_entry = &e; rs->sr_attrs = uuid_attr; @@ -112,6 +111,7 @@ slap_add_session_log( a = attr_find( e->e_attrs, slap_schema.si_ad_entryUUID ); ber_dupbv( &slog_e->sl_uuid, &a->a_nvals[0] ); ber_dupbv( &slog_e->sl_name, &e->e_name ); + ber_dupbv( &slog_e->sl_nname, &e->e_nname ); ber_dupbv( &slog_e->sl_csn, &op->o_sync_csn ); LDAP_STAILQ_INSERT_TAIL( &sop->o_sync_slog_list, slog_e, sl_link ); sop->o_sync_slog_len++; @@ -125,6 +125,7 @@ slap_add_session_log( LDAP_STAILQ_REMOVE_HEAD( &sop->o_sync_slog_list, sl_link ); ch_free( slog_e->sl_uuid.bv_val ); ch_free( slog_e->sl_name.bv_val ); + ch_free( slog_e->sl_nname.bv_val ); ch_free( slog_e->sl_csn.bv_val ); ch_free( slog_e ); sop->o_sync_slog_len--; diff --git a/servers/slapd/slap.h b/servers/slapd/slap.h index 9136f84122..f9afb1d8fb 100644 --- a/servers/slapd/slap.h +++ b/servers/slapd/slap.h @@ -1940,6 +1940,7 @@ struct psid_entry { struct slog_entry { struct berval sl_uuid; struct berval sl_name; + struct berval sl_nname; struct berval sl_csn; LDAP_STAILQ_ENTRY(slog_entry) sl_link; };