]> git.donarmstrong.com Git - debbugs.git/blobdiff - scripts/receive
ditch using .in naming of scripts
[debbugs.git] / scripts / receive
diff --git a/scripts/receive b/scripts/receive
new file mode 100755 (executable)
index 0000000..eb101a4
--- /dev/null
@@ -0,0 +1,147 @@
+#!/usr/bin/perl
+# $Id: receive.in,v 1.17 2005/07/24 18:42:41 don Exp $
+# usage: mail is piped directly into program
+
+#set umask in order to have group-writable incoming/*
+#umask(002);
+
+use Debbugs::Config qw(:globals :text);
+my $lib_path = $gLibPath;
+
+$ENV{'PATH'} = '/usr/lib/debbugs:'.$ENV{'PATH'};
+
+#set source of mail delivery
+#sets any prefix needed to get mailer to add it to error mail
+if ( $gMailer eq 'exim' ) 
+{      $gBadEmailPrefix = '';
+       $_ = $ENV{'LOCAL_PART'};
+} elsif ( $gMailer eq 'qmail' )
+{      $gBadEmailPrefix = '//';
+       $_ = $ENV{'DEFAULT'};
+#      $_ = $ENV{'RECIPIENT'};
+#      s/^\w+-bugs--?//;
+} else 
+{      $gBadEmailPrefix = '';
+       $_ = $ARGV[0];
+       s/\>//;
+       s/\<//;
+}
+
+#remove everything from @ to end of line
+s/\@.*$//;
+
+#convert remaining upper case to lower case
+y/A-Z/a-z/;
+
+#set up to determine command
+%withbugaddressmap= ('-submit',     'B',
+                   '',            'B',
+                   '-maintonly',  'M',
+                   '-quiet',      'Q',
+                   '-forwarded',  'F',
+                   '-done',       'D',
+                   '-close',      'D',
+                  '-request',    'R',
+                   '-submitter',  'U',
+                  # Used for bug subscription
+                  #'-list-nothing-will-match-this', 'L',
+                   );
+
+%withpkgaddressmap= ('-request',     'R');
+
+%withoutaddressmap= ('submit',     'B',
+                      'bugs',       'B',
+                      'maintonly',  'M',
+                      'quiet',      'Q',
+                      'forwarded',  'F',
+                      'done',       'D',
+                      'close',      'D',
+                      'request',    'R',
+                      'submitter',  'U',
+                      'control',    'C');
+
+#determine command
+if (s/^(\d{1,9})\b//) {
+    $bugnumber= $1;
+    if (not exists $withbugaddressmap{$_} and
+/-(?:(?:un)?subscribe|subhelp|help|ignore|(?:sub(?:yes|approve|reject)
+ |unsubyes|bounce|probe|approve|reject|
+ setlistyes|setlistsilentyes).*)/x
+       ) {
+        $map = 'L';
+    }
+    else {
+        $map= $withbugaddressmap{$_};
+    }
+    $addrrec= "$bugnumber$_";
+} elsif (s/^(\w+)-//) {
+    $bugnumber= $1;
+    $map= $withpkgaddressmap{"-$_"};
+    $addrrec= "$bugnumber-$_";
+} else {
+    $bugnumber= '';
+    $map= $withoutaddressmap{$_};
+    $addrrec= "$_";
+}
+
+#print no command received
+if (!defined($map)) {
+    print STDERR <<ENDTEXT;
+$gBadEmailPrefix
+$gBadEmailPrefix Unknown $gBug service address $_\@$gEmailDomain.
+$gBadEmailPrefix Recognised addresses are:
+$gBadEmailPrefix
+$gBadEmailPrefix     General:       Read $gBug# in Subject:    $gBug# is NNNN:
+$gBadEmailPrefix
+$gBadEmailPrefix      request        submit  $gBug             NNNN  NNNN-submit
+$gBadEmailPrefix      control        maintonly                NNNN-maintonly
+$gBadEmailPrefix      owner          quiet                    NNNN-quiet
+$gBadEmailPrefix      postmaster     forwarded                NNNN-forwarded
+$gBadEmailPrefix                     done  close              NNNN-done  NNNN-close
+$gBadEmailPrefix                     submitter                NNNN-submitter
+$gBadEmailPrefix
+$gBadEmailPrefix (all \@$gEmailDomain.)
+$gBadEmailPrefix
+$gBadEmailPrefix For instructions via the WWW see:
+$gBadEmailPrefix   http://$gWebDomain/
+$gBadEmailPrefix   http://$gWebDomain/Reporting$gHTMLSuffix
+$gBadEmailPrefix   http://$gWebDomain/Developer$gHTMLSuffix
+$gBadEmailPrefix   http://$gWebDomain/Access$gHTMLSuffix
+$gTextInstructions
+$gBadEmailPrefix For details of how to access $gBug report logs by email:
+$gBadEmailPrefix   send \`request\@$gEmailDomain' the word \`help'
+$gBadEmailPrefix
+ENDTEXT
+    exit(100);
+}
+
+@months=qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec);
+($sec,$min,$hour,$mday,$mon,$year)= gmtime(time);
+
+$queue= "$map$bugnumber";
+
+chdir("$gSpoolDir/incoming") || &failure("chdir to spool: $!");
+
+$id= time.$$;
+open(FILE,">T.$id") || &failure("open temporary file: $!");
+printf(FILE "Received: (at %s) by $gEmailDomain; %d %s %d %02d:%02d:%02d +0000\n",
+       $addrrec, $mday,$months[$mon],$year+1900, $hour,$min,$sec) ||
+    &failure("write header to temporary file: $!");
+while(<STDIN>) { print(FILE) || &failure("write temporary file: $!"); }
+close(FILE) || &failure("close temporary file: $!");
+
+my $prefix;
+if ($gSpamScan) {
+    $prefix = 'S';
+} else {
+    $prefix = 'I';
+}
+rename("T.$id","$prefix$queue.$id") || &failure("rename spool message: $!");
+
+exit(0);
+
+sub failure {
+    length($id) && unlink("T.$id");
+    print STDERR "bugs receive failure: @_\n";
+    exit(75); # EX_TEMPFAIL
+}