From 1db90e6d2b3774dfedb84f7de1e515a767336cee Mon Sep 17 00:00:00 2001 From: Matthias Andree Date: Wed, 26 Dec 2007 23:24:32 +0000 Subject: Fix Berlios Bug #11797, imap_mark_seen doesn't consider expunged messages (and marks the wrong messages seen after expunges, leading to data loss in 'keep flush' configurations). Report and patch by Alexander Cherepanov. Thanks\! svn path=/branches/BRANCH_6-3/; revision=5147 --- NEWS | 8 +++++++- TODO.txt | 1 - imap.c | 4 ++++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/NEWS b/NEWS index 554a99fa..c8f13b9c 100644 --- a/NEWS +++ b/NEWS @@ -52,9 +52,15 @@ fetchmail 6.3.9 (not yet released): fetchmail by default talks SMTP to the localhost, so the overall risk is rather low. This bug was apparently introduced on 1998-11-27 when the bouncemail facility - was modularized. The bug made then its appearance in fetchmail release 4.6.8. + was modularized. The bug then made its appearance in fetchmail release 4.6.8. See also fetchmail-SA-2007-02.txt. +# CRITICAL BUG FIX: +* When expunging, mark the right messages as seen to avoid message loss in "keep + flush" configurations. Workaround for previous versions: "expunge 0". + Report and patch by Alexander Cherepanov - thanks a lot, Berlios Bug #11797, + "imap_mark_seen doesn't consider expunged messages". + # BUG FIXES: * The configure script will additionally check for 'dn_skipname', to fix build failures with µClibc. The new check still recognizes the resolver libraries on diff --git a/TODO.txt b/TODO.txt index 7ff1f69a..721fc194 100644 --- a/TODO.txt +++ b/TODO.txt @@ -1,5 +1,4 @@ soon - MUST: -- BerliOS Bug #11797, imap_mark_seen doesn't consider expunged messages - BerliOS Bug #10972, Fetchmail refetches big messages repeatedly (SMTP listener issue) - report multiline SMTP errors properly (sample in private mail from diff --git a/imap.c b/imap.c index 053b607c..ec097eb5 100644 --- a/imap.c +++ b/imap.c @@ -1240,6 +1240,10 @@ static int imap_mark_seen(int sock, struct query *ctl, int number) /* mark the given message as seen */ { (void)ctl; + + /* expunges change the message numbers */ + number -= expunged; + return(gen_transact(sock, imap_version == IMAP4 ? "STORE %d +FLAGS.SILENT (\\Seen)" -- cgit v1.2.3