diff --git a/ldapuserdir/ldapuserdir.py b/ldapuserdir/ldapuserdir.py index 95431a0..9a0d633 100644 --- a/ldapuserdir/ldapuserdir.py +++ b/ldapuserdir/ldapuserdir.py @@ -101,6 +101,10 @@ class LdapUserDir(object): attrlist=None, attrsonly=0, recon_attempts = 2): """ wrapper of standard ldap.search_s synchronous search that tries to reconnect + + Implemented that myself since the use of the automatic reconnect + available (ReconnectLDAPObject) led to a connection that returned + empty answers. This way I have more control. """ attempts = 0 ok = False @@ -113,12 +117,27 @@ class LdapUserDir(object): except ldap.SERVER_DOWN: self.logger.warning("Got ldap server down: Reconnecting (try %s)" % attempts) + try: + del self._ldap + except Exception, err: + self.logger.warning("failed to delete LDAP object: %s" + % str(err)) + + time.sleep(1) + try: self._ldap = ldap.initialize(self.serverurl, trace_level=0, trace_file=sys.stderr) except ldap.SERVER_DOWN: - self.logger.warning("ldap initialization error") - time.sleep(1) + self.logger.warning("ldap initialization error" + + ", server down (server: %s)" % + self.serverurl + + ": %s" % str(err)) + except Exception, err: + self.logger.warning("ldap initialization error" + + " (server: %s)" % + self.serverurl + + ": %s" % str(err)) if attempts >= recon_attempts: raise