Mailing List Archive

svn commit: r160764 - in spamassassin/trunk: lib/Mail/SpamAssassin/Plugin/SPF.pm rules/25_spf.cf
Author: quinlan
Date: Sun Apr 10 02:20:16 2005
New Revision: 160764

URL: http://svn.apache.org/viewcvs?view=rev&rev=160764
Log:
bug 3616: add SPF_NEUTRAL and SPF_HELO_NEUTRAL test to SPF plugin

Modified:
spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/SPF.pm
spamassassin/trunk/rules/25_spf.cf

Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/SPF.pm
URL: http://svn.apache.org/viewcvs/spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/SPF.pm?view=diff&r1=160763&r2=160764
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/SPF.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/SPF.pm Sun Apr 10 02:20:16 2005
@@ -56,9 +56,11 @@
my $conf = $mailsaobject->{conf};

$self->register_eval_rule ("check_for_spf_pass");
+ $self->register_eval_rule ("check_for_spf_neutral");
$self->register_eval_rule ("check_for_spf_fail");
$self->register_eval_rule ("check_for_spf_softfail");
$self->register_eval_rule ("check_for_spf_helo_pass");
+ $self->register_eval_rule ("check_for_spf_helo_neutral");
$self->register_eval_rule ("check_for_spf_helo_fail");
$self->register_eval_rule ("check_for_spf_helo_softfail");
$self->register_eval_rule ("check_for_spf_whitelist_from");
@@ -124,6 +126,15 @@
$scanner->{spf_pass};
}

+sub check_for_spf_neutral {
+ my ($self, $scanner) = @_;
+ $self->_check_spf ($scanner, 0) unless $scanner->{spf_checked};
+ if ($scanner->{spf_failure_comment}) {
+ $scanner->test_log ($scanner->{spf_failure_comment});
+ }
+ $scanner->{spf_neutral};
+}
+
sub check_for_spf_fail {
my ($self, $scanner) = @_;
$self->_check_spf ($scanner, 0) unless $scanner->{spf_checked};
@@ -148,6 +159,15 @@
$scanner->{spf_helo_pass};
}

+sub check_for_spf_helo_neutral {
+ my ($self, $scanner) = @_;
+ $self->_check_spf ($scanner, 1) unless $scanner->{spf_helo_checked};
+ if ($scanner->{spf_helo_failure_comment}) {
+ $scanner->test_log ($scanner->{spf_helo_failure_comment});
+ }
+ $scanner->{spf_helo_neutral};
+}
+
sub check_for_spf_helo_fail {
my ($self, $scanner) = @_;
$self->_check_spf ($scanner, 1) unless $scanner->{spf_helo_checked};
@@ -192,6 +212,7 @@
# SPF HELO-checking variant. This isn't really SPF at all ;)
$scanner->{spf_helo_checked} = 1;
$scanner->{spf_helo_pass} = 0;
+ $scanner->{spf_helo_neutral} = 0;
$scanner->{spf_helo_fail} = 0;
$scanner->{spf_helo_softfail} = 0;
$scanner->{spf_helo_failure_comment} = undef;
@@ -199,6 +220,7 @@
# "real" SPF; checking the envelope-from (where we can)
$scanner->{spf_checked} = 1;
$scanner->{spf_pass} = 0;
+ $scanner->{spf_neutral} = 0;
$scanner->{spf_fail} = 0;
$scanner->{spf_softfail} = 0;
$scanner->{spf_failure_comment} = undef;
@@ -297,18 +319,20 @@

if ($ishelo) {
if ($result eq 'pass') { $scanner->{spf_helo_pass} = 1; }
+ elsif ($result eq 'neutral') { $scanner->{spf_helo_neutral} = 1; }
elsif ($result eq 'fail') { $scanner->{spf_helo_fail} = 1; }
elsif ($result eq 'softfail') { $scanner->{spf_helo_softfail} = 1; }

- if ($result eq 'fail' || $result eq 'softfail') {
+ if ($result eq 'neutral' || $result eq 'fail' || $result eq 'softfail') {
$scanner->{spf_helo_failure_comment} = "SPF failed: $comment";
}
} else {
if ($result eq 'pass') { $scanner->{spf_pass} = 1; }
+ elsif ($result eq 'neutral') { $scanner->{spf_neutral} = 1; }
elsif ($result eq 'fail') { $scanner->{spf_fail} = 1; }
elsif ($result eq 'softfail') { $scanner->{spf_softfail} = 1; }

- if ($result eq 'fail' || $result eq 'softfail') {
+ if ($result eq 'neutral' || $result eq 'fail' || $result eq 'softfail') {
$scanner->{spf_failure_comment} = "SPF failed: $comment";
}
}

Modified: spamassassin/trunk/rules/25_spf.cf
URL: http://svn.apache.org/viewcvs/spamassassin/trunk/rules/25_spf.cf?view=diff&r1=160763&r2=160764
==============================================================================
--- spamassassin/trunk/rules/25_spf.cf (original)
+++ spamassassin/trunk/rules/25_spf.cf Sun Apr 10 02:20:16 2005
@@ -26,11 +26,15 @@

ifplugin Mail::SpamAssassin::Plugin::SPF

-# SPF support. "pass" is nice, "fail" is bad, "softfail" is bad, but
-# not as bad as "fail". ;) These are more trustworthy results than
-# the SPF_HELO rules.
+# SPF support:
+# "pass" is nice
+# "neutral" is somewhat bad
+# "fail" is bad
+# "softfail" is bad, but not as bad as "fail"
+# These are more trustworthy results than the SPF_HELO rules.

-header SPF_PASS eval:check_for_spf_pass()
+header SPF_PASS eval:check_for_spf_pass()
+header SPF_NEUTRAL eval:check_for_spf_neutral()
header SPF_FAIL eval:check_for_spf_fail()
header SPF_SOFTFAIL eval:check_for_spf_softfail()

@@ -39,20 +43,25 @@
# However, a *failure* is still a very good spamsign.

header SPF_HELO_PASS eval:check_for_spf_helo_pass()
+header SPF_HELO_NEUTRAL eval:check_for_spf_helo_neutral()
header SPF_HELO_FAIL eval:check_for_spf_helo_fail()
header SPF_HELO_SOFTFAIL eval:check_for_spf_helo_softfail()

describe SPF_PASS SPF: sender matches SPF record
+describe SPF_NEUTRAL SPF: sender does not match SPF record (neutral)
describe SPF_FAIL SPF: sender does not match SPF record (fail)
describe SPF_SOFTFAIL SPF: sender does not match SPF record (softfail)
-describe SPF_HELO_PASS SPF: HELO matches SPF record
+describe SPF_HELO_PASS SPF: HELO matches SPF record
+describe SPF_HELO_NEUTRAL SPF: HELO does not match SPF record (neutral)
describe SPF_HELO_FAIL SPF: HELO does not match SPF record (fail)
describe SPF_HELO_SOFTFAIL SPF: HELO does not match SPF record (softfail)

-tflags SPF_PASS net nice userconf
+tflags SPF_PASS net nice userconf
+tflags SPF_NEUTRAL net
tflags SPF_FAIL net
tflags SPF_SOFTFAIL net
tflags SPF_HELO_PASS net nice userconf
+tflags SPF_HELO_NEUTRAL net
tflags SPF_HELO_FAIL net
tflags SPF_HELO_SOFTFAIL net