| 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 |  |