diff --git a/base/univention-python/modules/uldap.py b/base/univention-python/modules/uldap.py index a6e97b1a41..224e26e59c 100644 --- a/base/univention-python/modules/uldap.py +++ b/base/univention-python/modules/uldap.py @@ -890,7 +890,7 @@ class access: if isLDAPUrl(ldap_url): conn_str = LDAPUrl(ldap_url).initializeUrl() - lo_ref = ldap.ldapobject.ReconnectLDAPObject(conn_str, trace_stack_limit=None) + lo_ref = ldap.ldapobject.ReconnectLDAPObject(conn_str, trace_stack_limit=None, retry_max=self.client_connection_attempt, retry_delay=1) if self.ca_certfile: lo_ref.set_option(ldap.OPT_X_TLS_CACERTFILE, self.ca_certfile) diff --git a/management/univention-directory-manager-modules/modules/univention/admin/uldap.py b/management/univention-directory-manager-modules/modules/univention/admin/uldap.py index 28d3622334..ac25ef0d58 100644 --- a/management/univention-directory-manager-modules/modules/univention/admin/uldap.py +++ b/management/univention-directory-manager-modules/modules/univention/admin/uldap.py @@ -127,17 +127,25 @@ def getBaseDN(host='localhost', port=None, uri=None): # type: (str, Optional[in :returns: The distinguished name of the LDAP root. :rtype: str """ + try: + client_retry_count = int(configRegistry.get('ldap/client/retry/count', 10)) + except ValueError: + univention.debug.debug(univention.debug.LDAP, univention.debug.ERROR, "Unable to read ldap/client/retry/count, please reset to an integer value") + client_retry_count = 10 + + client_connection_attempt = client_retry_count + 1 + if not uri: if not port: port = int(configRegistry.get('ldap/server/port', 7389)) uri = "ldap://%s:%s" % (host, port) try: - lo = ldap.ldapobject.ReconnectLDAPObject(uri, trace_stack_limit=None) + lo = ldap.ldapobject.ReconnectLDAPObject(uri, trace_stack_limit=None, retry_max=client_connection_attempt, retry_delay=1) result = lo.search_s('', ldap.SCOPE_BASE, 'objectClass=*', ['NamingContexts']) return result[0][1]['namingContexts'][0] except ldap.SERVER_DOWN: time.sleep(60) - lo = ldap.ldapobject.ReconnectLDAPObject(uri, trace_stack_limit=None) + lo = ldap.ldapobject.ReconnectLDAPObject(uri, trace_stack_limit=None, retry_max=client_connection_attempt, retry_delay=1) result = lo.search_s('', ldap.SCOPE_BASE, 'objectClass=*', ['NamingContexts']) return result[0][1]['namingContexts'][0]