Changeset 202


Ignore:
Timestamp:
05/27/08 22:43:52 (13 years ago)
Author:
bas
Message:

email2trac.py.in:

  • added set_ticket_fields function, #55
  • added option -t,--ticket_prefix, #55
  • removed obsolete code

run_email2trac.c:

  • added some patches from redhat
Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/ChangeLog

    r200 r202  
    99          Author: andrei2102 add gmail dot com
    1010          Applied by: Bas van der Vlies
     11
     12        * Added new command line option -n/--dry-run. This option only show
     13          what commands will be executed.
     14          Author: Bas van der Vlies
     15
     16        * the default values for tickets can now also be set in
     17          'email2trac.conf'. So you can use different values when an email
     18          is converted to a ticket. The ticket value is set to this rules
     19            - email2trac.conf
     20            - trac.ini
     21
     22       
     23
    1124
    12252008-02-04
  • trunk/email2trac.py.in

    r201 r202  
    478478                return result
    479479
    480         def update_ticket_fields(self, ticket, user_dict):
    481                 """
    482                 This will update the ticket fields when supplied via
    483                 the subject mail line. It will only update the ticket
    484                 field:
     480        def update_ticket_fields(self, ticket, user_dict, use_default=None):
     481                """
     482                This will update the ticket fields. It will check if the
     483                given fields are known and if the right values are specified
     484                It will only update the ticket field value:
    485485                        - If the field is known
    486                         - If the value supplied is valid for the ticket field
    487                         - Else we skip it and no error is given
     486                        - If the value supplied is valid for the ticket field.
     487                          If not then there are two options:
     488                           1) Skip the value (use_default=None)
     489                           2) Set default value for field (use_default=1)
    488490                """
    489491
     
    504506                #
    505507                for field,value in user_dict.items():
    506                         if self.DEBUG >= 5:
    507                                 print  'user field : %s=%s' %(field,value)
     508                        if self.DEBUG >= 10:
     509                                print  'user_field\t %s = %s' %(field,value)
    508510
    509511                        if sys_dict.has_key(field):
    510                                 if self.DEBUG >= 5:
    511                                         print  'sys field  : ', sys_dict[field]
    512512
    513513                                # Check if value is an allowed system option, if TypeError then
     
    517517                                        if value in sys_dict[field]:
    518518                                                ticket[field] = value
     519                                        else:
     520                                                # Must we set a default if value is not allowed
     521                                                #
     522                                                if use_default:
     523                                                        value = self.get_config('ticket', 'default_%s' %(field) )
     524                                                        ticket[field] = value
    519525
    520526                                except TypeError:
    521527                                        ticket[field] = value
     528
     529                                if self.DEBUG >= 10:
     530                                        print  'ticket_field\t %s = %s' %(field,  ticket[field])
    522531                                       
    523532        def ticket_update(self, m):
     
    527536                creating a new one.
    528537                """
     538                global DRY_RUN
     539
    529540                if not m['Subject']:
    530541                        return False
     
    603614                return True
    604615
    605         def new_ticket(self, msg, component):
     616        def set_ticket_fields(self, ticket):
     617                """
     618                set the ticket fields to value specified
     619                        - /etc/email2trac.conf with <prefix>_<field>
     620                        - trac default values, trac.ini
     621                """
     622                user_dict = dict()
     623
     624                for field in ticket.fields:
     625
     626                        name = field['name']
     627
     628                        # default trac value
     629                        #
     630                        value = self.get_config('ticket', 'default_%s' %(name) )
     631                        if self.DEBUG > 10:
     632                                print 'trac.ini name %s = %s' %(name, value)
     633
     634                        prefix = settings['ticket_prefix']
     635                        try:
     636                                value = settings['%s_%s' %(prefix, name)]
     637                                if self.DEBUG > 10:
     638                                        print 'email2trac.conf %s = %s ' %(name, value)
     639
     640                        except KeyError, detail:
     641                                pass
     642               
     643                        if self.DEBUG:
     644                                print 'user_dict[%s] = %s' %(name, value)
     645
     646                        user_dict[name] = value
     647
     648                self.update_ticket_fields(ticket, user_dict, use_default=1)
     649
     650                # Set status ticket
     651                #`
     652                ticket['status'] = 'new'
     653
     654
     655
     656        def new_ticket(self, msg):
    606657                """
    607658                Create a new ticket
    608659                """
    609660                tkt = Ticket(self.env)
    610                 tkt['status'] = 'new'
     661
     662                self.set_ticket_fields(tkt)
    611663
    612664                # Some defaults
    613665                #
    614                 tkt['milestone'] = self.get_config('ticket', 'default_milestone')
    615                 tkt['priority'] = self.get_config('ticket', 'default_priority')
    616                 tkt['severity'] = self.get_config('ticket', 'default_severity')
    617                 tkt['version'] = self.get_config('ticket', 'default_version')
    618 
    619                 tkt['type'] = self.get_config('ticket', 'default_type')
     666                #tkt['status'] = 'new'
     667                #tkt['milestone'] = self.get_config('ticket', 'default_milestone')
     668                #tkt['priority'] = self.get_config('ticket', 'default_priority')
     669                #tkt['severity'] = self.get_config('ticket', 'default_severity')
     670                #tkt['version'] = self.get_config('ticket', 'default_version')
     671                #tkt['type'] = self.get_config('ticket', 'default_type')
     672
     673                # Old style setting for component, will be removed
     674                #
    620675                if settings.has_key('component'):
    621676                        tkt['component'] = settings['component']
    622                 else:
    623                         tkt['component'] = self.get_config('ticket', 'default_component')
    624                         tkt['component'] = component
    625677
    626678                if not msg['Subject']:
     
    629681                        tkt['summary'] = self.email_to_unicode(msg['Subject'])
    630682
    631 
    632                 # Set default owner for component, HvB
    633                 # Is not necessary, because if component is set. The trac code
    634                 # will find the owner:
    635                 #
    636                 # self.set_owner(tkt)
    637683
    638684                self.set_reply_fields(tkt, msg)
     
    686732
    687733                if self.notification:
    688                         self.notify(tkt, True)
    689                         #self.notify(tkt, False)
     734                        if DRY_RUN:
     735                                print 'DRY_RUN: self.notify(tkt, True)'
     736                        else:
     737                                self.notify(tkt, True)
     738                                #self.notify(tkt, False)
    690739
    691740        def parse(self, fp):
     
    710759            # If component is true then we drop the message drop message
    711760                #
    712                 component =  self.spam(m)
    713                 if component == True:
     761                if self.spam(m) == True:
    714762                        return False
    715763
     
    726774                                return True
    727775
    728                 self.new_ticket(m, component)
     776                self.new_ticket(m)
    729777
    730778        def strip_signature(self, text):
     
    10491097        # Default config file
    10501098        #
     1099        global DRY_RUN
     1100
    10511101        configfile = '@email2trac_conf@'
    10521102        project = ''
    10531103        component = ''
     1104        ticket_prefix = 'default'
     1105
    10541106        ENABLE_SYSLOG = 0
    10551107
    1056         SHORT_OPT = ''chf:np:'
    1057         LONG_OPT  =  ['component=', 'dry-run', 'help', 'file=', 'project=']
    1058 
    1059         global DRY_RUN
    1060                
     1108        SHORT_OPT = 'chf:np:t:'
     1109        LONG_OPT  =  ['component=', 'dry-run', 'help', 'file=', 'project=', 'ticket_prefix=']
     1110
    10611111        try:
    10621112                opts, args = getopt.getopt(sys.argv[1:], SHORT_OPT, LONG_OPT)
     
    10791129                elif opt in ['-p', '--project']:
    10801130                        project_name = value
     1131                elif opt in ['-t', '--ticket_prefix']:
     1132                        ticket_prefix = value
    10811133       
    10821134        settings = ReadConfig(configfile, project_name)
     
    10881140        if component:
    10891141                settings['component'] = component
     1142
     1143        # The default prefix for ticket values in email2trac.conf
     1144        #
     1145        settings['ticket_prefix'] = ticket_prefix
    10901146       
    10911147        if settings.has_key('trac_version'):
  • trunk/run_email2trac.c

    r130 r202  
    5555  int status;
    5656
    57   char   *trac_script;
    5857  char   **trac_script_args;
    5958  struct passwd *TRAC;
    6059  struct passwd *MTA;
    6160  struct stat script_attrs;
     61  const char *trac_script = TRAC_SCRIPT_PATH "/" TRAC_SCRIPT_NAME;
    6262 
    63   trac_script = malloc((strlen(TRAC_SCRIPT_PATH)
    64         + strlen(TRAC_SCRIPT_NAME) + 10) * sizeof(char));
    65 
    66   strncat(trac_script,TRAC_SCRIPT_PATH, strlen(TRAC_SCRIPT_PATH));
    67   strcat(trac_script,"/");
    68   strncat(trac_script,TRAC_SCRIPT_NAME, strlen(TRAC_SCRIPT_NAME));
    69 
    7063  /*
    7164  printf("trac_script = %s\n", trac_script);
     
    7467  /* First copy arguments passed to the wrapper as scripts arguments
    7568     after filtering out some of the possible script options */
     69
    7670  trac_script_args = (char**) malloc((argc+1)*sizeof(char*));
     71  if (trac_script_args == NULL) {
     72    if ( DEBUG ) printf("malloc failed\n");
     73    return 1;
     74  }
    7775  trac_script_args[0] = TRAC_SCRIPT_NAME;
    7876  for (i=j=1; i<argc; i++) {
     
    109107  check_username(TRAC_USER);
    110108  if ( TRAC = getpwnam(TRAC_USER) ) {
    111     setgid(TRAC->pw_gid);
    112     setuid(TRAC->pw_uid);
     109    if (setgid(TRAC->pw_gid) || setuid(TRAC->pw_uid)) {
     110      if ( DEBUG ) printf("setgid or setuid failed\n");
     111      return -5;
     112    }
    113113  } else {
    114114    if ( DEBUG ) printf("Invalid Trac user (%s)\n",TRAC_USER);
Note: See TracChangeset for help on using the changeset viewer.