Edgewall Software

Ticket #5858: assignto_via_ldap.diff

File assignto_via_ldap.diff, 3.1 KB (added by Morris, 5 years ago)
  • default_workflow.py

     
    2828from trac.util.compat import set 
    2929from trac.util.translation import _ 
    3030 
     31## these imports are for LDAP group lookup  
     32##    for assign_to dropdown functionality 
     33import active_directory 
     34import threading, pythoncom 
     35 
    3136# -- Utilities for the ConfigurableTicketWorkflow 
    3237 
    3338def parse_workflow_config(rawactions): 
     
    209214                perm = PermissionSystem(self.env) 
    210215                owners = perm.get_users_with_permission('TICKET_MODIFY') 
    211216                owners.sort() 
     217            #### BEGIN LDAP CODE ############################################## 
     218            elif self.config.getbool('ticket','ldap_restrict_owner_by_groups'): 
     219                perm = PermissionSystem(self.env) 
     220                owners = perm.get_users_with_permission('TICKET_MODIFY') 
     221                owners.sort() 
     222                ldap_valid_owner_groups = self.config.getlist('ticket',  
     223                                                    'ldap_valid_owner_groups') 
     224                self.env.log.debug('** restrict_owner_by_ldap_groups = %s' %  
     225                                            str(self.config.getbool('ticket',  
     226                                            'ldap_restrict_owner_by_groups'))) 
     227                self.env.log.debug('** ldap_valid_owner_groups = %s' %  
     228                                            str(ldap_valid_owner_groups)) 
     229                """ 
     230                To fix a bizarro error ultimately caused by the  
     231                active_directory module's use of pywin32 (and pythoncom  
     232                via pywin32) the error will be something like  
     233                "com_error: (-2147221008, 'CoInitialize has not been called.', None, None)" 
     234                http://mail.python.org/pipermail/python-win32/2006-December/005425.html 
     235                """ 
     236                if threading.currentThread().getName() <> 'MainThread': 
     237                    pythoncom.CoInitialize() 
     238                ########### 
     239                all_users = set() 
     240                for cn in ldap_valid_owner_groups: 
     241                    grp = active_directory.find_group(cn) 
     242                    if grp: 
     243                        this_grp_users = set() 
     244                        for group, groups, users in grp.walk (): 
     245                            this_grp_users.update(users) 
     246                        ## weed out ALT accounts 
     247                        this_grp_users = [x for x in this_grp_users if  
     248                                                'ALT' not in x.displayName] 
     249                        all_users.update(this_grp_users) 
     250                ldap_show_user_attribute = self.config.get('ticket',  
     251                                'ldap_show_user_attribute', 'sAMAccountName') 
     252                owners = [getattr(x, ldap_show_user_attribute) for x in all_users] 
     253                owners.sort() 
     254                self.env.log.debug('** owners: %s' % str(owners)) 
     255            #### END LDAP CODE ################################################ 
    212256            else: 
    213257                owners = None 
    214258