From 1dd622488bcea0ad61bfbee36cd3cd9cb1abc3ce Mon Sep 17 00:00:00 2001 From: "Jeroen van Meeuwen (Kolab Systems)" Date: Mon, 10 Feb 2014 12:50:32 +0100 Subject: If authentication fails specifically with a NO_SUCH_OBJECT error, re-attempt authentication after deleting the related entry from cache --- pykolab/auth/ldap/__init__.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) 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]), -- cgit v1.1