From: Timo Sirainen Date: Tue, 22 Feb 2022 13:14:20 +0000 (+0100) Subject: director: Fix crashes caused by changing host tag X-Git-Tag: 2.3.19~60 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d5d8b69aa73a3990334f8bd3205a7acfc910e3ab;p=thirdparty%2Fdovecot%2Fcore.git director: Fix crashes caused by changing host tag 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) --- diff --git a/src/director/mail-host.c b/src/director/mail-host.c index c70c7a0ce9..50966f2a8e 100644 --- a/src/director/mail-host.c +++ b/src/director/mail-host.c @@ -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; }