]> code.delx.au - offlineimap/blobdiff - offlineimap/imapserver.py
Merge branch 'master' of http://git.complete.org/offlineimap
[offlineimap] / offlineimap / imapserver.py
index f295743646cfb8f6ef2fe93f7fd4c77b403f2b03..d18ed961130c989d3cb5b67f9b8506153b6b3fc9 100644 (file)
@@ -274,6 +274,7 @@ class IMAPServer:
                         try:
                             imapobj.authenticate('GSSAPI', self.gssauth)
                         except imapobj.error, val:
+                            self.gssapi = False
                             UIBase.getglobalui().debug('imap',
                                 'GSSAPI Authentication failed')               
                         else:
@@ -334,6 +335,10 @@ class IMAPServer:
         self.assignedconnections = []
         self.availableconnections = []
         self.lastowner = {}
+        # reset kerberos state
+        self.gss_step = self.GSS_STATE_STEP
+        self.gss_vc = None
+        self.gssapi = False
         self.connectionlock.release()
 
     def keepalive(self, timeout, event):
@@ -401,8 +406,8 @@ class IdleThread(object):
 
     def noop(self):
         imapobj = self.parent.acquireconnection()
-        self.event.wait()
         imapobj.noop()
+        self.event.wait()
         self.parent.releaseconnection(imapobj)
 
     def dosync(self):
@@ -429,7 +434,10 @@ class IdleThread(object):
                     self.needsync = True
                     self.event.set()
             imapobj = self.parent.acquireconnection()
-            imapobj.idle(callback=callback)
+            if "IDLE" in imapobj.capabilities:
+                imapobj.idle(callback=callback)
+            else:
+                imapobj.noop()
             self.event.wait()
             if self.event.isSet():
                 imapobj.noop()