]> 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 09:59:15 +0000 (12:59 +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 e769d50c97bccc582a39defdfd30dad6f5e8f531..4cf8a6f6fdfd181618286087d07a3c2a16034398 100644 (file)
@@ -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);