docker-offlineimap/offlineimap
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
..
folder Simplify Maildir message saving 2011-06-13 16:29:00 +02:00
repository Allow to specify remote hostname even for the Gmail case 2011-06-08 17:19:07 +02:00
ui threadutil: explicitly import get_ident from thread 2011-05-12 18:28:49 +02:00
__init__.py v6.3.4-rc1 2011-05-16 18:54:22 +02:00
accounts.py cleanup: remove uneeded imports 2011-05-09 22:42:15 +02:00
CustomConfig.py Improve CustomConfig documentation 2011-01-20 19:46:01 +01:00
error.py Add OfflineImapError class 2011-05-05 20:00:07 +02:00
imaplib2.py Update imaplib2 to 2.24 2011-06-09 18:26:39 +02:00
imaplibutil.py improve message "error 111" if connection failed 2011-05-25 20:32:41 +02:00
imapserver.py Throw errors on connection refused and on non-standard SSL ports 2011-06-06 21:33:16 +02:00
imaputil.py cleanup import statements and conform to PEP-8 2011-03-14 21:35:33 +01:00
init.py fix: allow debugtype 'thread' from command line 2011-05-16 18:18:21 +02:00
localeval.py Update FSF address 2006-08-12 05:15:55 +01:00
mbnames.py explicitly define symbols to import instead of 'import *' 2011-05-09 22:43:03 +02:00
syncmaster.py Remove weird SigListener class 2011-05-08 14:25:16 +02:00
threadutil.py fix broken ui Blinkenlights in multi-threaded mode 2011-05-18 18:38:05 +02:00