diff --git a/ucs-4.0-1/management/univention-directory-manager-modules/modules/univention/admin/uldap.py b/ucs-4.0-1/management/univention-directory-manager-modules/modules/univention/admin/uldap.py index c7a333d..bb4fd72 100644 --- a/ucs-4.0-1/management/univention-directory-manager-modules/modules/univention/admin/uldap.py +++ b/ucs-4.0-1/management/univention-directory-manager-modules/modules/univention/admin/uldap.py @@ -83,6 +83,8 @@ def _err2str(err): msgs.append('%(desc)s: %(info)s' % iarg) elif 'desc' in iarg: msgs.append(str(iarg['desc'])) + if not msgs: + msgs.append(str(err)) return '. '.join(msgs) class domain: @@ -370,10 +372,6 @@ def searchDn(self, filter='(objectClass=*)', base='', scope='sub', unique=0, req except ldap.FILTER_ERROR as msg: raise univention.admin.uexceptions.ldapError('%s: %s' % (_err2str(msg), filter)) except ldap.LDAPError, msg: - # workaround for bug 14827 ==> msg tuple seems to be empty - if not msg: - univention.debug.debug(univention.debug.ADMIN, univention.debug.ERROR, 'uldap.searchDn: ldapError occured: msg=' % str(msg)) - raise univention.admin.uexceptions.ldapError, str(msg) raise univention.admin.uexceptions.ldapError(_err2str(msg), original_exception=msg) def getPolicies( self, dn, policies = None, attrs = None, result = None, fixedattrs = None ): diff --git a/ucs-4.0-1/management/univention-management-console-module-udm/umc/python/udm/udm_ldap.py b/ucs-4.0-1/management/univention-management-console-module-udm/umc/python/udm/udm_ldap.py index 93e1fb4..9b3f129 100644 --- a/ucs-4.0-1/management/univention-management-console-module-udm/umc/python/udm/udm_ldap.py +++ b/ucs-4.0-1/management/univention-management-console-module-udm/umc/python/udm/udm_ldap.py @@ -99,9 +99,8 @@ def do_ldap_stuff(arg1, arg2, ldap_connection=None, ldap_position=None): ldap_connection.searchDn(..., position=ldap_position) ... """ - def wrapper_func(*args, **kwargs): - global _ldap_connection, _ldap_position, _user_dn, _password, _licenseCheck - + def _get_user_connection(): + global _licenseCheck if _ldap_connection is None: MODULE.info('Opening LDAP connection for user %s' % _user_dn) lo = udm_uldap.access(host=ucr.get('ldap/master'), base=ucr.get('ldap/base'), binddn=_user_dn, bindpw=_password) @@ -132,23 +131,27 @@ def wrapper_func(*args, **kwargs): MODULE.info('Using open LDAP connection for user %s' % _user_dn) lo = _ldap_connection po = _ldap_position + return lo, po + def _func(*args, **kwargs): + global _ldap_connection, _ldap_position + lo, po = _get_user_connection() kwargs['ldap_connection'] = lo kwargs['ldap_position'] = po + ret = func(*args, **kwargs) + _ldap_connection = lo + _ldap_position = po + return ret + + def wrapper_func(*args, **kwargs): try: - ret = func(*args, **kwargs) - _ldap_connection = lo - _ldap_position = po - except udm_errors.ldapError: - # workaround to keep the behavior from the past to trigger ldap.SERVER_DOWN exception as admin.uldap maskes it - _lo = udm_uldap.access(host=ucr.get('ldap/master'), base=ucr.get('ldap/base'), binddn=_user_dn, bindpw=_password) - del _lo - raise - except LDAPError: + return _func(*args, **kwargs) + except (LDAPError, udm_errors.ldapError) as exc: + MODULE.warn('Exception during ldap operation (probably timeout): %s' % (exc,)) + global _ldap_connection, _ldap_position _ldap_connection = None _ldap_position = None - raise - return ret + return _func(*args, **kwargs) return error_handler(wrapper_func)