2 commits - pykolab/auth

Jeroen van Meeuwen vanmeeuwen at kolabsys.com
Mon Feb 10 12:51:12 CET 2014


 pykolab/auth/ldap/__init__.py   |   15 ++++++++++++++-
 pykolab/auth/ldap/auth_cache.py |   11 +++++++++++
 2 files changed, 25 insertions(+), 1 deletion(-)

New commits:
commit 1dd622488bcea0ad61bfbee36cd3cd9cb1abc3ce
Author: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen at kolabsys.com>
Date:   Mon Feb 10 12:50:32 2014 +0100

    If authentication fails specifically with a NO_SUCH_OBJECT error, re-attempt authentication after deleting the related entry from cache

diff --git a/pykolab/auth/ldap/__init__.py b/pykolab/auth/ldap/__init__.py
index 8572fec..1ba0f3d 100644
--- a/pykolab/auth/ldap/__init__.py
+++ b/pykolab/auth/ldap/__init__.py
@@ -243,8 +243,21 @@ class LDAP(pykolab.base.Base):
                 # Needs to be synchronous or succeeds and continues setting retval
                 # to True!!
                 self.ldap.simple_bind_s(entry_dn, login[1])
+                auth_cache.set_entry(_filter, entry_dn)
                 retval = True
-            except:
+            except ldap.NO_SUCH_OBJECT, errmsg:
+                log.debug(_("Error occured, there is no such object: %r") % (errmsg), level=8)
+                self.bind = False
+                try:
+                    auth_cache.del_entry(_filter)
+                except:
+                    log.error(_("Authentication cache failed to clear entry"))
+                    pass
+
+                return self.authenticate(login, realm)
+
+            except Exception, errmsg:
+                log.debug(_("Exception occured: %r") %(errmsg))
                 try:
                     log.debug(
                             _("Failed to authenticate as user %s") % (login[0]),


commit 1650125059262170e49c93eceea2194c1ad92d99
Author: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen at kolabsys.com>
Date:   Mon Feb 10 12:50:07 2014 +0100

    Allow entries to be deleted, to address stale cache entries

diff --git a/pykolab/auth/ldap/auth_cache.py b/pykolab/auth/ldap/auth_cache.py
index 35fbebb..488deac 100644
--- a/pykolab/auth/ldap/auth_cache.py
+++ b/pykolab/auth/ldap/auth_cache.py
@@ -86,6 +86,11 @@ mapper(Entry, entry_table)
 ## Functions
 ##
 
+def del_entry(key):
+    db = init_db()
+    _entries = db.query(Entry).filter_by(key=key).delete()
+    db.commit()
+
 def get_entry(key):
     db = init_db()
     _entries = db.query(Entry).filter_by(key=key).all()
@@ -113,6 +118,12 @@ def set_entry(key, value):
             )
 
         db.commit()
+    elif len(_entries) == 1:
+        if not _entries[0].value == value:
+            _entries[0].value = value
+
+        _entries[0].last_change = datetime.datetime.now()
+        db.commit()
 
 def purge_entries(db):
     db.query(Entry).filter(Entry.last_change <= (datetime.datetime.now() - datetime.timedelta(1))).delete()




More information about the commits mailing list