Package: offlineimap
Version: 6.5.4-2
Severity: grave
Justification: causes data loss / breaks integrity of mail archive

Offlineimap regularly duplicates messages, that's to say, it copies a message
twice from the remote host to the local folder. It then complains if a local
program (such as imapfilter) moves or deletes them.

This leads to data loss (i.e. loss of the integrity of my mail archive) since,
whenever imapfilter runs on such a state, it copies the duplicates to their
appropriate folders, and so I end up with duplicates of debian-devel messages
in my "Debian.debian-devel" folder, etc.

Attached offlineimap log:
| Account sync McGill:
|  Next refresh in 13.0 minutes
| Thread-989:
|  Syncing INBOX: Gmail -> MappedIMAP
| Thread-988:
|  Syncing INBOX: Gmail -> MappedIMAP
| Thread-989:
|  Copy message 341595 (1 of 2) RemoteGmail:INBOX -> LocalGmail
|  Copy message 341596 (2 of 2) RemoteGmail:INBOX -> LocalGmail
| Thread-988:
|  Copy message 341595 (1 of 2) RemoteGmail:INBOX -> LocalGmail
|  Copy message 341596 (2 of 2) RemoteGmail:INBOX -> LocalGmail
| Thread-989:
|  Deleting 3 messages (341591:341592,341594) in Gmail[INBOX]
| Thread-988:
|  Deleting 3 messages (341591:341592,341594) in Gmail[INBOX]
| Thread-989:
|  Adding flag S to 1 messages on INBOX
| Thread-988:
|  Adding flag S to 1 messages on INBOX
|  Syncing INBOX: Gmail -> MappedIMAP
|  Copy message -2 (1 of 2) LocalGmail:INBOX -> RemoteGmail
|  Copy message -1 (2 of 2) LocalGmail:INBOX -> RemoteGmail
|  Adding flag S to 1 messages on INBOX
| Account sync GMAIL:
|  Next refresh in 10.0 minutes
< SNIP ~ 4 minutes >
In this 4 minute window, imapfilter was run.
| Account sync McGill:
|  Next refresh in 8.0 minutes
| Thread-988:
|  ERROR: ERROR in syncfolder for GMAIL folder INBOX: Traceback (most recent 
call last):
|   File "/usr/lib/python2.7/dist-packages/offlineimap/accounts.py", line 388, 
in syncfolder
|     if localfolder.get_uidvalidity() == None:
|   File "/usr/lib/python2.7/dist-packages/offlineimap/folder/IMAP.py", line 
78, in get_uidvalidity
|     "response('UIDVALIDITY') returned [None]!"
| AssertionError: response('UIDVALIDITY') returned [None]!
| 
|   response('UIDVALIDITY') returned [None]!
| Thread-989:
|  Syncing INBOX: Gmail -> MappedIMAP
| Thread-988:
|  Syncing INBOX: Gmail -> MappedIMAP
| Thread-989:
|  Copy message 341599 (1 of 3) RemoteGmail:INBOX -> LocalGmail
|  Copy message 341600 (2 of 3) RemoteGmail:INBOX -> LocalGmail
| Thread-988:
|  Copy message 341599 (1 of 3) RemoteGmail:INBOX -> LocalGmail
| Thread-989:
|  Copy message 341601 (3 of 3) RemoteGmail:INBOX -> LocalGmail
| Thread-988:
|  Copy message 341600 (2 of 3) RemoteGmail:INBOX -> LocalGmail
|  Copy message 341601 (3 of 3) RemoteGmail:INBOX -> LocalGmail
| Thread-989:
|  Deleting 2 messages (341595:341596) in MappedIMAP[INBOX]
|  ERROR: Could not find UID for msg '341595' (f:'INBOX'. This is usually a bad 
thing and should be reported on the mailing list.
|  Deleting 4 messages (341546,341575,341597:341598) in Gmail[INBOX]
| Thread-988:
|  Deleting 2 messages (341595:341596) in MappedIMAP[INBOX]
|  ERROR: Could not find UID for msg '341595' (f:'INBOX'. This is usually a bad 
thing and should be reported on the mailing list.
|  Deleting 4 messages (341546,341575,341597:341598) in Gmail[INBOX]

My offlineimaprc is attached, and is available in its current incarnation 
online[0]

[0] 
https://github.com/ryanakca/ryanakca-dotfiles/blob/011775446e5af983e024b8c8bc0277d0d6ef850d/.offlineimaprc.
 
-- System Information:
Debian Release: wheezy/sid
  APT prefers unstable
  APT policy: (500, 'unstable'), (1, 'experimental')
Architecture: i386 (i686)

Kernel: Linux 3.2.0-3-686-pae (SMP w/4 CPU cores)
Locale: LANG=es_ES.UTF-8, LC_CTYPE=es_ES.UTF-8 (charmap=UTF-8) (ignored: LC_ALL 
set to es_ES.UTF-8)
Shell: /bin/sh linked to /bin/dash

Versions of packages offlineimap depends on:
ii  libjs-sphinxdoc  1.1.3+dfsg-4
ii  python           2.7.3~rc2-1
ii  python2.6        2.6.8-0.1
ii  python2.7        2.7.3-1

Versions of packages offlineimap recommends:
pn  python-sqlite  <none>

Versions of packages offlineimap suggests:
ii  doc-base         0.10.4
pn  python-kerberos  <none>

-- no debconf information
# Sample minimal config file.  Copy this to ~/.offlineimaprc and edit to
# suit to get started fast.

[general]
metadata = ~/.offlineimap
accounts = GMAIL, QueensU, McGillSOCS, McGill
#, GMAIL
pythonfile=~/.offlineimap.py
# EIMEAR
maxsyncaccounts = 5

#### GMAIL Account Settings
[Account GMAIL]
localrepository = LocalGmail
remoterepository = RemoteGmail
autorefresh = 20
quick = 10
presynchook = imapfilter -c /home/ryan/.imapfilter/config.lua
postsynchook = imapfilter -c /home/ryan/.imapfilter/config.lua && 
/home/ryan/bin/run-mailcheck && notmuch new
foldersort = mycmp

[Repository LocalGmail]
#type = Maildir    
#localfolders = ~/.maildb/GMAIL 
#restoreatime = no  
type = IMAP
remotehost = localhost
remoteuser = ryan
remotepass = LOCAL_PASS
folderfilter = lambda folder: folder not in ['[Google Mail]/All Mail'] and not 
folder.startswith('QueensU.')
idlefolders = ['INBOX']

[Repository RemoteGmail]
foldersort = lambda x, y: mycmp(x, y)
type = Gmail
maxconnections = 4
remoteuser = ryana...@gmail.com
remotepass = GMAIL_PASS
spamfolder = [Google Mail]/Spam
trashfolder = [Google Mail]/Bin
cert_fingerprint = f3043dd689a2e7dddfbef82703a6c65ea9b634c1
realdelete = no
folderfilter = lambda folder: folder not in ['[Google Mail]/All Mail'] and not 
folder.startswith('QueensU.')
idlefolders = ['INBOX']

##### QueensU mail
[Account QueensU]
localrepository = LocalQueensU
remoterepository = RemoteQueensU
autorefresh = 20
quick = 10
# presynchook = imapfilter
foldersort = lamba x, y: cmp(x, y)
postsynchook = /home/ryan/bin/run-mailcheck && notmuch new

[Repository RemoteQueensU]
foldersort = lambda x, y: cmp(y, x)
type = IMAP
remoteuser = 9rak
remotehost = mail.queensu.ca
remotepass = QUEENSU_PASS
# Add QueensU prefix when copying to local
nametrans = lambda foldername: 'QueensU.' + foldername

[Repository LocalQueensU]
type = IMAP
remotehost = localhost
remoteuser = ryan
remotepass = LOCAL_PASS
# Only copy folders from local to remote if they start with QueensU
folderfilter = lambda folder: folder.startswith('QueensU.')
# Remove QueensU prefix when copying to remote
nametrans = lambda folder: re.sub('^QueensU.', '', folder)

#### McGillSOCS mail
[Account McGillSOCS]
localrepository = LocalMcGillSOCS
remoterepository = RemoteMcGillSOCS
autorefresh = 20
quick = 10
# presynchook = imapfilter
foldersort = lamba x, y: cmp(x, y)
postsynchook = /home/ryan/bin/run-mailcheck && notmuch new

[Repository RemoteMcGillSOCS]
foldersort = lambda x, y: cmp(y, x)
type = IMAP
remoteuser = ryank
remotehost = mail.cs.mcgill.ca
remotepass = MCGSOCS_PASS
ssl = yes
cert_fingerprint = 207b114fc9cd4a52f586a350a4dfab05c5c7ad8b
# sslcacertfile = /home/ryan/.mutt/certs/mcgillsocs.crt
# Add McGSOCS prefix when copying to local
nametrans = lambda foldername: 'McGSOCS.' + foldername
folderfilter = lambda folder: folder not in ['user.globalspam', 
'user.graduate', 'user.undergraduate']

[Repository LocalMcGillSOCS]
type = IMAP
remotehost = localhost
remoteuser = ryan
remotepass = LOCAL_PASS
# Only copy folders from local to remote if they start with McGSOCS
folderfilter = lambda folder: folder.startswith('McGSOCS.')
# Remove McGSOCS prefix when copying to remote
nametrans = lambda folder: re.sub('^McGSOCS.', '', folder)

#### McGill mail
[Account McGill]
localrepository = LocalMcGill
remoterepository = RemoteMcGill
autorefresh = 20
quick = 10
# presynchook = imapfilter
foldersort = lamba x, y: cmp(x, y)
postsynchook = /home/ryan/bin/run-mailcheck && notmuch new

[Repository RemoteMcGill]
foldersort = lambda x, y: cmp(y, x)
type = IMAP
remoteuser = ryan.kavan...@mail.mcgill.ca
remotehost = exchange.mcgill.ca
remotepass = MCGILL_PASS
remortport = 993
cert_fingerprint = 9f3fc06c357ecfcaaaf0cebedfb8d6b94f0926f6
ssl = yes
# sslcacertfile = /home/ryan/.mutt/certs/mcgillsocs.crt
# Add McGSOCS prefix when copying to local
nametrans = lambda foldername: 'McGill.' + foldername

[Repository LocalMcGill]
type = IMAP
remotehost = localhost
remoteuser = ryan
remotepass = LOCAL_PASS
# Only copy folders from local to remote if they start with McGSOCS
folderfilter = lambda folder: folder.startswith('McGill.')
# Remove McGSOCS prefix when copying to remote
nametrans = lambda folder: re.sub('^McGill.', '', folder)

[mbnames]
enabled = no
filename = .muttrc.mailboxes
header = "mailboxes "
peritem = "+%(foldername)s"
sep = " "
footer = "\n"

[ui.Curses.Blinkenlights]
statuschar = %

Attachment: signature.asc
Description: Digital signature

Reply via email to