]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
director: Fix crashes caused by changing host tag
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Tue, 22 Feb 2022 13:14:20 +0000 (14:14 +0100)
committerTimo Sirainen <timo.sirainen@open-xchange.com>
Thu, 24 Feb 2022 12:17:21 +0000 (13:17 +0100)
Fixes:
Panic: file director.c: line 1175 (director_move_user): assertion failed: (user->host->tag == host->tag)
Panic: file director-request.c: line 303 (director_request_continue_real): assertion failed: (user->host->tag == mail_tag)

src/director/mail-host.c

index c70c7a0ce959daf989cc73286ec2c500c64f1c2f..50966f2a8e8dc029b10bf2942f5678f64acbe28b 100644 (file)
@@ -330,6 +330,11 @@ void mail_host_set_tag(struct mail_host *host, const char *tag_name)
 {
        i_assert(tag_name != NULL);
 
+       /* If the host already has users, forget all of them. Otherwise state
+          becomes inconsistent, since tag->users won't match
+          user->host->tag. */
+       user_directory_remove_host(host->tag->users, host);
+
        host->tag = mail_tag_get(host->list, tag_name);
        host->list->vhosts_unsorted = TRUE;
 }