From d7ca0f88ecbd21632b3126a6c17fa406417a03ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fa=CC=81bio=20Dionathan=20Costa=20Depin?= Date: Thu, 23 Apr 2026 12:23:47 -0300 Subject: [PATCH] maildir: avoid creating maildirfolder in INBOX root When an IMAP client issues CREATE INBOX, Dovecot correctly returns ALREADYEXISTS, but still proceeds with parts of mailbox creation logic. This leads to maildir_create_maildirfolder_file() being called, which creates a maildirfolder file in the Maildir root. According to Maildir++ semantics, maildirfolder must only exist in sub-mailboxes, not in the INBOX root. Its presence in the root can break quota handling (maildirsize) and other tooling assumptions. This patch skips maildirfolder creation when operating on INBOX root by checking box->inbox_any. Sub-mailboxes (e.g. INBOX.foo) are unaffected. Note: index_storage_mailbox_create() may still return 1 when mailbox already exists, allowing unnecessary execution flow. This patch focuses on preventing the incorrect filesystem side-effect. --- src/lib-storage/index/maildir/maildir-storage.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/lib-storage/index/maildir/maildir-storage.c b/src/lib-storage/index/maildir/maildir-storage.c index b84cdd1d86d..5f36a1891b7 100644 --- a/src/lib-storage/index/maildir/maildir-storage.c +++ b/src/lib-storage/index/maildir/maildir-storage.c @@ -518,6 +518,11 @@ static int maildir_create_maildirfolder_file(struct mailbox *box) all subfolders. Do this only with Maildir++ layout. */ if (strcmp(box->list->name, MAILBOX_LIST_NAME_MAILDIRPLUSPLUS) != 0) return 0; + + /* INBOX root is not a child Maildir; the marker breaks quota et al. */ + if (box->inbox_any) + return 0; + perm = mailbox_get_permissions(box); path = t_strconcat(mailbox_get_path(box),