You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spamassassin.apache.org by mm...@apache.org on 2015/10/08 18:13:17 UTC
svn commit: r1707578 - in /spamassassin/trunk/lib/Mail/SpamAssassin:
PerMsgStatus.pm Plugin/DKIM.pm
Author: mmartinec
Date: Thu Oct 8 16:13:17 2015
New Revision: 1707578
URL: http://svn.apache.org/viewvc?rev=1707578&view=rev
Log:
Bug 7215: Towards supporting IDNA - tags AUTHORDOMAIN and SENDERDOMAIN to ACE, add metadata X-AuthorDomain and X-SenderDomain (to facilitate testing)
Modified:
spamassassin/trunk/lib/Mail/SpamAssassin/PerMsgStatus.pm
spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/DKIM.pm
Modified: spamassassin/trunk/lib/Mail/SpamAssassin/PerMsgStatus.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/PerMsgStatus.pm?rev=1707578&r1=1707577&r2=1707578&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/PerMsgStatus.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/PerMsgStatus.pm Thu Oct 8 16:13:17 2015
@@ -59,7 +59,7 @@ use Time::HiRes qw(time);
use Mail::SpamAssassin::Constants qw(:sa);
use Mail::SpamAssassin::AsyncLoop;
use Mail::SpamAssassin::Conf;
-use Mail::SpamAssassin::Util qw(untaint_var uri_list_canonicalize);
+use Mail::SpamAssassin::Util qw(untaint_var uri_list_canonicalize idn_to_ascii);
use Mail::SpamAssassin::Timeout;
use Mail::SpamAssassin::Logger;
@@ -1694,23 +1694,28 @@ sub extract_message_metadata {
$self->{$item} = $self->{msg}->{metadata}->{$item};
}
- # TODO: International domain names (UTF-8) must be converted to
- # ASCII-compatible encoding (ACE) for the purpose of setting the
- # SENDERDOMAIN and AUTHORDOMAIN tags (and probably for other uses too).
- # (explicitly required for DMARC, draft-kucherawy-dmarc-base sect. 5.6.1)
+ # International domain names (UTF-8) must be converted to ASCII-compatible
+ # encoding (ACE) for the purpose of setting the SENDERDOMAIN and AUTHORDOMAIN
+ # tags (explicitly required for DMARC, RFC 7489)
#
{ local $1;
my $addr = $self->get('EnvelopeFrom:addr', undef);
# collect a FQDN, ignoring potential trailing WSP
if (defined $addr && $addr =~ /\@([^@. \t]+\.[^@ \t]+?)[ \t]*\z/s) {
- $self->set_tag('SENDERDOMAIN', lc $1);
+ my $d = idn_to_ascii($1);
+ $self->set_tag('SENDERDOMAIN', $d);
+ $self->{msg}->put_metadata("X-SenderDomain", $d);
+ dbg("metadata: X-SenderDomain: %s", $d);
}
# TODO: the get ':addr' only returns the first address; this should be
# augmented to be able to return all addresses in a header field, multiple
# addresses in a From header field are allowed according to RFC 5322
$addr = $self->get('From:addr', undef);
if (defined $addr && $addr =~ /\@([^@. \t]+\.[^@ \t]+?)[ \t]*\z/s) {
- $self->set_tag('AUTHORDOMAIN', lc $1);
+ my $d = idn_to_ascii($1);
+ $self->set_tag('AUTHORDOMAIN', $d);
+ $self->{msg}->put_metadata("X-AuthorDomain", $d);
+ dbg("metadata: X-AuthorDomain: %s", $d);
}
}
Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/DKIM.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/DKIM.pm?rev=1707578&r1=1707577&r2=1707578&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/DKIM.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/DKIM.pm Thu Oct 8 16:13:17 2015
@@ -122,6 +122,7 @@ package Mail::SpamAssassin::Plugin::DKIM
use Mail::SpamAssassin::Plugin;
use Mail::SpamAssassin::Logger;
use Mail::SpamAssassin::Timeout;
+use Mail::SpamAssassin::Util qw(idn_to_ascii);
use strict;
use warnings;
@@ -1047,12 +1048,13 @@ sub _check_dkim_adsp {
my $err = $timer->run_and_catch(sub {
eval {
if (Mail::DKIM::AuthorDomainPolicy->UNIVERSAL::can("fetch")) {
+ my $author_domain_ace = idn_to_ascii($author_domain);
dbg("dkim: adsp: performing lookup on _adsp._domainkey.%s",
- $author_domain);
+ $author_domain_ace);
# get our Net::DNS::Resolver object
my $res = $self->{main}->{resolver}->get_resolver;
$practices = Mail::DKIM::AuthorDomainPolicy->fetch(
- Protocol => "dns", Domain => $author_domain,
+ Protocol => "dns", Domain => $author_domain_ace,
DnsResolver => $res);
}
1;