Re: NFC normalization rename errors after 2.3 to 2.4 upgrade (mdbox)
Michael Goth via dovecot <[email protected]> Wed, 20 May 2026 09:03:14 +0200
| Newsgroups | gmane.mail.imap.dovecot |
|---|---|
| Message-ID | <[email protected]> |
Hi everyone, we also hit this bug(?) last week. Like Jan, we were upgrading from 2.3 to 2.4.3. 'mailbox_list_index_very_dirty_syncs' is 'no' in our setup. After the update, folders with a 32-hex GUID suffix started to appear. The only thing that stopped it from spreading, was the setting 'mailbox_list_normalize_names_to_nfc = no'. I cleaned up the folders with a script, using the method Jan described. After Philip's encouraging comment, I upgraded one of our servers to 2.4.4 and removed 'mailbox_list_normalize_names_to_nfc = no' from its config. But the same error started to appear in the logs again: Error: Failed to rename mailbox 'Infos, Vertäge, etc' for NFC normalization: Mailbox doesn't exist: Infos, Vertäge, etc But there's a difference: No folder with a 32-hex GUID was suffix created. In the example from the log message above, there's still only one folder on disk, even after the error appeared: mdbox/mailboxes/Infos, Vert&AOQ-ge, etc The mails in the folder are still accessible, but it no longer appears as subscribed in Roundcube Mail. But for other folders, we again got the GUID-suffixed "copy", like in Dovecot 2.4.3. We switched back to 'mailbox_list_normalize_names_to_nfc = no' for now. So far, I failed to reproduce the issue on a different server with Dovecot 2.4.4. On this server, I can create (nested) folders with umlauts, put mails into them, etc. - The error never appears in the logs, everything works fine. I'm not sure what to do next. Regards, Michael On 5/17/26 23:34, Philip Iezzi via dovecot wrote: > Hi Timo > No, I don't have mailbox_list_index_very_dirty_syncs=yes, using default no > value. > I can no longer reproduce this problem since having upgraded from 2.4.3 to > 2.4.4, no single "Error: Failed to rename mailbox '...' for NFC > normalization" error since then. > Previously, on Dovecot 2.4.3, the Errors also popped up on regular > umlauts, even after renaming those characters to regular umlauts to make > sure those were not represented as NFD. But on Dovecot 2.4.4 all good, > without any further workarounds needed. > May this be related to this changelog entry? > - lib-storage: Auto-rename non-NFC subscription file entries to NFC on > read. > Kind regards, > Philip > > On 16 May 2026, at 13:53, Timo Sirainen via dovecot > <[email protected]> wrote: > Do you have mailbox_list_index_very_dirty_syncs=yes? If yes, does the > problem go away if you run: doveadm -o > mailbox_list_index_very_dirty_syncs=no mailbox list -u $user > > Alternatively, try doveadm force-resync -u $user '*' > > Yet another possibility to try rm dovecot.list.index* > > Also, there is this patch that possibly helps: > > diff --git a/src/lib-storage/mail-storage.c > b/src/lib-storage/mail-storage.c > index a4363fc73c..b42053bc1a 100644 > --- a/src/lib-storage/mail-storage.c > +++ b/src/lib-storage/mail-storage.c > @@ -1557,11 +1557,7 @@ int mailbox_rename_nfc_forced(struct mailbox_list > *list, const char *vname_raw, > > ret = mailbox_rename(box_old, box_new); > if (ret < 0 && > - mailbox_get_last_mail_error(box_old) == MAIL_ERROR_NOTFOUND) > { > - /* ignore */ > - ret = 0; > - } else if (ret < 0 && > - mailbox_get_last_mail_error(box_old) == > MAIL_ERROR_EXISTS) { > + mailbox_get_last_mail_error(box_old) == MAIL_ERROR_EXISTS) { > /* generate a new unique name */ > guid_128_t guid; > guid_128_generate(guid); > @@ -1572,6 +1568,16 @@ int mailbox_rename_nfc_forced(struct mailbox_list > *list, const char *vname_raw, > box_new = mailbox_alloc(list, *vname_new_r, 0); > ret = mailbox_rename(box_old, box_new); > } > + if (ret < 0 && > + mailbox_get_last_mail_error(box_old) == MAIL_ERROR_NOTFOUND) > { > + /* Source doesn't exist on disk anymore (e.g. backing > store > + already renamed externally while the list index still > has > + the old non-NFC entry). Treat as no-op rather than > fail > + the iteration: return the plain NFC name so the > caller > + doesn't expose the unique-suffix fallback name. */ > + *vname_new_r = vname_nfc; > + ret = 0; > + } > if (ret < 0) > *error_r = mailbox_get_last_error(box_old, NULL); > mailbox_free(&box_old); > > On 12. May 2026, at 15.43, Philip Iezzi via dovecot > <[email protected]> wrote: > > Thanks Jan for reporting this. I also experience this Bug since having > upgraded Dovecot 2.4.2 -> 2.4.3 on 2026-03-27, leading to such errors > in mail.log: > > Error: Failed to rename mailbox 'INBOX/Zuerich' for NFC normalization: > Mailbox doesn't exist: INBOX/Zuerich > > - Zuerich (in above log line) uses a decomposed sequence: a plain u > (U+0075) followed by a combining diaeresis (U+0308), which the > renderer stacks on top. > - Zuerich (which we usually type) uses a precomposed character: ue is > a single code point, U+00FC (LATIN SMALL LETTER U WITH DIAERESIS). > > Such errors lead to broken folder structure - the user is no longer > able to list the whole folder structure (except INBOX) and on mail > clients like Roundcube, all folders appear as no longer subscribed. > Renaming the "ue" to "ue" fixes the problem. But I have a bunch of > other customers which use such characters and in previous Dovecot > versions <= 2.4.2 this was never a problem. > > Is there any known issue / will this be addressed in the next minor > version? > > Kind regards, > Philip > > On 5 May 2026, at 16:04, Jan Muennich via dovecot > <[email protected]> wrote: > > Following up on my own thread in case anyone hits the same issue: > > The failed NFC rename in 2.4 left behind a duplicate mailbox with a > 32-hex GUID suffix, but only for mailboxes that had subfolders. So > for every affected name we ended up with two entries: > > Antraege > Antraege-e078d427706eda694b210000a386c91b > > The original kept its (broken) name with no message access, and the > GUID-suffixed sibling held the actual mail. Both showed up as real > folders in IMAP clients. > > I figured out from the source code that the failed rename hits a > fallback path that creates the GUID-suffixed sibling, but not what > triggers the failure in the first place. I also found a hidden > option there that is not listed in documentation, which works as a > workaround to stop new occurrences: > 'mailbox_list_normalize_names_to_nfc = no'. > > Fix for already-affected mailboxes: for each one, create a temporary > ASCII-named replacement at the same hierarchy level, move the > subfolders into it, move messages from the GUID-suffixed mailbox > into it, delete the GUID-suffixed mailbox (the broken original then > disappears), and rename the replacement back to the original name. > The final rename runs through the regular code path (without NFC > normalisation) and works fine. > > Kind regards, > Jan > > On 11 Apr 2026, at 17:25, Jan Muennich via dovecot > <[email protected]> wrote: > > Hi, > > We just upgraded from 2.3 to 2.4.3 and are now getting errors like > this for any mailbox with German umlauts in the name: > > "Error: Failed to rename mailbox 'Antraege' for NFC normalization: > Mailbox doesn't exist: Antraege" > > The mailboxes work fine otherwise, doveadm mailbox status shows > them with correct message counts. The errors show up on IMAP > access but don't seem to break anything. > > We're using mdbox. On disk the directory is stored as mUTF-7: > > Antr&AOQ-ge > > doveadm mailbox list gives back the name with c3 a4 for the ae, > which is already NFC. We double-checked with python3 unicodedata > and it confirms the name is NFC. So it seems like dovecot is > trying to rename something that doesn't need renaming, and then > failing. > > Is there a way to turn off this automatic rename? Or is this a > known issue with mdbox and mUTF-7 directory names? > > Any help would be appreciated to find out if this is a bug or a > configuration issue on our side! > > Thanks, > Jan > > _______________________________________________ > dovecot mailing list -- [email protected] > To unsubscribe send an email to [email protected] > > _______________________________________________ > dovecot mailing list -- [email protected] > To unsubscribe send an email to [email protected] > > _______________________________________________ > dovecot mailing list -- [email protected] > To unsubscribe send an email to [email protected] > > _______________________________________________ > dovecot mailing list -- [email protected] > To unsubscribe send an email to [email protected] > > > _______________________________________________ > dovecot mailing list -- [email protected] > To unsubscribe send an email to [email protected] -- Michael Goth .webflow GmbH Geschäftsführer: Andreas Schrei Wasserburger Straße 4 D - 83352 Altenmarkt a. d. Alz Amtsgericht Traunstein HRB 18537 E-Mail: [email protected] Tel: +49 (0) 8621 - 99989 - 26 Fax: +49 (0) 8621 - 99989 - 28 Web: www.webflow.de Informationen zur Datennutzung und zu Ihren Betroffenenrechten finden Sie unter folgender URL: https://www.webflow.de/unternehmen/datenschutzerklaerung/ _______________________________________________ dovecot mailing list -- [email protected] To unsubscribe send an email to [email protected]