]> git.donarmstrong.com Git - debbugs.git/blob - scripts/receive.in
[project @ 1999-09-02 19:25:01 by gecko]
[debbugs.git] / scripts / receive.in
1 #!/usr/bin/perl
2
3 #load configuration file
4 require( '/etc/debbugs/config' );
5
6 #set source of mail delivery
7 #sets any prefix needed to get mailer to add it to error mail
8 if ( $gMailer eq 'exim' ) 
9 {       $gBadEmailPrefix = '';
10         $_ = $ENV{'LOCAL_PART'};
11 } elsif ( $gMailer eq 'qmail' )
12 {       $gBadEmailPrefix = '//';
13         $_ = $ENV{'DEFAULT'};
14 #       $_ = $ENV{'RECIPIENT'};
15 #       s/^\w+-bugs--?//;
16 } else 
17 {       $gBadEmailPrefix = '';
18         $_ = $ARGV[0];
19         s/\>//;
20         s/\<//;
21 }
22
23
24 #remove everything from @ to end of line
25 s/\@.*$//;
26
27 #convert remaining upper case to lower case
28 y/A-Z/a-z/;
29
30 #set up to determine command
31 %withnaddressmap= ('-submit',     'B',
32                    '',            'B',
33                    '-maintonly',  'M',
34                    '-quiet',      'Q',
35                    '-forwarded',  'F',
36                    '-done',       'D',
37                    '-close',      'D',
38                    '-submitter',  'U');
39
40 %withoutnaddressmap= ('submit',     'B',
41                       'bugs',       'B',
42                       'maintonly',  'M',
43                       'quiet',      'Q',
44                       'forwarded',  'F',
45                       'done',       'D',
46                       'close',      'D',
47                       'request',    'R',
48                       'submitter',  'U',
49                       'control',    'C');
50
51 #determine command
52 if (s/^(\d{1,9})\b//) {
53     $bugnumber= $1;
54     $map= $withnaddressmap{$_};
55     $addrrec= "$bugnumber$_";
56 } else {
57     $bugnumber= '';
58     $map= $withoutnaddressmap{$_};
59     $addrrec= "$_";
60 }
61
62 #print no command received
63 if (!defined($map)) {
64     print STDERR <<ENDTEXT;
65 $gBadEmailPrefix
66 $gBadEmailPrefix Unknown $gBug service address $_\@$gEmailDomain.
67 $gBadEmailPrefix Recognised addresses are:
68 $gBadEmailPrefix
69 $gBadEmailPrefix     General:       Read $gBug# in Subject:    $gBug# is NNNN:
70 $gBadEmailPrefix
71 $gBadEmailPrefix      request        submit  $gBug             NNNN  NNNN-submit
72 $gBadEmailPrefix      control        maintonly                NNNN-maintonly
73 $gBadEmailPrefix      owner          quiet                    NNNN-quiet
74 $gBadEmailPrefix      postmaster     forwarded                NNNN-forwarded
75 $gBadEmailPrefix                     done  close              NNNN-done  NNNN-close
76 $gBadEmailPrefix                     submitter                NNNN-submitter
77 $gBadEmailPrefix
78 $gBadEmailPrefix (all \@$gEmailDomain.)
79 $gBadEmailPrefix
80 $gBadEmailPrefix For instructions via the WWW see:
81 $gBadEmailPrefix   http://$gWebDomain/
82 $gBadEmailPrefix   http://$gWebDomain/Reporting.html
83 $gBadEmailPrefix   http://$gWebDomain/Developer.html
84 $gBadEmailPrefix   http://$gWebDomain/Access.html
85 $gBadEmailPrefix $gTextInstructions
86 $gBadEmailPrefix For details of how to access $gBug report logs by email:
87 $gBadEmailPrefix   send \`request\@$gEmailDomain' the word \`help'
88 $gBadEmailPrefix
89 ENDTEXT
90     exit(100);
91 }
92
93 @months=qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec);
94 ($sec,$min,$hour,$mday,$mon,$year)= gmtime(time);
95
96 $queue= "$map$bugnumber";
97
98 chdir("$gSpoolDir/incoming") || &failure("chdir to spool: $!");
99
100 $id= time.$$;
101 open(FILE,">T.$id") || &failure("open temporary file: $!");
102 printf(FILE "Received: (at %s) by $gEmailDomain; %d %s %d %02d:%02d:%02d +0000\n",
103        $addrrec, $mday,$months[$mon],$year+1900, $hour,$min,$sec) ||
104     &failure("write header to temporary file: $!");
105 while(<STDIN>) { print(FILE) || &failure("write temporary file: $!"); }
106 close(FILE) || &failure("close temporary file: $!");
107
108 rename("T.$id","I$queue.$id") || &failure("rename spool message: $!");
109
110 exit(0);
111
112 sub failure {
113     length($id) && unlink("T.$id");
114     print STDERR "bugs receive failure: @_\n";
115     exit(75); # EX_TEMPFAIL
116 }