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);