[Dovecot] potential maildir folder rename bug
Admittedly not a common situation but: MAIL=maildir:~/tmp/dovecot/Maildir ./src/imap/imap * PREAUTH [CAPABILITY IMAP4rev1 SASL-IR SORT THREAD=REFERENCES MULTIAPPEND UNSELECT LITERAL+ IDLE CHILDREN NAMESPACE LOGIN-REFERRALS] Logged in as pod 01 LIST "" * * LIST (\HasNoChildren) "." "INBOX" 01 OK List completed. 02 CREATE a 02 OK Create completed. 03 LIST "" * * LIST (\HasNoChildren) "." "a" * LIST (\HasNoChildren) "." "INBOX" 03 OK List completed. 04 RENAME a a.b 04 OK Rename completed. 05 LIST "" * * LIST (\HasNoChildren) "." "a.b.b" * LIST (\HasNoChildren) "." "INBOX" 05 OK List completed. I was expecting to wind up with two folders "INBOX" and "a.b". Instead I got "INBOX" and "a.b.b". I think the problem is that ".a" gets renamed in the filesystem to ".a.b" before src/lib-storage/index/maildir/maildir-storage.c rename_subfolders() is called, which then finds ".a.b", assumes "b" was a subfolder of "a" so renames it. The following may or may not be an appropriate fix. It certainly feels rather ad hoc and I've not thought too deeply about other circumstances where this code is called. I'd certainly appreciate a second opinion. diff -r 8d6433652a33 src/lib-storage/index/maildir/maildir-storage.c --- a/src/lib-storage/index/maildir/maildir-storage.c Sun Sep 30 18:03:17 2007 +0300 +++ b/src/lib-storage/index/maildir/maildir-storage.c Mon Oct 01 20:13:27 2007 +0100 @@ -937,6 +937,10 @@ static int rename_subfolders(struct inde t_push(); old_listname = t_strconcat(oldname, names[i], NULL); + if (strcmp(old_listname, newname) == 0) { + t_pop(); + continue; + } new_listname = t_strconcat(newname, names[i], NULL); oldpath = maildir_get_path(storage, old_listname); newpath = maildir_get_path(storage, new_listname);
participants (2)
-
pod
-
Timo Sirainen