From: Timo Sirainen Date: Fri, 19 Dec 2025 11:28:05 +0000 (+0200) Subject: virtual: Skip nonexistent mailboxes also in race conditions X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c8e98d9ee4ef3084397f09e6d6639bddbd4ae85d;p=thirdparty%2Fdovecot%2Fcore.git virtual: Skip nonexistent mailboxes also in race conditions If mailbox is deleted between mailbox listing and when it's opened, it shows up as nonexistent. It should be ignored rather than failing. --- diff --git a/src/plugins/virtual/virtual-config.c b/src/plugins/virtual/virtual-config.c index c1e03d6d62..f448c81d7d 100644 --- a/src/plugins/virtual/virtual-config.c +++ b/src/plugins/virtual/virtual-config.c @@ -343,17 +343,22 @@ static int virtual_config_box_metadata_match(struct mailbox *box, { struct imap_metadata_transaction *imtrans; struct mail_attribute_value value; + enum mail_error mail_error = MAIL_ERROR_NONE; int ret; imtrans = imap_metadata_transaction_begin(box); ret = imap_metadata_get(imtrans, bbox->metadata_entry, &value); if (ret < 0) - *error_r = t_strdup(imap_metadata_transaction_get_last_error(imtrans, NULL)); + *error_r = t_strdup(imap_metadata_transaction_get_last_error(imtrans, &mail_error)); if (ret > 0) ret = wildcard_match(value.value, bbox->metadata_value) ? 1 : 0; if (ret >= 0 && bbox->negative_match) ret = ret > 0 ? 0 : 1; (void)imap_metadata_transaction_commit(&imtrans, NULL, NULL); + if (ret < 0 && mail_error == MAIL_ERROR_NOTFOUND) { + /* Ignore nonexistent / \NoSelect mailboxes */ + ret = 0; + } return ret; }