From: Timo Sirainen Date: Mon, 3 Apr 2017 09:40:51 +0000 (+0300) Subject: director: Fix mail_hosts_dup() to duplicate tags correctly. X-Git-Tag: 2.2.29.rc1~26 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=dbed1a0ffeaae2a4691969bbdbf1e24adaa6576d;p=thirdparty%2Fdovecot%2Fcore.git director: Fix mail_hosts_dup() to duplicate tags correctly. The host->tag pointed to the old hosts list. Also the new hosts list's tags array wasn't filled. This fixes USER-LOOKUP to return host with default configuration, which fixes doveadm director status to not show "Initial config" as empty. --- diff --git a/src/director/mail-host.c b/src/director/mail-host.c index 30c43fa70b..e602940cf4 100644 --- a/src/director/mail-host.c +++ b/src/director/mail-host.c @@ -558,12 +558,14 @@ void mail_hosts_deinit(struct mail_host_list **_list) i_free(list); } -static struct mail_host *mail_host_dup(const struct mail_host *src) +static struct mail_host * +mail_host_dup(struct mail_host_list *dest_list, const struct mail_host *src) { struct mail_host *dest; dest = i_new(struct mail_host, 1); *dest = *src; + dest->tag = mail_tag_get(dest_list, src->tag->name); dest->hostname = i_strdup(src->hostname); return dest; } @@ -576,7 +578,7 @@ struct mail_host_list *mail_hosts_dup(const struct mail_host_list *src) dest = mail_hosts_init(src->user_expire_secs, src->consistent_hashing, src->user_free_hook); array_foreach(&src->hosts, hostp) { - dest_host = mail_host_dup(*hostp); + dest_host = mail_host_dup(dest, *hostp); array_append(&dest->hosts, &dest_host, 1); } mail_hosts_sort(dest);