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

(-)a/management/univention-directory-manager-modules/modules/univention/admin/handlers/__init__.py (-17 / +23 lines)
Lines 1507-1529 class simpleLdap(object): Link Here
1507
		self.call_udm_property_hook('hook_ldap_pre_remove', self)
1507
		self.call_udm_property_hook('hook_ldap_pre_remove', self)
1508
1508
1509
		if remove_childs:
1509
		if remove_childs:
1510
			subelements = []  # type: List[Tuple[str, Dict[str, List[str]]]]
1510
			# remove twice: after the first removal some objects may be left over
1511
			if 'FALSE' not in self.lo.getAttr(self.dn, 'hasSubordinates'):
1511
			# a primary group can only be removed if all its members have been removed.
1512
				ud.debug(ud.ADMIN, ud.INFO, 'handlers/__init__._remove() children of base dn %s' % (self.dn,))
1512
			self._remove_subtree()
1513
				subelements = self.lo.search(base=self.dn, scope='one', attr=[])
1513
			self._remove_subtree()
1514
1515
			for subolddn, suboldattrs in subelements:
1516
				ud.debug(ud.ADMIN, ud.INFO, 'remove: subelement %s' % (subolddn,))
1517
				for submodule in univention.admin.modules.identify(subolddn, suboldattrs):
1518
					subobject = submodule.object(None, self.lo, None, dn=subolddn, attributes=suboldattrs)
1519
					subobject.open()
1520
					try:
1521
						subobject.remove(remove_childs)
1522
					except univention.admin.uexceptions.base as exc:
1523
						ud.debug(ud.ADMIN, ud.ERROR, 'remove: could not remove %r: %s: %s' % (subolddn, type(exc).__name__, exc))
1524
					break
1525
				else:
1526
					ud.debug(ud.ADMIN, ud.WARN, 'remove: could not identify UDM module of %r' % (subolddn,))
1527
1514
1528
		self.lo.delete(self.dn)
1515
		self.lo.delete(self.dn)
1529
		self._exists = False
1516
		self._exists = False
Lines 1535-1540 class simpleLdap(object): Link Here
1535
		self._write_admin_diary_remove()
1522
		self._write_admin_diary_remove()
1536
		self.save()
1523
		self.save()
1537
1524
1525
	def _remove_subtree(self):
1526
		subelements = []  # type: List[Tuple[str, Dict[str, List[str]]]]
1527
		if 'FALSE' not in self.lo.getAttr(self.dn, 'hasSubordinates'):
1528
			ud.debug(ud.ADMIN, ud.INFO, 'handlers/__init__._remove() children of base dn %s' % (self.dn,))
1529
			subelements = self.lo.search(base=self.dn, scope='one', attr=[])
1530
1531
		for subolddn, suboldattrs in subelements:
1532
			ud.debug(ud.ADMIN, ud.INFO, 'remove: subelement %s' % (subolddn,))
1533
			for submodule in univention.admin.modules.identify(subolddn, suboldattrs):
1534
				subobject = submodule.object(None, self.lo, None, dn=subolddn, attributes=suboldattrs)
1535
				subobject.open()
1536
				try:
1537
					subobject.remove(remove_childs=True)
1538
				except univention.admin.uexceptions.base as exc:
1539
					ud.debug(ud.ADMIN, ud.ERROR, 'remove: could not remove %r: %s: %s' % (subolddn, type(exc).__name__, exc))
1540
				break
1541
			else:
1542
				ud.debug(ud.ADMIN, ud.WARN, 'remove: could not identify UDM module of %r' % (subolddn,))
1543
1538
	def _write_admin_diary_remove(self):
1544
	def _write_admin_diary_remove(self):
1539
		self._write_admin_diary_event('REMOVED')
1545
		self._write_admin_diary_event('REMOVED')
1540
1546

Return to bug 37685