Package: offlineimap Version: 5.99.1 Severity: normal Tags: patch The offlineimap Maildir code checks for file existence and then opens a file. That's open to a race condition. It's better to open the file and fail if it already exists. The following patch does this. It catches OSError 17 (file exists) and re-raises all others. I'll leave it up to you to decide whether this is appropriate.
--- /var/lib/python-support/python2.5/offlineimap/folder/Maildir.py
2007-07-04 13:14:39.000000000 +0100
+++ /tmp/Maildir.py 2007-08-24 17:07:59.000000000 +0100
@@ -146,7 +146,8 @@
# Otherwise, save the message in tmp/ and then call savemessageflags()
# to give it a permanent home.
tmpdir = os.path.join(self.getfullname(), 'tmp')
- messagename = None
+ file = fd = None
+ messagename = tmpmessaename = None
attempts = 0
while 1:
if attempts > 15:
@@ -159,19 +160,24 @@
socket.gethostname(),
uid,
md5.new(self.getvisiblename()).hexdigest())
- if os.path.exists(os.path.join(tmpdir, messagename)):
- time.sleep(2)
- attempts += 1
- else:
- break
- tmpmessagename = messagename.split(',')[0]
- ui.debug('maildir', 'savemessage: using temporary name %s' %
tmpmessagename)
- file = open(os.path.join(tmpdir, tmpmessagename), "wt")
+ tmpmessagename = messagename.split(',')[0]
+ try:
+ fd = os.open(os.path.join(tmpdir, tmpmessagename),
+ os.O_WRONLY + os.O_CREAT + os.O_EXCL)
+ file = os.fdopen(fd, 'w')
+ ui.debug('maildir', 'savemessage: using temporary name %s' %
tmpmessagename)
+ except OSError, e:
+ if e.errno == 17:
+ time.sleep(2)
+ attempts += 1
+ continue
+ raise
+
file.write(content)
# Make sure the data hits the disk
file.flush()
- os.fsync(file.fileno())
+ os.fsync(fd)
file.close()
if rtime != None:
-- System Information:
Debian Release: lenny/sid
APT prefers unstable
APT policy: (500, 'unstable'), (500, 'testing'), (1, 'experimental')
Architecture: i386 (i686)
Kernel: Linux 2.6.21-2-686 (SMP w/1 CPU core)
Locale: LANG=en_GB, LC_CTYPE=en_GB.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Versions of packages offlineimap depends on:
ii python 2.4.4-6 An interactive high-level object-o
ii python-support 0.6.4 automated rebuilding support for p
offlineimap recommends no packages.
-- no debconf information
--
.''`. martin f. krafft <[EMAIL PROTECTED]>
: :' : proud Debian developer, author, administrator, and user
`. `'` http://people.debian.org/~madduck - http://debiansystem.info
`- Debian - when you have better things to do than fixing systems
digital_signature_gpg.asc
Description: Digital signature (see http://martin-krafft.net/gpg/)

