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

(-)management/univention-directory-manager-modules/modules/univention/admin/handlers/__init__.py (-29 / +32 lines)
 Lines 1239-1273   class simpleLdap(object): Link Here 
1239
1239
1240
		al = self._ldap_addlist()
1240
		al = self._ldap_addlist()
1241
		al.extend(self._ldap_modlist())
1241
		al.extend(self._ldap_modlist())
1242
		m = univention.admin.modules.get(self.module)
1242
		al = self._ldap_object_classes_add(al)
1243
1244
		# evaluate extended attributes
1245
		ocs = set()
1246
		for prop in getattr(m, 'extended_udm_attributes', []):
1247
			ud.debug(ud.ADMIN, ud.INFO, 'simpleLdap._create: info[%s]:%r = %r' % (prop.name, self.has_property(prop.name), self.info.get(prop.name)))
1248
			if prop.syntax == 'boolean' and self.info.get(prop.name) == '0':
1249
				continue
1250
			if self.has_property(prop.name) and self.info.get(prop.name):
1251
				ocs.add(prop.objClass)
1252
1253
		module_options = univention.admin.modules.options(self.module)
1254
		# add object classes of (especially extended) options
1255
		for option in ['default'] + self.options:
1256
			try:
1257
				opt = module_options[option]
1258
			except KeyError:
1259
				ud.debug(ud.ADMIN, ud.INFO, '%r does not specify option %r' % (m.module, option))
1260
				continue
1261
			ocs |= set(opt.objectClasses)
1262
1263
		# remove duplicated object classes
1264
		for i in al:
1265
			key, val = i[0], i[-1]  # might be a triple
1266
			if val and key.lower() == 'objectclass':
1267
				ocs -= set([val] if isinstance(val, basestring) else val)
1268
		if ocs:
1269
			al.append(('objectClass', list(ocs)))
1270
1271
		al = self.call_udm_property_hook('hook_ldap_addlist', self, al)
1243
		al = self.call_udm_property_hook('hook_ldap_addlist', self, al)
1272
1244
1273
		# ensure univentionObject is set
1245
		# ensure univentionObject is set
 Lines 1302-1307   class simpleLdap(object): Link Here 
1302
		self.save()
1274
		self.save()
1303
		return self.dn
1275
		return self.dn
1304
1276
1277
	def _ldap_object_classes_add(self, al):
1278
		m = univention.admin.modules.get(self.module)
1279
		# evaluate extended attributes
1280
		ocs = set()
1281
		for prop in getattr(m, 'extended_udm_attributes', []):
1282
			ud.debug(ud.ADMIN, ud.INFO, 'simpleLdap._create: info[%s]:%r = %r' % (prop.name, self.has_property(prop.name), self.info.get(prop.name)))
1283
			if prop.syntax == 'boolean' and self.info.get(prop.name) == '0':
1284
				continue
1285
			if self.has_property(prop.name) and self.info.get(prop.name):
1286
				ocs.add(prop.objClass)
1287
1288
		module_options = univention.admin.modules.options(self.module)
1289
		# add object classes of (especially extended) options
1290
		for option in ['default'] + self.options:
1291
			try:
1292
				opt = module_options[option]
1293
			except KeyError:
1294
				ud.debug(ud.ADMIN, ud.INFO, '%r does not specify option %r' % (m.module, option))
1295
				continue
1296
			ocs |= set(opt.objectClasses)
1297
1298
		# remove duplicated object classes
1299
		for i in al:
1300
			key, val = i[0], i[-1]  # might be a triple
1301
			if val and key.lower() == 'objectclass':
1302
				ocs -= set([val] if isinstance(val, basestring) else val)
1303
		if ocs:
1304
			al.append(('objectClass', list(ocs)))
1305
1306
		return al
1307
1305
	def _modify(self, modify_childs=1, ignore_license=0, response=None, serverctrls=None):
1308
	def _modify(self, modify_childs=1, ignore_license=0, response=None, serverctrls=None):
1306
		"""Modify the object. Should only be called by :func:`univention.admin.handlers.simpleLdap.modify`."""
1309
		"""Modify the object. Should only be called by :func:`univention.admin.handlers.simpleLdap.modify`."""
1307
		self.exceptions = []
1310
		self.exceptions = []
(-)management/univention-directory-manager-modules/modules/univention/admin/handlers/settings/usertemplate.py (+17 lines)
 Lines 30-35    Link Here 
30
# /usr/share/common-licenses/AGPL-3; if not, see
30
# /usr/share/common-licenses/AGPL-3; if not, see
31
# <https://www.gnu.org/licenses/>.
31
# <https://www.gnu.org/licenses/>.
32
32
33
import six
34
33
from univention.admin.layout import Tab, Group
35
from univention.admin.layout import Tab, Group
34
import univention.admin.filter
36
import univention.admin.filter
35
import univention.admin.handlers
37
import univention.admin.handlers
 Lines 348-353   mapping.register('mailPrimaryAddress', 'mailPrimaryAddress', None, univention.ad Link Here 
348
mapping.register('mailAlternativeAddress', 'mailAlternativeAddress')
350
mapping.register('mailAlternativeAddress', 'mailAlternativeAddress')
349
mapping.register('_options', 'userOptionsPreset')
351
mapping.register('_options', 'userOptionsPreset')
350
352
353
BLACKLISTED_OBJECT_CLASSES = {'inetOrgPerson'}
354
351
355
352
class object(univention.admin.handlers.simpleLdap):
356
class object(univention.admin.handlers.simpleLdap):
353
	module = module
357
	module = module
 Lines 357-362   class object(univention.admin.handlers.simpleLdap): Link Here 
357
		univention.admin.syntax.optionsUsersUser.update_choices()  # woraround: somehow init() didn't do it
361
		univention.admin.syntax.optionsUsersUser.update_choices()  # woraround: somehow init() didn't do it
358
		self.options.extend(self['_options'])
362
		self.options.extend(self['_options'])
359
363
364
	def _ldap_object_classes(self, ml):
365
		ml = super(object, self)._ldap_object_classes(ml)
366
		return self.filter_object_classes(ml)
367
368
	def _ldap_object_classes_add(self, al):
369
		al = super(object, self)._ldap_object_classes_add(al)
370
		return self.filter_object_classes(al)
371
372
	def filter_object_classes(self, ml):
373
		ml = [x for x in ml if x[0] != 'objectClass' or not isinstance(x[-1], six.string_types) or x[-1] not in BLACKLISTED_OBJECT_CLASSES]
374
		ml = [x if x[0] != 'objectClass' and not isinstance(x[-1], (list, tuple)) else list(x[:-1]) + [list(set(x[-1]) - BLACKLISTED_OBJECT_CLASSES)] for x in ml]
375
		return ml
376
360
	def _ldap_pre_modify(self):
377
	def _ldap_pre_modify(self):
361
		super(object, self)._ldap_pre_modify()
378
		super(object, self)._ldap_pre_modify()
362
		self['_options'].extend(self.options)
379
		self['_options'].extend(self.options)

Return to bug 51364