docker-offlineimap/offlineimap/folder
Sebastian Spaeth d8026c5308 Simplify Maildir message saving
Previously we were attempting to save out mails according to
 http://www.qmail.org/man/man5/maildir.html in 4 steps:

1 Create a unique filename
2 Do stat(tmp/<filename>). If it found a file, wait 2 sec and go back to 1.
3 Create and write the message to the tmp/<filename>.
4 Link from tmp/* to new/*

(we did step 2 up to 15 times) But as stated by
http://wiki1.dovecot.org/MailboxFormat/Maildir (see section 'Issues with
the specification'), this is a pointless approach, e.g. there are race
issues between stating that the filename does not exist and the actual
moving (when it might exist).

So, we can simplify the steps as suggested in the dovecot wiki and
tighten up our safety at the same time.

One improvement that we do is to open the file, guaranteeing that it did
not exist before in an atomic manner, thus our simplified approach is
really more secure than what we had before.

Also, we throw an OfflineImapError at MESSAGE level when the supposedly
unique filename already exists, so that we can skip this message and
still continue with other messages.

Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
Signed-off-by: Nicolas Sebrecht <nicolas.s-dev@laposte.net>
2011-06-13 16:29:00 +02:00
..
__init__.py Add Gmail IMAP special support. 2008-01-03 04:56:55 +01:00
Base.py refactoring: simplify the semaphorewait logic 2011-05-12 18:30:39 +02:00
Gmail.py Remove some unneeded imports 2011-03-14 19:51:52 +01:00
IMAP.py folder/IMAP: Remove buggy duplicate assignment 2011-06-08 17:52:24 +02:00
LocalStatus.py Use self.doautosave rather than self.dofsync 2011-05-07 13:29:11 +02:00
LocalStatusSQLite.py cleanup: remove uneeded imports 2011-05-09 22:42:15 +02:00
Maildir.py Simplify Maildir message saving 2011-06-13 16:29:00 +02:00
UIDMaps.py Merge branch 'ss/corrupted-uidmap-file' into next 2011-05-02 19:09:52 +02:00