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.3.0.rc1~1808 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4d074a5c4cdf7cc5962f9629e81eeaa8fe0a2a64;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 e769d50c97..4cf8a6f6fd 100644 --- a/src/director/mail-host.c +++ b/src/director/mail-host.c @@ -553,12 +553,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; } @@ -571,7 +573,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);