]> git.donarmstrong.com Git - debbugs.git/blob - scripts/receive.in
[project @ 2005-07-30 03:22:36 by don]
[debbugs.git] / scripts / receive.in
1 #!/usr/bin/perl
2 # $Id: receive.in,v 1.17 2005/07/24 18:42:41 don Exp $
3 # usage: mail is piped directly into program
4
5 #set umask in order to have group-writable incoming/*
6 #umask(002);
7
8 #load configuration file
9 $config_path = '/etc/debbugs';
10 #$lib_path = '/usr/lib/debbugs';
11
12 require "$config_path/config";
13 $ENV{'PATH'} = '/usr/lib/debbugs:'.$ENV{'PATH'};
14
15 #set source of mail delivery
16 #sets any prefix needed to get mailer to add it to error mail
17 if ( $gMailer eq 'exim' ) 
18 {       $gBadEmailPrefix = '';
19         $_ = $ENV{'LOCAL_PART'};
20 } elsif ( $gMailer eq 'qmail' )
21 {       $gBadEmailPrefix = '//';
22         $_ = $ENV{'DEFAULT'};
23 #       $_ = $ENV{'RECIPIENT'};
24 #       s/^\w+-bugs--?//;
25 } else 
26 {       $gBadEmailPrefix = '';
27         $_ = $ARGV[0];
28         s/\>//;
29         s/\<//;
30 }
31 require("/etc/debbugs/text");
32
33 #remove everything from @ to end of line
34 s/\@.*$//;
35
36 #convert remaining upper case to lower case
37 y/A-Z/a-z/;
38
39 #set up to determine command
40 %withbugaddressmap= ('-submit',     'B',
41                    '',            'B',
42                    '-maintonly',  'M',
43                    '-quiet',      'Q',
44                    '-forwarded',  'F',
45                    '-done',       'D',
46                    '-close',      'D',
47                    '-request',    'R',
48                    '-submitter',  'U',
49                    # Used for bug subscription
50                    #'-list-nothing-will-match-this', 'L',
51                     );
52
53 %withpkgaddressmap= ('-request',     'R');
54
55 %withoutaddressmap= ('submit',     'B',
56                       'bugs',       'B',
57                       'maintonly',  'M',
58                       'quiet',      'Q',
59                       'forwarded',  'F',
60                       'done',       'D',
61                       'close',      'D',
62                       'request',    'R',
63                       'submitter',  'U',
64                       'control',    'C');
65
66 #determine command
67 if (s/^(\d{1,9})\b//) {
68     $bugnumber= $1;
69     if (not exists $withbugaddressmap{$_} and
70 /-(?:(?:un)?subscribe|subhelp|ignore|(?:sub(?:yes|approve|reject)
71  |unsubyes|bounce|probe|approve|reject|
72  setlistyes|setlistsilentyes).*)/x
73        ) {
74          $map = 'L';
75     }
76     else {
77          $map= $withbugaddressmap{$_};
78     }
79     $addrrec= "$bugnumber$_";
80 } elsif (s/^(\w+)-//) {
81     $bugnumber= $1;
82     $map= $withpkgaddressmap{"-$_"};
83     $addrrec= "$bugnumber-$_";
84 } else {
85     $bugnumber= '';
86     $map= $withoutaddressmap{$_};
87     $addrrec= "$_";
88 }
89
90 #print no command received
91 if (!defined($map)) {
92     print STDERR <<ENDTEXT;
93 $gBadEmailPrefix
94 $gBadEmailPrefix Unknown $gBug service address $_\@$gEmailDomain.
95 $gBadEmailPrefix Recognised addresses are:
96 $gBadEmailPrefix
97 $gBadEmailPrefix     General:       Read $gBug# in Subject:    $gBug# is NNNN:
98 $gBadEmailPrefix
99 $gBadEmailPrefix      request        submit  $gBug             NNNN  NNNN-submit
100 $gBadEmailPrefix      control        maintonly                NNNN-maintonly
101 $gBadEmailPrefix      owner          quiet                    NNNN-quiet
102 $gBadEmailPrefix      postmaster     forwarded                NNNN-forwarded
103 $gBadEmailPrefix                     done  close              NNNN-done  NNNN-close
104 $gBadEmailPrefix                     submitter                NNNN-submitter
105 $gBadEmailPrefix
106 $gBadEmailPrefix (all \@$gEmailDomain.)
107 $gBadEmailPrefix
108 $gBadEmailPrefix For instructions via the WWW see:
109 $gBadEmailPrefix   http://$gWebDomain/
110 $gBadEmailPrefix   http://$gWebDomain/Reporting$gHTMLSuffix
111 $gBadEmailPrefix   http://$gWebDomain/Developer$gHTMLSuffix
112 $gBadEmailPrefix   http://$gWebDomain/Access$gHTMLSuffix
113 $gTextInstructions
114 $gBadEmailPrefix For details of how to access $gBug report logs by email:
115 $gBadEmailPrefix   send \`request\@$gEmailDomain' the word \`help'
116 $gBadEmailPrefix
117 ENDTEXT
118     exit(100);
119 }
120
121 @months=qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec);
122 ($sec,$min,$hour,$mday,$mon,$year)= gmtime(time);
123
124 $queue= "$map$bugnumber";
125
126 chdir("$gSpoolDir/incoming") || &failure("chdir to spool: $!");
127
128 $id= time.$$;
129 open(FILE,">T.$id") || &failure("open temporary file: $!");
130 printf(FILE "Received: (at %s) by $gEmailDomain; %d %s %d %02d:%02d:%02d +0000\n",
131        $addrrec, $mday,$months[$mon],$year+1900, $hour,$min,$sec) ||
132     &failure("write header to temporary file: $!");
133 while(<STDIN>) { print(FILE) || &failure("write temporary file: $!"); }
134 close(FILE) || &failure("close temporary file: $!");
135
136 my $prefix;
137 if ($gSpamScan) {
138     $prefix = 'S';
139 } else {
140     $prefix = 'I';
141 }
142 rename("T.$id","$prefix$queue.$id") || &failure("rename spool message: $!");
143
144 exit(0);
145
146 sub failure {
147     length($id) && unlink("T.$id");
148     print STDERR "bugs receive failure: @_\n";
149     exit(75); # EX_TEMPFAIL
150 }