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