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;