2 commits - pykolab/auth pykolab/imap

Jeroen van Meeuwen vanmeeuwen at kolabsys.com
Wed Nov 19 10:26:36 CET 2014


 pykolab/auth/ldap/__init__.py |   18 +++++++++++++++---
 pykolab/imap/__init__.py      |   31 +++++++++++++++++++------------
 2 files changed, 34 insertions(+), 15 deletions(-)

New commits:
commit 7c3b90e63d6479393b5ad92248cc58b45c75587c
Author: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen at kolabsys.com>
Date:   Wed Nov 19 10:25:57 2014 +0100

    Fix execution of change_delete_%s() resulting in a traceback (#3939)

diff --git a/pykolab/auth/ldap/__init__.py b/pykolab/auth/ldap/__init__.py
index c71c397..c5b98c3 100644
--- a/pykolab/auth/ldap/__init__.py
+++ b/pykolab/auth/ldap/__init__.py
@@ -1421,13 +1421,19 @@ class LDAP(pykolab.base.Base):
         """
         self._change_delete_unknown(entry, change)
 
+    def _change_delete_resource(self, entry, change):
+        pass
+
+    def _change_delete_role(self, entry, change):
+        pass
+
     def _change_delete_sharedfolder(self, entry, change):
         pass
 
     def _change_delete_unknown(self, entry, change):
         """
             An entry has been deleted, and we do not know of what object type
-            the entry was - user, group, role or sharedfolder.
+            the entry was - user, group, resource, role or sharedfolder.
         """
         result_attribute = conf.get('cyrus-sasl', 'result_attribute')
 
@@ -1438,10 +1444,16 @@ class LDAP(pykolab.base.Base):
             return None
 
         success = True
-        for _type in ['user','group','role','sharedfolder']:
+        for _type in ['user','group','resource','role','sharedfolder']:
             try:
-                eval("success = self._change_delete_%s(entry, change)" % (_type))
+                success = eval("self._change_delete_%s(entry, change)" % (_type))
+                print success
             except:
+                if conf.debuglevel > 8:
+                    import traceback
+                    log.error(_("%s") % (traceback.format_exc()))
+
+                print success
                 success = False
 
             if success:


commit 1c8e0c420989a5b322cb0605800d0f8299a0e9df
Author: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen at kolabsys.com>
Date:   Wed Nov 19 10:22:43 2014 +0100

    Add a function imap_murder() and use it

diff --git a/pykolab/imap/__init__.py b/pykolab/imap/__init__.py
index 343ff10..ac359a0 100644
--- a/pykolab/imap/__init__.py
+++ b/pykolab/imap/__init__.py
@@ -280,6 +280,12 @@ class IMAP(object):
         else:
             return '/'
 
+    def imap_murder(self):
+        if hasattr(self.imap, 'murder') and self.imap.murder:
+            return True
+        else:
+            return False
+
     def namespaces(self):
         """
             Obtain the namespaces.
@@ -474,20 +480,20 @@ class IMAP(object):
         self.create_folder(folder_name, server)
 
         # In a Cyrus IMAP Murder topology, wait for the murder to have settled
-        if hasattr(self.imap, 'murder') and self.imap.murder:
+        if self.imap_murder():
             self.disconnect()
             self.connect()
 
-        created = False
-        last_log = time.time()
-        while not created:
-            created = self.has_folder(folder_name)
-            if not created:
-                if time.time() - last_log > 5:
-                    log.info(_("Waiting for the Cyrus IMAP Murder to settle..."))
-                    last_log = time.time()
+            created = False
+            last_log = time.time()
+            while not created:
+                created = self.has_folder(folder_name)
+                if not created:
+                    if time.time() - last_log > 5:
+                        log.info(_("Waiting for the Cyrus IMAP Murder to settle..."))
+                        last_log = time.time()
 
-                time.sleep(0.5)
+                    time.sleep(0.5)
 
         _additional_folders = None
 
@@ -546,7 +552,7 @@ class IMAP(object):
         admin_login = conf.get(backend, 'admin_login')
         admin_password = conf.get(backend, 'admin_password')
 
-        if backend == "cyrus-imap" and hasattr(self.imap, 'murder') and self.imap.murder:
+        if self.imap_murder():
             server = self.user_mailbox_server(folder)
         else:
             server = None
@@ -562,13 +568,14 @@ class IMAP(object):
                 (personal, other, shared) = self.namespaces()
                 success = True
             except Exception, errmsg:
-                if time.time() - last_log > 5:
+                if time.time() - last_log > 5 and self.imap_murder():
                     log.debug(_("Waiting for the Cyrus murder to settle... %r") % (errmsg))
                     last_log = time.time()
 
                 if conf.debuglevel > 8:
                     import traceback
                     traceback.print_exc()
+
                 time.sleep(0.5)
 
         for additional_folder in additional_folders.keys():




More information about the commits mailing list