On Thu, Oct 04, 2012 at 09:49:03AM +0200, Petr Spacek wrote:
> Hello,
> 
> Fix memory leaks in dynamic update PTR synchronization.
> 
> During settings code refactoring I found several ugly memory leaks
> in sync_ptr handling.

Ack

> 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
> 


-- 
Adam Tkac, Red Hat, Inc.

_______________________________________________
Freeipa-devel mailing list
Freeipa-devel@redhat.com
https://www.redhat.com/mailman/listinfo/freeipa-devel

Reply via email to