You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spamassassin.apache.org by jm...@apache.org on 2004/04/29 04:56:01 UTC
svn commit: rev 10399 - incubator/spamassassin/trunk/masses
Author: jm
Date: Wed Apr 28 19:56:01 2004
New Revision: 10399
Modified:
incubator/spamassassin/trunk/masses/mass-check
Log:
--deencap didn't deal with the case where a local scanner overwrote the remote scanner's X-Spam-Checker-Version header. fix by grovelling through the body parts :(
Modified: incubator/spamassassin/trunk/masses/mass-check
==============================================================================
--- incubator/spamassassin/trunk/masses/mass-check (original)
+++ incubator/spamassassin/trunk/masses/mass-check Wed Apr 28 19:56:01 2004
@@ -247,7 +247,7 @@
my (undef, $id, $time, $dataref) = @_;
my $out;
- my $ma = $spamtest->parse($dataref);
+ my $ma = $spamtest->parse($dataref, 1);
# remove SpamAssassin markup, if present and the mail was spam
my $stat = $ma->get_header("X-Spam-Status");
@@ -353,24 +353,32 @@
return $out;
}
+# ick. We have to go grovelling through the body parts to see if a message
+# is a report_safe-marked-up message, because a local scanner will overwrite
+# any remote scanner's X-Spam-Checker-Version header.
+#
sub message_should_be_deencapped {
my ($ma) = @_;
- my $vers = $ma->get_header("X-Spam-Checker-Version");
- return 1 if (!$vers); # no header? probably not SpamAssassin encapsulation.
- # return 1 so that old versions of SpamAssassin encapping are removed
-
- $vers =~ s/\s+/ /gs;
- if ($vers !~ / on (\S+)\s*$/) {
- # X-Spam-Checker-Version has no hostname.
- # always remove the markup, it's probably not an encapsulated message
- # in that case
- return 1;
- }
+ if (scalar @{$ma->{body_parts}} > 0) {
+ my $firstpart = $ma->{body_parts}->[0];
+ if (!$firstpart->{headers}->{'content-type'}
+ || $firstpart->{headers}->{'content-type'} ne 'text/plain')
+ {
+ return 0; # not a 'report_safe' encapsulation
+ }
- my $hname = $1;
- if ($hname =~ /$opt_deencap/io) {
- return 1;
+ if (scalar @{$firstpart->{raw}} < 3) { return 0; } # too short to be a report
+
+ # grab first 2 lines
+ my $text = $firstpart->{raw}->[0] . $firstpart->{raw}->[1];
+ $text =~ s/\s+/ /gs;
+ if ($text =~ /^Spam detection software, running on the system \"(\S+)\"/) {
+ my $hname = $1;
+ if ($hname =~ /$opt_deencap/io) {
+ return 1;
+ }
+ }
}
return 0; # a different host marked it up. pass it through!