From c305d63e005c8ca1ae57f1ec54f023e0d0069824 Mon Sep 17 00:00:00 2001 From: Florian Friesdorf Date: Thu, 12 Jul 2007 04:44:11 +0100 Subject: [PATCH] fix behaviour for delete/expunge, when lacking rights This patch maneuvers around python imaplib's mysterious read-only detection algorithm and correctly calls the UI's deletetoreadonly(), when trying to delete/expunge in a mailbox without having the necessary rights. --- offlineimap/folder/IMAP.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/offlineimap/folder/IMAP.py b/offlineimap/folder/IMAP.py index 12a9660..df1b329 100644 --- a/offlineimap/folder/IMAP.py +++ b/offlineimap/folder/IMAP.py @@ -424,12 +424,17 @@ class IMAPFolder(BaseFolder): self.addmessagesflags_noconvert(uidlist, ['T']) imapobj = self.imapserver.acquireconnection() try: - try: - imapobj.select(self.getfullname()) - except imapobj.readonly: + # Making sure, that we have the necessary rights + # ensuring that we access readonly: python's braindead imaplib.py + # otherwise might raise an exception during the myrights() call + imapobj.select(self.getfullname(),readonly=1) + if not 'd' in imapobj.myrights(self.getfullname())[1][0].split()[1]: + # no delete/expunge rights UIBase.getglobalui().deletereadonly(self, uidlist) return + if self.expunge: + imapobj.select(self.getfullname()) assert(imapobj.expunge()[0] == 'OK') finally: self.imapserver.releaseconnection(imapobj)