Mercurial > dovecot > core-2.2
changeset 21022:fe1a8662a64b
doveadm director: Fix memory leaks if hostname lookup fails.
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Mon, 31 Oct 2016 21:39:44 +0200 |
parents | bda524026533 |
children | e117f596cdea |
files | src/doveadm/doveadm-director.c |
diffstat | 1 files changed, 19 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/src/doveadm/doveadm-director.c Tue Nov 01 17:09:27 2016 +0200 +++ b/src/doveadm/doveadm-director.c Mon Oct 31 21:39:44 2016 +0200 @@ -350,8 +350,10 @@ if (ctx->host == NULL || ctx->hash_map) ips_count = 0; - else - if (director_get_host(ctx->host, &ips, &ips_count) != 0) return; + else if (director_get_host(ctx->host, &ips, &ips_count) != 0) { + director_disconnect(ctx); + return; + } pool = pool_alloconly_create("director map users", 1024*128); hash_table_create_direct(&users, pool, 0); @@ -458,7 +460,10 @@ if (ctx->tag != NULL) host = t_strdup_until(ctx->host, ctx->tag++); } - if (director_get_host(host, &ips, &ips_count) != 0) return; + if (director_get_host(host, &ips, &ips_count) != 0) { + director_disconnect(ctx); + return; + } cmd = t_str_new(128); for (i = 0; i < ips_count; i++) { str_truncate(cmd, 0); @@ -511,7 +516,10 @@ return; } - if (director_get_host(host, &ips, &ips_count) != 0) return; + if (director_get_host(host, &ips, &ips_count) != 0) { + director_disconnect(ctx); + return; + } for (i = 0; i < ips_count; i++) { director_send(ctx, t_strdup_printf( "%s\t%s\n", cmd_name, net_ip2addr(&ips[i]))); @@ -564,7 +572,10 @@ user_hash = mail_user_hash(ctx->user, doveadm_settings->director_username_hash); - if (director_get_host(ctx->host, &ips, &ips_count) != 0) return; + if (director_get_host(ctx->host, &ips, &ips_count) != 0) { + director_disconnect(ctx); + return; + } ip_str = net_ip2addr(&ips[0]); director_send(ctx, t_strdup_printf( "USER-MOVE\t%u\t%s\n", user_hash, ip_str)); @@ -676,8 +687,9 @@ if (net_addr2ip(ctx->host, &ip) == 0) { ips = &ip; ips_count = 1; - } else { - if (director_get_host(ctx->host, &ips, &ips_count) != 0) return; + } else if (director_get_host(ctx->host, &ips, &ips_count) != 0) { + director_disconnect(ctx); + return; } cmd = t_str_new(64);