View | Details | Raw Unified | Return to bug 42167 | Differences between
and this patch

Collapse All | Expand All

(-)a/ucs-school-lib/python/models/base.py (-2 / +2 lines)
Lines 847-853 class UCSSchoolHelperAbstractClass(object): Link Here
847
		return cls.from_udm_obj(udm_obj, school, lo)
847
		return cls.from_udm_obj(udm_obj, school, lo)
848
848
849
	@classmethod
849
	@classmethod
850
	def get_only_udm_obj(cls, lo, filter_str, superordinate=None):
850
	def get_only_udm_obj(cls, lo, filter_str, superordinate=None, base=None):
851
		'''Returns the one UDM object of class cls._meta.udm_module that
851
		'''Returns the one UDM object of class cls._meta.udm_module that
852
		matches a given filter.
852
		matches a given filter.
853
		If more than one is found, a MultipleObjectsError is raised
853
		If more than one is found, a MultipleObjectsError is raised
Lines 857-863 class UCSSchoolHelperAbstractClass(object): Link Here
857
		if cls._meta.udm_filter:
857
		if cls._meta.udm_filter:
858
			filter_str = '(&(%s)(%s))' % (cls._meta.udm_filter, filter_str)
858
			filter_str = '(&(%s)(%s))' % (cls._meta.udm_filter, filter_str)
859
		logger.debug('Getting %s UDM object by filter: %s', cls.__name__, filter_str)
859
		logger.debug('Getting %s UDM object by filter: %s', cls.__name__, filter_str)
860
		objs = udm_modules.lookup(cls._meta.udm_module, None, lo, scope='sub', base=ucr.get('ldap/base'), filter=str(filter_str), superordinate=superordinate)
860
		objs = udm_modules.lookup(cls._meta.udm_module, None, lo, scope='sub', base=base or ucr.get('ldap/base'), filter=str(filter_str), superordinate=superordinate)
861
		if len(objs) == 0:
861
		if len(objs) == 0:
862
			return None
862
			return None
863
		if len(objs) > 1:
863
		if len(objs) > 1:
(-)a/ucs-school-lib/python/schoolldap.py (-7 / +2 lines)
Lines 443-458 class SchoolBaseModule(Base): Link Here
443
			users = []
443
			users = []
444
			for userdn in set(groupObj['users']):
444
			for userdn in set(groupObj['users']):
445
				try:
445
				try:
446
					user = cls.from_dn(userdn, school, ldap_connection)
446
					udm_obj = cls.get_only_udm_obj(ldap_connection, LDAP_Filter.forUsers(pattern), base=userdn)
447
				except noObject:
447
				except noObject:
448
					continue
448
					continue
449
				if school not in user.schools:
449
				if school not in user.schools:  # TODO: move into filter?!
450
					continue
450
					continue
451
				udm_obj = user.get_udm_object(ldap_connection)
452
				if pattern:
453
					# check if pattern is part of any of user's common properties (case insensitive)
454
					if not any([pattern.lower() in udm_obj.info.get(propertyname, '').lower() for propertyname in LDAP_Filter.forUsersSubMatch]):
455
						continue
456
				users.append(udm_obj)
451
				users.append(udm_obj)
457
		else:
452
		else:
458
			# be aware that this search opens all user objects of specified type and may take some time!
453
			# be aware that this search opens all user objects of specified type and may take some time!

Return to bug 42167