#!/usr/bin/perl
-# $Id: process.in,v 1.4 1999/09/16 19:42:50 gecko Exp $
+# $Id: process.in,v 1.22 2000/11/22 10:02:51 joy Exp $
#
# Usage: process nn
# Temps: incoming/Pnn
require( '/etc/debbugs/config' );
require( '/usr/lib/debbugs/errorlib' );
chdir( "$gSpoolDir" ) || die 'chdir spool: $!\n';
-@showseverities=();
#open(DEBUG,"> /tmp/debbugs.debug");
+open DEBUG, ">/dev/null";
defined( $intdate= time ) || &quit( "failed to get time: $!" );
(code $codeletter ref $tryref); $tdate
END
+# Process the message's mail headers
for ($i=0; $i<=$#msg; $i++) {
$_ = $msg[$i];
last unless length($_);
while (defined ($msg[$i] ) )
{
- last if ( $msg[$i] !~ m/^([\w]+):\s*(\S+)/ );
+ last if ( $msg[$i] !~ m/^([\w]+):\s*(\S+)(.*)/ );
$i++;
$fn = $1; $fv = $2;
print DEBUG ">$fn|$'|\n";
$fwd .= $fn.': '.$fv."\n";
$fn =~ y/A-Z/a-z/;
+ $fv =~ y/A-Z/a-z/;
$pheader{$fn}= $fv;
+ $pfullheader{$fn}= $2.$3;
print DEBUG ">$fn~$fv<\n";
}
$x= join('',<O>); close(O);
if ($codeletter eq 'F')
{ &htmllog("Reply","sent",$replyto,"You have marked $gBug as forwarded.");
- &sendmessage(<<END.$x, '');
+ &sendmessage(<<END, '');
From: $gMaintainerEmail ($gProject $gBug Tracking System)
To: $replyto
${noticecc}Subject: $gBug#$ref: marked as forwarded ($s_subject)
Your message dated $header{'date'}
with message-id $header{'message-id'}
-and subject line $subject
has caused the $gProject $gBug report #$ref,
regarding $s_subject
to be marked as having been forwarded to the upstream software
END
} else
{ &htmllog("Reply","sent",$replyto,"You have taken responsibility.");
- &sendmessage(<<END.$x, '');
+ &sendmessage(<<END."--------------------------------------\n".$x."---------------------------------------\n".join( "\n", @msg ), '');
From: $gMaintainerEmail ($gProject $gBug Tracking System)
To: $replyto
${noticecc}Subject: $gBug#$ref: marked as done ($s_subject)
&sendmessage(<<END.join("\n",@msg),'');
From: $gMaintainerEmail ($gProject $gBug Tracking System)
To: $s_originator
-Subject: $gBug#$ref acknowledged by developer ($s_subject)
+Subject: $gBug#$ref acknowledged by developer
+ ($header{'subject'})
Message-ID: <handler.$ref.$nn.notifdone\@$gEmailDomain>
In-Reply-To: $s_msgid
References: $header{'message-id'} $s_msgid
X-$gProject-PR-Message: they-closed $ref
-This is an automatic notification regarding your $gBug report.
+This is an automatic notification regarding your $gBug report
+#$ref: $s_subject,
+which was filed against the $s_package package.
It has been closed by one of the developers, namely
$markedby.
Their explanation is attached below. If this explanation is
unsatisfactory and you have not received a better one in a separate
message then please contact the developer directly, or email
-submit\@$gEmailDomain or me.
+$ref\@$gEmailDomain or me.
$gMaintainer
(administrator, $gProject $gBugs database)
}
if (!defined($pheader{'package'}))
{ &htmllog("Warning","sent",$replyto,"Message not forwarded.");
- &sendmessage(<<END, '');
+ &sendmessage(<<END."---------------------------------------------------------------------------\n".join("\n", @msg), '');
From: $gMaintainerEmail ($gProject $gBug Tracking System)
To: $replyto
Subject: Message with no Package: tag cannot be processed!
Your message didn't have a Package: line at the start (in the
pseudo-header following the real mail header), or didn't have a
-psuedo-header at all.
+pseudo-header at all.
This makes it much harder for us to categorise and deal with your
-problem report. Please resubmit your report and tell us which package the
-report is on. For help, check out http://$gWebDomain/Reporting.html.
+problem report. Please _resubmit_ your report and tell us which package
+the report is on. For help, check out http://$gWebDomain/Reporting.html.
Your message was dated $header{'date'} and had
message-id $header{'message-id'}
and subject $subject.
+The complete text of it is attached to this message.
If you need any assistance or explanation please contact me.
END
&appendlog;
&finish;
- } else {
- $s_package= $pheader{'package'};
- print "Package: $s_package\n";
- }
+ } else { $s_package= $pheader{'package'}; }
+ $s_keywords= '';
if (defined($pheader{'keywords'})) {
- $s_keywords= $pheader{'keywords'};
+ $s_keywords= $pfullheader{'keywords'};
+ } elsif (defined($pheader{'tags'})) {
+ $s_keywords= $pfullheader{'tags'};
+ }
+ if (length($s_keywords)) {
+ my @kws;
+ my %gkws = map { (%_, 1) } @gTags;
+ foreach my $kw (sort split(/[,\s]+/, lc($s_keywords))) {
+ push @kws, $kw if (defined $gkws{$kw});
+ }
+ $s_keywords = join(" ", @kws);
}
$s_severity= '';
- if (defined($pheader{'severity'})) {
- $s_severity= $pheader{'severity'};
- if (!grep($_ eq $s_severity, @severities, "$gDefaultSeverity")) {
+ if (defined($pheader{'severity'}) || defined($pheader{'priority'}))
+ { $s_severity= $pheader{'severity'};
+ $s_severity= $pheader{'priority'} unless ($s_severity);
+
+ if (!grep($_ eq $s_severity, @severities, "$gDefaultSeverity")) {
$brokenness.= <<END;
-Your message specified a Severity: in the psuedo-header, but
+Your message specified a Severity: in the pseudo-header, but
the severity value $s_severity was not recognised.
The default severity $gDefaultSeverity is being used instead.
-The recognised values are: @showseverities.
+The recognised values are: $gShowSeverities.
END
+# if we use @gSeverityList array in the above line, perl -c gives:
+# In string, @gSeverityList now must be written as \@gSeverityList at
+# process line 452, near "$gDefaultSeverity is being used instead.
$s_severity= '';
}
}
$orgsender= defined($header{'sender'}) ? "Orignal-Sender: $header{'sender'}\n" : '';
$newsubject= $subject; $newsubject =~ s/^$gBug#$ref\W*\s*//;
-$xcchdr= $header{X-Debbugs-CC};
+$xcchdr= $header{ 'x-debbugs-cc' };
if ($xcchdr =~ m/\S/) {
push(@resentccs,$xcchdr);
$resentccexplain.= <<END;
You requested that the message be sent to the package maintainer(s)
but either the $gBug report is not associated with any package (probably
-because of a missing Package psuedo-header field in the original $gBug
+because of a missing Package pseudo-header field in the original $gBug
report), or the package(s) specified do not have any maintainer(s).
Your message has *not* been sent to any package maintainers; it has
Resent-Sender: $gMaintainerEmail
X-$gProject-PR-Message: report $ref
X-$gProject-PR-Package: $s_package
-X-$gProject-PR-Keywords: $s_keywords
$fwd
END
} elsif ($codeletter eq 'B') {
join(', ',"$gSubmitList\@$gListDomain",@resentccs),
"<code>$gBug#$ref</code>".
(length($s_package)? "; Package <code>".&sani($s_package)."</code>" : '').
- (length($s_keywords)? "; Keywords <code>".&sani($s_keywords)."</code>":'').
".");
&sendmessage(<<END,"$gSubmitList\@$gListDomain",@resentccs);
Subject: $gBug#$ref: $newsubject
Resent-Sender: $gMaintainerEmail
X-$gProject-PR-Message: report $ref
X-$gProject-PR-Package: $s_package
-X-$gProject-PR-Keywords: $s_keywords
$fwd
END
} elsif (@resentccs) {
$resentccval,
"<code>$gBug#$ref</code>".
(length($s_package)? "; Package <code>".&sani($s_package)."</code>" : '').
- (length($s_keywords)? "; Keywords <code>".&sani($s_keywords)."</code>":'').
".");
&sendmessage(<<END,@resentccs);
Subject: $gBug#$ref: $newsubject
Resent-Sender: $gMaintainerEmail
X-$gProject-PR-Message: report $ref
X-$gProject-PR-Package: $s_package
-X-$gProject-PR-Keywords: $s_keywords
$fwd
END
}
sub sendmessage {
local ($msg,@recips) = @_;
if ($recips[0] eq '' && $#recips == 0) { @recips= ('-t'); }
+
+ #save email to the log
open(AP,">>db/$ref.log") || &quit("opening db/$ref.log (lo): $!");
print(AP "\2\n",join("\4",@recips),"\n\5\n$msg\n\3\n") ||
&quit("writing db/$ref.log (lo): $!");
close(AP) || &quit("closing db/$ref.log (lo): $!");
- print DEBUG "mailing to >",join('|',@recips),"<\n";
+ #if debbuging.. save email to a log
+# open AP, ">>debug";
+# print AP join( '|', @recips )."\n>>";
+# print AP get_addresses( @recips );
+# print AP "<<\n".$msg;
+# print AP "\n--------------------------------------------------------\n";
+# close AP;
+
+ #start mailing
+ $_ = '';
$SIG{'CHLD'}='chldhandle';
#print DEBUG "mailing sigchild set up<\n";
$chldexit = 'no';
return if !length($s_package);
open(MAINT,"$gMaintainerFile") || die &quit("maintainers open: $!");
while (<MAINT>) {
+ m/^\n$/ && next;
+ m/^\s*$/ && next;
m/^(\S+)\s+(\S.*\S)\n$/ || &quit("maintainers bogus \`$_'");
$a= $1; $b= $2; $a =~ y/A-Z/a-z/;
$maintainerof{$1}= $2;