]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
director: Fix mail_hosts_dup() to duplicate tags correctly.
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Mon, 3 Apr 2017 09:40:51 +0000 (12:40 +0300)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Mon, 3 Apr 2017 11:00:05 +0000 (14:00 +0300)
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 <user> to not show "Initial config" as empty.

src/director/mail-host.c

index 30c43fa70b5dc0d36834bcf4fc10ef10f58a40f6..e602940cf41f490df64c6f20c6db7fe4f13446c0 100644 (file)
@@ -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);