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