]> code.delx.au - offlineimap/commitdiff
fixes behaviour when changing flags, without corresp. rights (s,d,w)
authorFlorian Friesdorf <flow@mytum.de>
Thu, 12 Jul 2007 04:08:47 +0000 (05:08 +0100)
committerFlorian Friesdorf <flow@mytum.de>
Thu, 12 Jul 2007 04:08:47 +0000 (05:08 +0100)
offlineimap/folder/IMAP.py

index df1b3297cb2afb9b125a3af827ceabc483ee6936..0ab8892029ca501f91908fe54c642af3fa57cf97 100644 (file)
@@ -365,9 +365,24 @@ class IMAPFolder(BaseFolder):
         
         imapobj = self.imapserver.acquireconnection()
         try:
+            # 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)
+            myrights = imapobj.myrights(self.getfullname())[1][0].split()[1]
+           if 'T' in flags and not 'd' in myrights or \
+                   'S' in flags and not 's' in myrights or \
+                   filter(lambda x: x not in 'TS', flags) and not 'w' in myrights:
+               # no delete/expunge right, but needed or
+               # no store seen right, but needed or
+               # no write right, but needed
+                UIBase.getglobalui().flagstoreadonly(self, uidlist, flags)
+                return
+
             try:
                 imapobj.select(self.getfullname())
             except imapobj.readonly:
+               # unsure, whether this can be reached
                 UIBase.getglobalui().flagstoreadonly(self, uidlist, flags)
                 return
             r = imapobj.uid('store',