You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spamassassin.apache.org by he...@apache.org on 2022/04/22 17:15:57 UTC
svn commit: r1900161 - in /spamassassin/trunk: ./ lib/Mail/SpamAssassin/ lib/Mail/SpamAssassin/Plugin/ lib/Mail/SpamAssassin/Util/ rules/ t/
Author: hege
Date: Fri Apr 22 17:15:57 2022
New Revision: 1900161
URL: http://svn.apache.org/viewvc?rev=1900161&view=rev
Log:
DMARC plugin cleanup and rename Dmarc.pm -> DMARC.pm
Added:
spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/DMARC.pm
- copied, changed from r1900160, spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/Dmarc.pm
Removed:
spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/Dmarc.pm
Modified:
spamassassin/trunk/MANIFEST
spamassassin/trunk/UPGRADE
spamassassin/trunk/lib/Mail/SpamAssassin/Conf.pm
spamassassin/trunk/lib/Mail/SpamAssassin/Util/DependencyInfo.pm
spamassassin/trunk/rules/v400.pre
spamassassin/trunk/t/all_modules.t
spamassassin/trunk/t/debug.t
spamassassin/trunk/t/dmarc.t
Modified: spamassassin/trunk/MANIFEST
URL: http://svn.apache.org/viewvc/spamassassin/trunk/MANIFEST?rev=1900161&r1=1900160&r2=1900161&view=diff
==============================================================================
--- spamassassin/trunk/MANIFEST (original)
+++ spamassassin/trunk/MANIFEST Fri Apr 22 17:15:57 2022
@@ -84,7 +84,7 @@ lib/Mail/SpamAssassin/Plugin/Check.pm
lib/Mail/SpamAssassin/Plugin/DCC.pm
lib/Mail/SpamAssassin/Plugin/DecodeShortURLs.pm
lib/Mail/SpamAssassin/Plugin/DKIM.pm
-lib/Mail/SpamAssassin/Plugin/Dmarc.pm
+lib/Mail/SpamAssassin/Plugin/DMARC.pm
lib/Mail/SpamAssassin/Plugin/DNSEval.pm
lib/Mail/SpamAssassin/Plugin/Esp.pm
lib/Mail/SpamAssassin/Plugin/ExtractText.pm
Modified: spamassassin/trunk/UPGRADE
URL: http://svn.apache.org/viewvc/spamassassin/trunk/UPGRADE?rev=1900161&r1=1900160&r2=1900161&view=diff
==============================================================================
--- spamassassin/trunk/UPGRADE (original)
+++ spamassassin/trunk/UPGRADE Fri Apr 22 17:15:57 2022
@@ -185,6 +185,8 @@ Note for Users Upgrading to SpamAssassin
lzip and lzo-compressed files (Bug 7598). These apply to spamassassin
and sa-learn commands also.
+- New DMARC policy check plugin
+
Note for Users Upgrading to SpamAssassin 3.4.5
----------------------------------------------
Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Conf.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/Conf.pm?rev=1900161&r1=1900160&r2=1900161&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Conf.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Conf.pm Fri Apr 22 17:15:57 2022
@@ -4231,6 +4231,10 @@ See C<Mail::SpamAssassin::Plugin> for mo
} else {
return $INVALID_VALUE;
}
+ # trunk Dmarc.pm was renamed to DMARC.pm
+ if ($package eq 'Mail::SpamAssassin::Plugin::Dmarc' && !defined $path) {
+ $package = 'Mail::SpamAssassin::Plugin::DMARC';
+ }
$self->load_plugin ($package, $path);
}
});
Copied: spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/DMARC.pm (from r1900160, spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/Dmarc.pm)
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/DMARC.pm?p2=spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/DMARC.pm&p1=spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/Dmarc.pm&r1=1900160&r2=1900161&rev=1900161&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/Dmarc.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/DMARC.pm Fri Apr 22 17:15:57 2022
@@ -19,44 +19,44 @@
=head1 NAME
-Mail::SpamAssassin::Plugin::Dmarc - check Dmarc policy
+Mail::SpamAssassin::Plugin::DMARC - check DMARC policy
=head1 SYNOPSIS
- loadplugin Mail::SpamAssassin::Plugin::Dmarc
+ loadplugin Mail::SpamAssassin::Plugin::DMARC
- ifplugin Mail::SpamAssassin::Plugin::Dmarc
+ ifplugin Mail::SpamAssassin::Plugin::DMARC
header DMARC_NONE eval:check_dmarc_none()
priority DMARC_NONE 500
- describe DMARC_NONE Dmarc none policy
+ describe DMARC_NONE DMARC none policy
header DMARC_QUAR eval:check_dmarc_quarantine()
priority DMARC_QUAR 500
- describe DMARC_QUAR Dmarc quarantine policy
+ describe DMARC_QUAR DMARC quarantine policy
header DMARC_REJECT eval:check_dmarc_reject()
priority DMARC_REJECT 500
- describe DMARC_REJECT Dmarc reject policy
+ describe DMARC_REJECT DMARC reject policy
header DMARC_MISSING eval:check_dmarc_missing()
priority DMARC_MISSING 500
- describe DMARC_MISSING Missing Dmarc policy
+ describe DMARC_MISSING Missing DMARC policy
endif
=head1 DESCRIPTION
-This plugin checks if emails matches Dmarc policy, the plugin needs both DKIM
+This plugin checks if emails matches DMARC policy, the plugin needs both DKIM
and SPF plugins enabled.
=cut
-package Mail::SpamAssassin::Plugin::Dmarc;
+package Mail::SpamAssassin::Plugin::DMARC;
use strict;
use warnings;
use re 'taint';
-my $VERSION = 0.1;
+my $VERSION = 0.2;
use Mail::SpamAssassin;
use Mail::SpamAssassin::Plugin;
@@ -65,35 +65,32 @@ our @ISA = qw(Mail::SpamAssassin::Plugin
use constant HAS_DMARC => eval { require Mail::DMARC::PurePerl; };
-BEGIN
-{
- eval{
- import Mail::DMARC::PurePerl
- };
-}
-
-sub dbg { my $msg = shift; Mail::SpamAssassin::Plugin::dbg("Dmarc: $msg", @_); }
+sub dbg { my $msg = shift; Mail::SpamAssassin::Plugin::dbg("DMARC: $msg", @_); }
sub new {
- my ($class, $mailsa) = @_;
+ my ($class, $mailsa) = @_;
+
+ $class = ref($class) || $class;
+ my $self = $class->SUPER::new($mailsa);
+ bless ($self, $class);
+
+ $self->set_config($mailsa->{conf});
+ $self->register_eval_rule("check_dmarc_pass");
+ $self->register_eval_rule("check_dmarc_reject");
+ $self->register_eval_rule("check_dmarc_quarantine");
+ $self->register_eval_rule("check_dmarc_none");
+ $self->register_eval_rule("check_dmarc_missing");
- $class = ref($class) || $class;
- my $self = $class->SUPER::new($mailsa);
- bless ($self, $class);
-
- $self->set_config($mailsa->{conf});
- $self->register_eval_rule("check_dmarc_pass");
- $self->register_eval_rule("check_dmarc_reject");
- $self->register_eval_rule("check_dmarc_quarantine");
- $self->register_eval_rule("check_dmarc_none");
- $self->register_eval_rule("check_dmarc_missing");
+ if (!HAS_DMARC) {
+ warn "DMARC not supported, required module Mail::DMARC::PurePerl missing\n";
+ }
- return $self;
+ return $self;
}
sub set_config {
- my ($self, $conf) = @_;
- my @cmds;
+ my ($self, $conf) = @_;
+ my @cmds;
=over 4
@@ -105,196 +102,149 @@ Store DMARC reports using Mail::DMARC::S
=cut
- push(@cmds, {
- setting => 'dmarc_save_reports',
- default => '0',
- type => $Mail::SpamAssassin::Conf::CONF_TYPE_BOOL,
- }
- );
- $conf->{parser}->register_commands(\@cmds);
+ push(@cmds, {
+ setting => 'dmarc_save_reports',
+ default => 0,
+ type => $Mail::SpamAssassin::Conf::CONF_TYPE_BOOL,
+ });
+ $conf->{parser}->register_commands(\@cmds);
}
sub check_dmarc_pass {
- my ($self,$pms,$name) = @_;
+ my ($self, $pms, $name) = @_;
- my @tags = ('RELAYSEXTERNAL');
-
- $pms->action_depends_on_tags(\@tags,
- sub { my($pms, @args) = @_;
- $self->_check_dmarc(@_);
- if((defined $pms->{dmarc_result}) and ($pms->{dmarc_result} eq 'pass') and ($pms->{dmarc_policy} ne 'no policy available')) {
- $pms->got_hit($pms->get_current_eval_rule_name(), "");
- return 1;
- }
- }
- );
- return 0;
+ $self->_check_dmarc($pms) unless $pms->{dmarc_checked};
+ return defined $pms->{dmarc_result} &&
+ $pms->{dmarc_result} eq 'pass' &&
+ $pms->{dmarc_policy} ne 'no policy available';
}
sub check_dmarc_reject {
- my ($self,$pms,$name) = @_;
+ my ($self, $pms, $name) = @_;
- my @tags = ('RELAYSEXTERNAL');
-
- $pms->action_depends_on_tags(\@tags,
- sub { my($pms, @args) = @_;
- $self->_check_dmarc(@_);
- if((defined $pms->{dmarc_result}) and ($pms->{dmarc_result} eq 'fail') and ($pms->{dmarc_policy} eq 'reject')) {
- $pms->got_hit($pms->get_current_eval_rule_name(), "");
- return 1;
- }
- }
- );
- return 0;
+ $self->_check_dmarc($pms) unless $pms->{dmarc_checked};
+ return defined $pms->{dmarc_result} &&
+ $pms->{dmarc_result} eq 'fail' &&
+ $pms->{dmarc_policy} eq 'reject';
}
sub check_dmarc_quarantine {
- my ($self,$pms,$name) = @_;
-
- my @tags = ('RELAYSEXTERNAL');
+ my ($self, $pms, $name) = @_;
- $pms->action_depends_on_tags(\@tags,
- sub { my($pms, @args) = @_;
- $self->_check_dmarc(@_);
- if((defined $pms->{dmarc_result}) and ($pms->{dmarc_result} eq 'fail') and ($pms->{dmarc_policy} eq 'quarantine')) {
- $pms->got_hit($pms->get_current_eval_rule_name(), "");
- return 1;
- }
- }
- );
- return 0;
+ $self->_check_dmarc($pms) unless $pms->{dmarc_checked};
+ return defined $pms->{dmarc_result} &&
+ $pms->{dmarc_result} eq 'fail' &&
+ $pms->{dmarc_policy} eq 'quarantine';
}
sub check_dmarc_none {
- my ($self,$pms,$name) = @_;
-
- my @tags = ('RELAYSEXTERNAL');
+ my ($self, $pms, $name) = @_;
- $pms->action_depends_on_tags(\@tags,
- sub { my($pms, @args) = @_;
- $self->_check_dmarc(@_);
- if((defined $pms->{dmarc_result}) and ($pms->{dmarc_result} eq 'fail') and ($pms->{dmarc_policy} eq 'none')) {
- $pms->got_hit($pms->get_current_eval_rule_name(), "");
- return 1;
- }
- }
- );
- return 0;
+ $self->_check_dmarc($pms) unless $pms->{dmarc_checked};
+ return defined $pms->{dmarc_result} &&
+ $pms->{dmarc_result} eq 'fail' &&
+ $pms->{dmarc_policy} eq 'none';
}
sub check_dmarc_missing {
- my ($self,$pms,$name) = @_;
-
- my @tags = ('RELAYSEXTERNAL');
+ my ($self, $pms, $name) = @_;
- $pms->action_depends_on_tags(\@tags,
- sub { my($pms, @args) = @_;
- $self->_check_dmarc(@_);
- if((defined $pms->{dmarc_result}) and ($pms->{dmarc_policy} eq 'no policy available')) {
- $pms->got_hit($pms->get_current_eval_rule_name(), "");
- return 1;
- }
- }
- );
- return 0;
+ $self->_check_dmarc($pms) unless $pms->{dmarc_checked};
+ return defined $pms->{dmarc_result} &&
+ $pms->{dmarc_policy} eq 'no policy available';
}
sub _check_dmarc {
- my ($self,$pms,$name) = @_;
- my $spf_status = 'none';
- my $spf_helo_status = 'none';
- my ($dmarc, $lasthop, $result, $rua, $mfrom_domain);
+ my ($self, $pms, $name) = @_;
- if (!HAS_DMARC) {
- warn "check_dmarc not supported, required module Mail::DMARC::PurePerl missing\n";
- return 0;
- }
+ return if !HAS_DMARC;
+ return if $pms->{dmarc_checked};
+ $pms->{dmarc_checked} = 1;
- if((defined $pms->{dmarc_checked}) and ($pms->{dmarc_checked} eq 1)) {
+ my $lasthop = $pms->{relays_external}->[0];
+ if (!defined $lasthop) {
+ dbg("no external relay found, skipping DMARC check");
return;
}
- $dmarc = Mail::DMARC::PurePerl->new();
- $lasthop = $pms->{relays_external}->[0];
- return if ( $pms->get('From:addr') !~ /\@/ );
+ my $from_addr = ($pms->get('From:first:addr'))[0];
+ return if index($from_addr, '@') == -1;
- $spf_status = 'pass' if ((defined $pms->{spf_pass}) and ($pms->{spf_pass} eq 1));
- $spf_status = 'fail' if ((defined $pms->{spf_fail}) and ($pms->{spf_fail} eq 1));
- $spf_status = 'fail' if ((defined $pms->{spf_none}) and ($pms->{spf_none} eq 1));
- $spf_status = 'fail' if ((defined $pms->{spf_permerror}) and ($pms->{spf_permerror} eq 1));
- $spf_status = 'neutral' if ((defined $pms->{spf_neutral}) and ($pms->{spf_neutral} eq 1));
- $spf_status = 'softfail' if ((defined $pms->{spf_softfail}) and ($pms->{spf_softfail} eq 1));
- $spf_helo_status = 'pass' if ((defined $pms->{spf_helo_pass}) and ($pms->{spf_helo_pass} eq 1));
- $spf_helo_status = 'fail' if ((defined $pms->{spf_helo_fail}) and ($pms->{spf_helo_fail} eq 1));
- $spf_helo_status = 'fail' if ((defined $pms->{spf_helo_permerror}) and ($pms->{spf_helo_permerror} eq 1));
- $spf_helo_status = 'fail' if ((defined $pms->{spf_helo_none}) and ($pms->{spf_helo_none} eq 1));
- $spf_helo_status = 'neutral' if ((defined $pms->{spf_helo_neutral}) and ($pms->{spf_helo_neutral} eq 1));
- $spf_helo_status = 'softfail' if ((defined $pms->{spf_helo_softfail}) and ($pms->{spf_helo_softfail} eq 1));
-
- $mfrom_domain = $pms->get('EnvelopeFrom:host', undef);
- if(not defined $mfrom_domain) {
- $mfrom_domain = $pms->get('From:domain', undef);
- dbg("cannot find EnvelopeFrom domain, using From:domain $mfrom_domain");
+ my $mfrom_domain = ($pms->get('EnvelopeFrom:first:addr:host'))[0];
+ if (!defined $mfrom_domain) {
+ $mfrom_domain = ($pms->get('From:first:addr:domain'))[0];
+ return if !defined $mfrom_domain;
+ dbg("EnvelopeFrom header not found, using From");
}
- return if not defined $mfrom_domain;
+
+ my $spf_status = 'none';
+ if ($pms->{spf_pass}) { $spf_status = 'pass'; }
+ elsif ($pms->{spf_fail}) { $spf_status = 'fail'; }
+ elsif ($pms->{spf_permerror}) { $spf_status = 'fail'; }
+ elsif ($pms->{spf_none}) { $spf_status = 'fail'; }
+ elsif ($pms->{spf_neutral}) { $spf_status = 'neutral'; }
+ elsif ($pms->{spf_softfail}) { $spf_status = 'softfail'; }
+
+ my $spf_helo_status = 'none';
+ if ($pms->{spf_helo_pass}) { $spf_helo_status = 'pass'; }
+ elsif ($pms->{spf_helo_fail}) { $spf_helo_status = 'fail'; }
+ elsif ($pms->{spf_helo_permerror}) { $spf_helo_status = 'fail'; }
+ elsif ($pms->{spf_helo_none}) { $spf_helo_status = 'fail'; }
+ elsif ($pms->{spf_helo_neutral}) { $spf_helo_status = 'neutral'; }
+ elsif ($pms->{spf_helo_softfail}) { $spf_helo_status = 'softfail'; }
+
+ my $dmarc = Mail::DMARC::PurePerl->new();
$dmarc->source_ip($lasthop->{ip});
- $dmarc->header_from_raw($pms->get('From:addr'));
+ $dmarc->header_from_raw($from_addr);
$dmarc->dkim($pms->{dkim_verifier}) if (ref($pms->{dkim_verifier}));
+
+ my $result;
eval {
$dmarc->spf([
{
scope => 'mfrom',
- domain => "$mfrom_domain",
- result => "$spf_status",
+ domain => $mfrom_domain,
+ result => $spf_status,
},
{
scope => 'helo',
- domain => "$lasthop->{lc_helo}",
- result => "$spf_helo_status",
+ domain => $lasthop->{lc_helo},
+ result => $spf_helo_status,
},
]);
$result = $dmarc->validate();
};
if ($@) {
- if(defined $mfrom_domain) {
- dbg("Dmarc error while evaluating domain $mfrom_domain: $@");
- } else {
- dbg("Dmarc error: $@");
- }
+ dbg("error while evaluating domain $mfrom_domain: $@");
return;
}
- if(($pms->{conf}->{dmarc_save_reports} == 1) and (defined $result->result)) {
- $rua = eval { $result->published()->rua(); };
- if (defined $rua and $rua =~ /mailto\:/) {
- eval {
- $dmarc->save_aggregate();
- };
- if ( my $error = $@ ) {
- dbg("Dmarc report could not be saved: $error");
- } else {
- dbg("Dmarc report will be sent to $rua");
+ if (defined($pms->{dmarc_result} = $result->result)) {
+ if ($pms->{conf}->{dmarc_save_reports}) {
+ my $rua = eval { $result->published()->rua(); };
+ if (defined $rua && index($rua, 'mailto:') >= 0) {
+ eval { $dmarc->save_aggregate(); };
+ if ($@) {
+ info("report could not be saved: $@");
+ } else {
+ dbg("report will be sent to $rua");
+ }
}
}
- }
- $pms->{dmarc_result} = $result->result;
- if ((defined $result->reason) and (defined $result->reason->[0]{comment}) and ($result->reason->[0]{comment} eq "too many policies")) {
- dbg("result: no policy available");
- $pms->{dmarc_policy} = "no policy available";
- return;
- }
- if((defined $pms->{dmarc_result}) and ($pms->{dmarc_result} ne 'none')) {
- dbg("result: " . $pms->{dmarc_result} . ", disposition: " . $result->disposition . ", dkim: " . $result->dkim . ", spf: " . $result->spf . " ( spf: $spf_status, spf_helo: $spf_helo_status)");
- $pms->{dmarc_policy} = $result->published->p;
- } else {
- dbg("result: no policy available");
- $pms->{dmarc_policy} = "no policy available";
+ if (defined $result->reason->[0]{comment} &&
+ $result->reason->[0]{comment} eq 'too many policies') {
+ dbg("result: no policy available");
+ $pms->{dmarc_policy} = 'no policy available';
+ } elsif ($result->result ne 'none') {
+ dbg("result: $result->{result}, disposition: $result->{disposition}, dkim: $result->{dkim}, spf: $result->{spf} (spf: $spf_status, spf_helo: $spf_helo_status)");
+ $pms->{dmarc_policy} = $result->published->p;
+ } else {
+ dbg("result: no policy available");
+ $pms->{dmarc_policy} = 'no policy available';
+ }
}
- $pms->{dmarc_checked} = 1;
- undef $result;
- undef $dmarc;
}
1;
Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Util/DependencyInfo.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/Util/DependencyInfo.pm?rev=1900161&r1=1900160&r2=1900161&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Util/DependencyInfo.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Util/DependencyInfo.pm Fri Apr 22 17:15:57 2022
@@ -301,7 +301,7 @@ our @OPTIONAL_MODULES = (
module => 'Mail::DMARC::PurePerl',
version => 0,
desc => 'Mail::DMARC::PurePerl is a Perl implementation of DMARC protocol.
- It is used by the optional Dmarc Plugin.',
+ It is used by the optional DMARC Plugin.',
},
);
Modified: spamassassin/trunk/rules/v400.pre
URL: http://svn.apache.org/viewvc/spamassassin/trunk/rules/v400.pre?rev=1900161&r1=1900160&r2=1900161&view=diff
==============================================================================
--- spamassassin/trunk/rules/v400.pre (original)
+++ spamassassin/trunk/rules/v400.pre Fri Apr 22 17:15:57 2022
@@ -34,6 +34,6 @@
#
# loadplugin Mail::SpamAssassin::Plugin::DecodeShortURLs
-# Dmarc - Check DMARC compliance
+# DMARC - Check DMARC compliance
#
-# loadplugin Mail::SpamAssassin::Plugin::Dmarc
+# loadplugin Mail::SpamAssassin::Plugin::DMARC
Modified: spamassassin/trunk/t/all_modules.t
URL: http://svn.apache.org/viewvc/spamassassin/trunk/t/all_modules.t?rev=1900161&r1=1900160&r2=1900161&view=diff
==============================================================================
--- spamassassin/trunk/t/all_modules.t (original)
+++ spamassassin/trunk/t/all_modules.t Fri Apr 22 17:15:57 2022
@@ -56,7 +56,7 @@ tstpre ("
loadplugin Mail::SpamAssassin::Plugin::Esp
loadplugin Mail::SpamAssassin::Plugin::ExtractText
loadplugin Mail::SpamAssassin::Plugin::DecodeShortURLs
- loadplugin Mail::SpamAssassin::Plugin::Dmarc
+ loadplugin Mail::SpamAssassin::Plugin::DMARC
");
tstprefs("
Modified: spamassassin/trunk/t/debug.t
URL: http://svn.apache.org/viewvc/spamassassin/trunk/t/debug.t?rev=1900161&r1=1900160&r2=1900161&view=diff
==============================================================================
--- spamassassin/trunk/t/debug.t (original)
+++ spamassassin/trunk/t/debug.t Fri Apr 22 17:15:57 2022
@@ -17,7 +17,7 @@ my %facility = map( ($_, 1),
message metadata mimeheader netset plugin prefork progress pyzor razor2
received-header replacetags reporter rules rules-all spamd spf textcat
timing TxRep uri uridnsbl util pdfinfo asn geodb RaciallyCharged
- PHISHTAG resourcelimits https_http_mismatch ));
+ PHISHTAG resourcelimits https_http_mismatch DMARC ));
my $fh = IO::File->new_tmpfile();
open(OLDERR, ">&STDERR");
Modified: spamassassin/trunk/t/dmarc.t
URL: http://svn.apache.org/viewvc/spamassassin/trunk/t/dmarc.t?rev=1900161&r1=1900160&r2=1900161&view=diff
==============================================================================
--- spamassassin/trunk/t/dmarc.t (original)
+++ spamassassin/trunk/t/dmarc.t Fri Apr 22 17:15:57 2022
@@ -21,30 +21,30 @@ plan skip_all => "Needs Mail::DKIM::Veri
plan tests => 9;
tstpre ("
-loadplugin Mail::SpamAssassin::Plugin::Dmarc
+loadplugin Mail::SpamAssassin::Plugin::DMARC
");
tstprefs("
header DMARC_NONE eval:check_dmarc_none()
priority DMARC_NONE 500
-describe DMARC_NONE Dmarc none policy
+describe DMARC_NONE DMARC none policy
header DMARC_QUAR eval:check_dmarc_quarantine()
priority DMARC_QUAR 500
-describe DMARC_QUAR Dmarc quarantine policy
+describe DMARC_QUAR DMARC quarantine policy
header DMARC_REJECT eval:check_dmarc_reject()
priority DMARC_REJECT 500
-describe DMARC_REJECT Dmarc reject policy
+describe DMARC_REJECT DMARC reject policy
header DMARC_MISSING eval:check_dmarc_missing()
priority DMARC_MISSING 500
-describe DMARC_MISSING Missing Dmarc policy
+describe DMARC_MISSING Missing DMARC policy
");
%patterns = ();
%anti_patterns = (
- q{ DMARC_NONE } => 'Dmarc none policy',
+ q{ DMARC_NONE } => 'DMARC none policy',
);
sarun ("-t < data/nice/dmarc/noneok.eml", \&patterns_run_cb);
@@ -53,7 +53,7 @@ clear_pattern_counters();
%anti_patterns = ();
%patterns = (
- q{ DMARC_NONE } => 'Dmarc none policy',
+ q{ DMARC_NONE } => 'DMARC none policy',
);
sarun ("-t < data/spam/dmarc/noneko.eml", \&patterns_run_cb);
@@ -62,7 +62,7 @@ clear_pattern_counters();
%patterns = ();
%anti_patterns = (
- q{ DMARC_QUAR } => 'Dmarc quarantine policy',
+ q{ DMARC_QUAR } => 'DMARC quarantine policy',
);
sarun ("-t < data/nice/dmarc/quarok.eml", \&patterns_run_cb);
@@ -71,7 +71,7 @@ clear_pattern_counters();
%anti_patterns = ();
%patterns = (
- q{ DMARC_QUAR } => 'Dmarc quarantine policy',
+ q{ DMARC_QUAR } => 'DMARC quarantine policy',
);
sarun ("-t < data/spam/dmarc/quarko.eml", \&patterns_run_cb);
@@ -80,7 +80,7 @@ clear_pattern_counters();
%patterns = ();
%anti_patterns = (
- q{ DMARC_REJECT } => 'Dmarc reject policy',
+ q{ DMARC_REJECT } => 'DMARC reject policy',
);
sarun ("-t < data/nice/dmarc/rejectok.eml", \&patterns_run_cb);
@@ -89,7 +89,7 @@ clear_pattern_counters();
%anti_patterns = ();
%patterns = (
- q{ DMARC_REJECT } => 'Dmarc reject policy',
+ q{ DMARC_REJECT } => 'DMARC reject policy',
);
sarun ("-t < data/spam/dmarc/rejectko.eml", \&patterns_run_cb);
@@ -98,7 +98,7 @@ clear_pattern_counters();
%patterns = ();
%anti_patterns = (
- q{ DMARC_REJECT } => 'Dmarc reject policy',
+ q{ DMARC_REJECT } => 'DMARC reject policy',
);
sarun ("-t < data/nice/dmarc/strictrejectok.eml", \&patterns_run_cb);
@@ -107,7 +107,7 @@ clear_pattern_counters();
%anti_patterns = ();
%patterns = (
- q{ DMARC_REJECT } => 'Dmarc reject policy',
+ q{ DMARC_REJECT } => 'DMARC reject policy',
);
sarun ("-t < data/spam/dmarc/strictrejectko.eml", \&patterns_run_cb);
@@ -116,7 +116,7 @@ clear_pattern_counters();
%anti_patterns = ();
%patterns = (
- q{ DMARC_MISSING } => 'Missing Dmarc policy',
+ q{ DMARC_MISSING } => 'Missing DMARC policy',
);
sarun ("-t < data/spam/dmarc/nodmarc.eml", \&patterns_run_cb);