Hello, Fix memory leaks in dynamic update PTR synchronization.
During settings code refactoring I found several ugly memory leaks in sync_ptr handling.
-- Petr^2 Spacek
From 690008eb1fb6f340c735150f21a8d30a244e14bf Mon Sep 17 00:00:00 2001 From: Petr Spacek <pspa...@redhat.com> Date: Thu, 4 Oct 2012 09:46:25 +0200 Subject: [PATCH] Fix memory leaks in dynamic update PTR synchronization. Signed-off-by: Petr Spacek <pspa...@redhat.com> --- src/ldap_helper.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/ldap_helper.c b/src/ldap_helper.c index 629c76732c86af2a614e589a5afff18136068a66..a7f492e1169c36a321c240fd6ff321a9ef63c2c4 100644 --- a/src/ldap_helper.c +++ b/src/ldap_helper.c @@ -2496,11 +2496,16 @@ modify_ldap_common(dns_name_t *owner, ldap_instance_t *ldap_inst, isc_boolean_t zone_sync_ptr = ldap_inst->sync_ptr; ld_string_t *owner_dn_ptr = NULL; char *attrs[] = {"idnsAllowSyncPTR", "idnsAllowDynUpdate", NULL}; + ld_string_t *str_ptr = NULL; + ldapdb_rdatalist_t rdlist_search; + dns_rdatalist_t *rdlist_ptr = NULL; + char **vals = NULL; /* * Find parent zone entry and check if Dynamic Update is allowed. * @todo Try the cache first and improve split: SOA records are problematic. */ + ISC_LIST_INIT(rdlist_search); CHECK(str_new(mctx, &owner_dn)); CHECK(dnsname_to_dn(ldap_inst->zone_register, owner, owner_dn)); char *zone_dn = strstr(str_buf(owner_dn),", "); @@ -2606,8 +2611,6 @@ modify_ldap_common(dns_name_t *owner, ldap_instance_t *ldap_inst, CHECK(dns_byaddr_createptrname2(&isc_ip, 0, dns_fixedname_name(&name))); /* Find PTR entry in LDAP. */ - ldapdb_rdatalist_t rdlist_search; - dns_rdatalist_t *rdlist_ptr = NULL; result = ldapdb_rdatalist_get(mctx, ldap_inst, dns_fixedname_name(&name), NULL, &rdlist_search); @@ -2682,7 +2685,6 @@ modify_ldap_common(dns_name_t *owner, ldap_instance_t *ldap_inst, * * @example str_ptr = "host.example.com." */ - ld_string_t *str_ptr = NULL; CHECK(str_new(mctx, &str_ptr)); CHECK(dn_to_text(str_buf(owner_dn), str_ptr, NULL)); @@ -2699,7 +2701,6 @@ modify_ldap_common(dns_name_t *owner, ldap_instance_t *ldap_inst, * */ if (mod_op == LDAP_MOD_DELETE) { - char **vals = NULL; CHECK(ldap_rdata_to_char_array(mctx, HEAD(rdlist_ptr->rdata), &vals)); if (vals != NULL && vals[0] != NULL && strcmp(vals[0], str_buf(str_ptr)) != 0) { log_debug(3,"Cannot delete PTR record, unexpected value found " @@ -2746,9 +2747,12 @@ cleanup: ldap_pool_putconnection(ldap_inst->pool, &ldap_conn); str_destroy(&owner_dn_ptr); str_destroy(&owner_dn); + str_destroy(&str_ptr); free_ldapmod(mctx, &change[0]); free_ldapmod(mctx, &change[1]); if (change_ptr != NULL) free_ldapmod(mctx, &change_ptr); + ldapdb_rdatalist_destroy(mctx, &rdlist_search); + free_char_array(mctx, &vals); return result; } -- 1.7.11.4
_______________________________________________ Freeipa-devel mailing list Freeipa-devel@redhat.com https://www.redhat.com/mailman/listinfo/freeipa-devel