View | Details | Raw Unified | Return to bug 51367
Collapse All | Expand All

(-)a/management/univention-management-console/src/univention/management/console/base.py (-1 / +7 lines)
 Lines 124-130   import univention.admin.uexceptions as udm_errors Link Here 
124
124
125
from univention.management.console.protocol.message import Response, MIMETYPE_JSON
125
from univention.management.console.protocol.message import Response, MIMETYPE_JSON
126
from univention.management.console.protocol.definitions import MODULE_ERR, MODULE_ERR_COMMAND_FAILED, SUCCESS
126
from univention.management.console.protocol.definitions import MODULE_ERR, MODULE_ERR_COMMAND_FAILED, SUCCESS
127
from univention.management.console.ldap import get_user_connection, reset_cache as reset_ldap_connection_cache
127
from univention.management.console.ldap import get_user_connection, reset_cache as reset_ldap_connection_cache, cleanup_connection
128
from univention.management.console.config import ucr
128
from univention.management.console.config import ucr
129
from univention.management.console.log import MODULE, CORE
129
from univention.management.console.log import MODULE, CORE
130
from univention.management.console.error import UMC_Error, NotAcceptable, PasswordRequired, LDAP_ServerDown, LDAP_ConnectionFailed, Unauthorized
130
from univention.management.console.error import UMC_Error, NotAcceptable, PasswordRequired, LDAP_ServerDown, LDAP_ConnectionFailed, Unauthorized
 Lines 161-166   class Base(signals.Provider, Translation): Link Here 
161
		self.__acls = None
161
		self.__acls = None
162
		self.__current_language = None
162
		self.__current_language = None
163
		self.__requests = {}
163
		self.__requests = {}
164
		self.__user_connections = set()
164
		Translation.__init__(self, domain)
165
		Translation.__init__(self, domain)
165
166
166
	def update_language(self, locales):
167
	def update_language(self, locales):
 Lines 400-405   class Base(signals.Provider, Translation): Link Here 
400
			return  # local user (probably root)
401
			return  # local user (probably root)
401
		try:
402
		try:
402
			lo, po = get_user_connection(bind=self.bind_user_connection, write=False, follow_referral=True)
403
			lo, po = get_user_connection(bind=self.bind_user_connection, write=False, follow_referral=True)
404
			self.__user_connections.add(lo)
403
			return lo
405
			return lo
404
		except (ldap.LDAPError, udm_errors.base) as exc:
406
		except (ldap.LDAPError, udm_errors.base) as exc:
405
			CORE.warn('Failed to open LDAP connection for user %s: %s' % (self._user_dn, exc))
407
			CORE.warn('Failed to open LDAP connection for user %s: %s' % (self._user_dn, exc))
 Lines 487-489   class Base(signals.Provider, Translation): Link Here 
487
		if response.id in self.__requests:
489
		if response.id in self.__requests:
488
			self.signal_emit('success', response)
490
			self.signal_emit('success', response)
489
			del self.__requests[response.id]
491
			del self.__requests[response.id]
492
493
	def __del__(self):
494
		for lo in self.__user_connections:
495
			cleanup_connection(lo)
(-)a/management/univention-management-console/src/univention/management/console/ldap.py (+6 lines)
 Lines 114-119   class LDAP(object): Link Here 
114
	def reset_cache(self):
114
	def reset_cache(self):
115
		self.__ldap_connections.clear()
115
		self.__ldap_connections.clear()
116
116
117
	def cleanup_connection(self, lo):
118
		for key, conn in list(self.__ldap_connections.items()):
119
			if conn[0] is lo:
120
				self.__ldap_connections.pop(key, None)
121
117
	def _wrapped(self, func, hash_, connection, loarg, poarg):
122
	def _wrapped(self, func, hash_, connection, loarg, poarg):
118
		def setter(conn):
123
		def setter(conn):
119
			if conn is None:
124
			if conn is None:
 Lines 162-165   get_backup_connection = _LDAP.get_backup_connection Link Here 
162
user_connection = _LDAP.user_connection
167
user_connection = _LDAP.user_connection
163
get_user_connection = _LDAP.get_user_connection
168
get_user_connection = _LDAP.get_user_connection
164
reset_cache = _LDAP.reset_cache
169
reset_cache = _LDAP.reset_cache
170
cleanup_connection = _LDAP.cleanup_connection
165
del _LDAP
171
del _LDAP
(-)a/management/univention-management-console/src/univention/management/console/protocol/session.py (-2 / +6 lines)
 Lines 67-73   from ..config import MODULE_INACTIVITY_TIMER, MODULE_DEBUG_LEVEL, MODULE_COMMAND Link Here 
67
from ..locales import I18N, I18N_Manager
67
from ..locales import I18N, I18N_Manager
68
from ..base import Base
68
from ..base import Base
69
from ..error import UMC_Error, Unauthorized, BadRequest, NotFound, Forbidden, ServiceUnavailable
69
from ..error import UMC_Error, Unauthorized, BadRequest, NotFound, Forbidden, ServiceUnavailable
70
from ..ldap import get_machine_connection, reset_cache
70
from ..ldap import get_machine_connection, reset_cache, cleanup_connection
71
from ..modules.sanitizers import StringSanitizer, DictSanitizer
71
from ..modules.sanitizers import StringSanitizer, DictSanitizer
72
from ..modules.decorators import sanitize, sanitize_args, simple_response, allow_get_request
72
from ..modules.decorators import sanitize, sanitize_args, simple_response, allow_get_request
73
73
 Lines 353-359   class ProcessorBase(Base): Link Here 
353
	def _get_user_favorites(self):
353
	def _get_user_favorites(self):
354
		if not self._user_dn:  # user not authenticated or no LDAP user
354
		if not self._user_dn:  # user not authenticated or no LDAP user
355
			return set(ucr.get('umc/web/favorites/default', '').split(','))
355
			return set(ucr.get('umc/web/favorites/default', '').split(','))
356
		favorites = self._get_user_preferences(self.get_user_ldap_connection()).setdefault('favorites', ucr.get('umc/web/favorites/default', '')).strip()
356
		lo = self.get_user_ldap_connection()
357
		favorites = self._get_user_preferences(lo).setdefault('favorites', ucr.get('umc/web/favorites/default', '')).strip()
358
		cleanup_connection(lo)
357
		return set(favorites.split(','))
359
		return set(favorites.split(','))
358
360
359
	def handle_request_get_categories(self, request):
361
	def handle_request_get_categories(self, request):
 Lines 717-722   class ProcessorBase(Base): Link Here 
717
719
718
	def __del__(self):
720
	def __del__(self):
719
		CORE.process('Processor: dying')
721
		CORE.process('Processor: dying')
722
		super(ProcessorBase, self).__del__()
720
		for process in list(self.__processes.keys()):
723
		for process in list(self.__processes.keys()):
721
			self.__processes.pop(process).__del__()
724
			self.__processes.pop(process).__del__()
722
725
 Lines 943-948   class SessionHandler(ProcessorBase): Link Here 
943
946
944
	def __del__(self):
947
	def __del__(self):
945
		CORE.info('The session is shutting down')
948
		CORE.info('The session is shutting down')
949
		super(SessionHandler, self).__del__()
946
		if self.processor:
950
		if self.processor:
947
			self.processor.__del__()
951
			self.processor.__del__()
948
		self.processor = None
952
		self.processor = None

Return to bug 51367