]> 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)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Mon, 28 Feb 2022 09:50:58 +0000 (09:50 +0000)
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;
 }