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 2020/07/09 09:52:45 UTC

svn commit: r1879692 - /spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/DKIM.pm

Author: hege
Date: Thu Jul  9 09:52:45 2020
New Revision: 1879692

URL: http://svn.apache.org/viewvc?rev=1879692&view=rev
Log:
Bug 7831 - DKIM_VALID_AU does not get set properly when mailing from a subdomain

Modified:
    spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/DKIM.pm

Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/DKIM.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/DKIM.pm?rev=1879692&r1=1879691&r2=1879692&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/DKIM.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/DKIM.pm Thu Jul  9 09:52:45 2020
@@ -561,9 +561,10 @@ sub check_dkim_valid_author_sig {
 sub check_dkim_valid_envelopefrom {
   my ($self, $pms, $full_ref) = @_;
   my $result = 0;
-  my $envfrom=$self->{'main'}->{'registryboundaries'}->uri_to_domain($pms->get("EnvelopeFrom"));
+  my ($envfrom) = ($pms->get('EnvelopeFrom:addr')||'') =~ /\@(\S+)/;
   # if no envelopeFrom, it cannot be valid
-  return $result if !$envfrom;
+  return $result if !defined $envfrom;
+  $envfrom = lc $envfrom;
   $self->_check_dkim_signature($pms)  if !$pms->{dkim_checked_signature};
   if (!$pms->{dkim_valid}) {
     # don't bother
@@ -720,8 +721,8 @@ sub _check_dkim_signed_by {
       next if $minimum_key_bits && $sig->{_spamassassin_key_size} &&
               $sig->{_spamassassin_key_size} < $minimum_key_bits;
     }
-    my $sdid = $sig->domain;
-    next if !defined $sdid;  # a signature with a missing required tag 'd' ?
+    my ($sdid) = $sig->identity =~ /\@(\S+)/;
+    next if !defined $sdid;  # a signature with a missing required tag 'd' or 'i' ?
     $sdid = lc $sdid;
     if ($must_be_author_domain_signature) {
       next if !$pms->{dkim_author_domains}->{$sdid};
@@ -909,7 +910,7 @@ sub _check_dkim_signature {
       push(@valid_signatures, $signature)  if $valid && !$expired;
 
       # check if we have a potential Author Domain Signature, valid or not
-      my $d = $signature->domain;
+      my ($d) = $signature->identity =~ /\@(\S+)/;
       if (!defined $d) {
         # can be undefined on a broken signature with missing required tags
       } else {
@@ -1261,7 +1262,7 @@ sub _wlcheck_list {
       }
     }
 
-    my $sdid = $signature->domain;
+    my ($sdid) = $signature->identity =~ /\@(\S+)/;
     $sdid = lc $sdid  if defined $sdid;
 
     my %tried_authors;
@@ -1279,7 +1280,7 @@ sub _wlcheck_list {
 
       my $matches = 0;
       if (!defined $sdid) {
-        # don't bother, invalid signature with a missing 'd' tag
+        # don't bother, invalid signature with a missing 'd' or 'i' tag
 
       } elsif (!defined $acceptable_sdid || $acceptable_sdid eq '') {
         # An "Author Domain Signature" (sometimes called a first-party