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 2021/05/02 10:29:05 UTC
svn commit: r1889397 - in /spamassassin/trunk/lib/Mail/SpamAssassin: Dns.pm
DnsResolver.pm Plugin/ASN.pm Plugin/AskDNS.pm Plugin/URIDNSBL.pm
Author: hege
Date: Sun May 2 10:29:05 2021
New Revision: 1889397
URL: http://svn.apache.org/viewvc?rev=1889397&view=rev
Log:
Clean out some historic Net::DNS stuff
Modified:
spamassassin/trunk/lib/Mail/SpamAssassin/Dns.pm
spamassassin/trunk/lib/Mail/SpamAssassin/DnsResolver.pm
spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/ASN.pm
spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/AskDNS.pm
spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/URIDNSBL.pm
Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Dns.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/Dns.pm?rev=1889397&r1=1889396&r2=1889397&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Dns.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Dns.pm Sun May 2 10:29:05 2021
@@ -79,10 +79,6 @@ BEGIN {
no warnings;
eval {
- require Net::DNS;
- require Net::DNS::Resolver;
- };
- eval {
require MIME::Base64;
};
eval {
@@ -152,7 +148,7 @@ sub dnsbl_hit {
# txtdata returns a non- zone-file-format encoded result, unlike rdstring;
# avoid space-separated RDATA <character-string> fields if possible,
# txtdata provides a list of strings in a list context since Net::DNS 0.69
- $log = join('',$answer->txtdata);
+ $log = join('', $answer->txtdata);
utf8::encode($log) if utf8::is_utf8($log);
local $1;
$log =~ s{ (?<! [<(\[] ) (https? : // \S+)}{<$1>}xgi;
@@ -189,15 +185,14 @@ sub dnsbl_uri {
# txtdata returns a non- zone-file-format encoded result, unlike rdstring;
# avoid space-separated RDATA <character-string> fields if possible,
# txtdata provides a list of strings in a list context since Net::DNS 0.69
- $rdatastr = join('',$answer->txtdata);
+ $rdatastr = join('', $answer->txtdata);
} else {
- # rdatastr() is historical/undocumented, use rdstring() since Net::DNS 0.69
- $rdatastr = $answer->UNIVERSAL::can('rdstring') ? $answer->rdstring
- : $answer->rdatastr;
+ $rdatastr = $answer->rdstring;
# encoded in a RFC 1035 zone file format (escaped), decode it
$rdatastr =~ s{ \\ ( [0-9]{3} | (?![0-9]{3}) . ) }
{ length($1)==3 && $1 <= 255 ? chr($1) : $1 }xgse;
}
+
# Bug 7236: Net::DNS attempts to decode text strings in a TXT record as
# UTF-8 since version 0.69, which is undesired: octets failing the UTF-8
# decoding are converted to a Unicode "replacement character" U+FFFD, and
@@ -241,11 +236,9 @@ sub process_dnsbl_result {
# txtdata returns a non- zone-file-format encoded result, unlike rdstring;
# avoid space-separated RDATA <character-string> fields if possible,
# txtdata provides a list of strings in a list context since Net::DNS 0.69
- $rdatastr = join('',$answer->txtdata);
+ $rdatastr = join('', $answer->txtdata);
} else {
- # rdatastr() is historical/undocumented, use rdstring() since Net::DNS 0.69
- $rdatastr = $answer->UNIVERSAL::can('rdstring') ? $answer->rdstring
- : $answer->rdatastr;
+ $rdatastr = $answer->rdstring;
# encoded in a RFC 1035 zone file format (escaped), decode it
$rdatastr =~ s{ \\ ( [0-9]{3} | (?![0-9]{3}) . ) }
{ length($1)==3 && $1 <= 255 ? chr($1) : $1 }xgse;
@@ -538,22 +531,6 @@ sub is_dns_available {
return $IS_DNS_AVAILABLE;
}
- # Check version numbers - runtime check only
- if (defined $Net::DNS::VERSION) {
- if (am_running_on_windows()) {
- if ($Net::DNS::VERSION < 0.46) {
- warn("dns: Net::DNS version is $Net::DNS::VERSION, but need 0.46 for Win32\n");
- return $IS_DNS_AVAILABLE;
- }
- }
- else {
- if ($Net::DNS::VERSION < 0.34) {
- warn("dns: Net::DNS version is $Net::DNS::VERSION, but need 0.34\n");
- return $IS_DNS_AVAILABLE;
- }
- }
- }
-
#$self->clear_resolver();
if (!$self->load_resolver()) {
dbg("dns: could not load resolver, DNS not available");
Modified: spamassassin/trunk/lib/Mail/SpamAssassin/DnsResolver.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/DnsResolver.pm?rev=1889397&r1=1889396&r2=1889397&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/DnsResolver.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/DnsResolver.pm Sun May 2 10:29:05 2021
@@ -51,11 +51,14 @@ use Mail::SpamAssassin::Util qw(untaint_
use Socket;
use Errno qw(EADDRINUSE EACCES);
use Time::HiRes qw(time);
+use version 0.77;
our @ISA = qw();
+our $have_net_dns;
our $io_socket_module_name;
BEGIN {
+ $have_net_dns = eval { require Net::DNS; };
if (eval { require IO::Socket::IP }) {
$io_socket_module_name = 'IO::Socket::IP';
} elsif (eval { require IO::Socket::INET6 }) {
@@ -79,7 +82,6 @@ sub new {
};
bless ($self, $class);
- $self->load_resolver();
$self;
}
@@ -124,7 +126,9 @@ sub load_resolver {
}
eval {
- require Net::DNS;
+ die "Net::DNS required\n" if !$have_net_dns;
+ die "Net::DNS 0.69 required\n"
+ if (version->parse(Net::DNS->VERSION) < version->parse(0.69));
# force_v4 is set in new() to avoid error in older versions of Net::DNS
# that don't have it; other options are set by function calls so a typo
# or API change will cause an error here
@@ -164,7 +168,7 @@ sub load_resolver {
1;
} or do {
my $eval_stat = $@ ne '' ? $@ : "errno=$!"; chomp $eval_stat;
- dbg("dns: eval failed: $eval_stat");
+ warn("dns: resolver create failed: $eval_stat\n");
};
dbg("dns: using socket module: %s version %s%s",
@@ -592,17 +596,11 @@ sub new_dns_packet {
# RD flag needs to be set explicitly since Net::DNS 1.01, Bug 7223
$packet->header->rd(1);
- # my $udp_payload_size = $self->{res}->udppacketsize;
+ # my $udp_payload_size = $self->{res}->udppacketsize;
my $udp_payload_size = $self->{conf}->{dns_options}->{edns};
if ($udp_payload_size && $udp_payload_size > 512) {
- # dbg("dns: adding EDNS ext, UDP payload size %d", $udp_payload_size);
- if ($packet->UNIVERSAL::can('edns')) { # available since Net::DNS 0.69
- $packet->edns->size($udp_payload_size);
- } else { # legacy mechanism
- my $optrr = Net::DNS::RR->new(Type => 'OPT', Name => '', TTL => 0,
- Class => $udp_payload_size);
- $packet->push('additional', $optrr);
- }
+ # dbg("dns: adding EDNS ext, UDP payload size %d", $udp_payload_size);
+ $packet->edns->size($udp_payload_size);
}
}
Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/ASN.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/ASN.pm?rev=1889397&r1=1889396&r2=1889397&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/ASN.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/ASN.pm Sun May 2 10:29:05 2021
@@ -131,14 +131,11 @@ use re 'taint';
use Mail::SpamAssassin::Plugin;
use Mail::SpamAssassin::Logger;
use Mail::SpamAssassin::Util qw(reverse_ip_address compile_regexp);
-use Mail::SpamAssassin::Dns;
use Mail::SpamAssassin::Constants qw(:ip);
use version 0.77;
our @ISA = qw(Mail::SpamAssassin::Plugin);
-our $txtdata_can_provide_a_list;
-
sub new {
my ($class, $mailsa) = @_;
$class = ref($class) || $class;
@@ -149,10 +146,6 @@ sub new {
$self->set_config($mailsa->{conf});
- #$txtdata_can_provide_a_list = Net::DNS->VERSION >= 0.69;
- #more robust version check from Damyan Ivanov - Bug 7095
- $txtdata_can_provide_a_list = version->parse(Net::DNS->VERSION) >= version->parse('0.69');
-
# we need GeoDB ASN
$self->{main}->{geodb_wanted}->{asn} = 1;
@@ -501,8 +494,7 @@ sub process_dns_result {
foreach my $rr (@answer) {
#dbg("asn: %s: lookup result packet: %s", $zone, $rr->string);
next if $rr->type ne 'TXT';
- my @strings = $txtdata_can_provide_a_list ? $rr->txtdata :
- $rr->char_str_list; # historical
+ my @strings = $rr->txtdata;
next if !@strings;
for (@strings) { utf8::encode($_) if utf8::is_utf8($_) }
Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/AskDNS.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/AskDNS.pm?rev=1889397&r1=1889396&r2=1889397&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/AskDNS.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/AskDNS.pm Sun May 2 10:29:05 2021
@@ -210,8 +210,6 @@ our %rcode_value = ( # https://www.iana
BADMODE => 19, BADNAME => 20, BADALG => 21, BADTRUNC => 22,
);
-our $txtdata_can_provide_a_list;
-
sub new {
my($class,$sa_main) = @_;
@@ -221,10 +219,6 @@ sub new {
$self->set_config($sa_main->{conf});
- #$txtdata_can_provide_a_list = Net::DNS->VERSION >= 0.69;
- #more robust version check from Damyan Ivanov - Bug 7095
- $txtdata_can_provide_a_list = version->parse(Net::DNS->VERSION) >= version->parse('0.69');
-
return $self;
}
@@ -510,20 +504,14 @@ sub process_response_packet {
} else {
$rr_type = uc $rr->type;
if ($rr_type eq 'A') {
- # Net::DNS::RR::A::address() is available since Net::DNS 0.69
- $rr_rdatastr = $rr->UNIVERSAL::can('address') ? $rr->address
- : $rr->rdatastr;
+ $rr_rdatastr = $rr->address;
if ($rr_rdatastr =~ m/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\z/) {
$rdatanum = Mail::SpamAssassin::Util::my_inet_aton($rr_rdatastr);
}
} elsif ($rr->UNIVERSAL::can('txtdata')) {
# TXT, SPF: join with no intervening spaces, as per RFC 5518
- if ($txtdata_can_provide_a_list || $rr_type ne 'TXT') {
- $rr_rdatastr = join('', $rr->txtdata); # txtdata() in list context!
- } else { # char_str_list() is only available for TXT records
- $rr_rdatastr = join('', $rr->char_str_list); # historical
- }
+ $rr_rdatastr = join('', $rr->txtdata); # txtdata() in list context!
# Net::DNS attempts to decode text strings in a TXT record as UTF-8,
# which is undesired: octets failing the UTF-8 decoding are converted
# to a Unicode "replacement character" U+FFFD (encoded as octets
@@ -536,9 +524,7 @@ sub process_response_packet {
utf8::encode($rr_rdatastr) if utf8::is_utf8($rr_rdatastr);
} else {
- # rdatastr() is historical, use rdstring() since Net::DNS 0.69
- $rr_rdatastr = $rr->UNIVERSAL::can('rdstring') ? $rr->rdstring
- : $rr->rdatastr;
+ $rr_rdatastr = $rr->rdstring;
utf8::encode($rr_rdatastr) if utf8::is_utf8($rr_rdatastr);
}
# dbg("askdns: received rr type %s, data: %s", $rr_type, $rr_rdatastr);
Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/URIDNSBL.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/URIDNSBL.pm?rev=1889397&r1=1889396&r2=1889397&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/URIDNSBL.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/URIDNSBL.pm Sun May 2 10:29:05 2021
@@ -1007,9 +1007,7 @@ sub complete_a_lookup {
foreach my $rr (@answer) {
$j++;
next if $rr->type ne 'A';
- # Net::DNS::RR::A::address() is available since Net::DNS 0.69
- my $ip_address = $rr->UNIVERSAL::can('address') ? $rr->address
- : $rr->rdatastr;
+ my $ip_address = $rr->address;
dbg("uridnsbl: complete_a_lookup got(%d) A for %s: %s",
$j, $ent->{lookup}, $ip_address);
$self->lookup_dnsbl_for_ip($pms, $ip_address, $ent);
@@ -1081,9 +1079,7 @@ sub complete_dnsbl_lookup {
my $rr_type = $rr->type;
if ($rr_type eq 'A') {
- # Net::DNS::RR::A::address() is available since Net::DNS 0.69
- $rdatastr = $rr->UNIVERSAL::can('address') ? $rr->address
- : $rr->rdatastr;
+ $rdatastr = $rr->address;
if ($rdatastr =~ IS_IPV4_ADDRESS) {
$rdatanum = Mail::SpamAssassin::Util::my_inet_aton($rdatastr);
}
@@ -1091,7 +1087,7 @@ sub complete_dnsbl_lookup {
# txtdata returns a non- zone-file-format encoded result, unlike rdstring;
# avoid space-separated RDATA <character-string> fields if possible;
# txtdata provides a list of strings in list context since Net::DNS 0.69
- $rdatastr = join('',$rr->txtdata);
+ $rdatastr = join('', $rr->txtdata);
utf8::encode($rdatastr) if utf8::is_utf8($rdatastr);
} else {
next;