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 2012/07/26 15:29:26 UTC

svn commit: r1365983 - in /spamassassin/trunk/lib/Mail/SpamAssassin: DnsResolver.pm Plugin/URIDNSBL.pm

Author: mmartinec
Date: Thu Jul 26 13:29:26 2012
New Revision: 1365983

URL: http://svn.apache.org/viewvc?rev=1365983&view=rev
Log:
Bug 6819: Avoiding some DNS lookup failure warnings

Modified:
    spamassassin/trunk/lib/Mail/SpamAssassin/DnsResolver.pm
    spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/URIDNSBL.pm

Modified: spamassassin/trunk/lib/Mail/SpamAssassin/DnsResolver.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/DnsResolver.pm?rev=1365983&r1=1365982&r2=1365983&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/DnsResolver.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/DnsResolver.pm Thu Jul 26 13:29:26 2012
@@ -463,14 +463,17 @@ sub new_dns_packet {
     $packet = Net::DNS::Packet->new($host, $type, $class);
 
     # a bit noisy, so commented by default...
-    #dbg("dns: new DNS packet time=%s host=%s type=%s id=%s",
+    #dbg("dns: new DNS packet time=%.3f host=%s type=%s id=%s",
     #    time, $host, $type, $packet->id);
     1;
   } or do {
-    my $eval_stat = $@ ne '' ? $@ : "errno=$!";  chomp $eval_stat;
     # this can happen if Net::DNS isn't available -- but in this
     # case this function should never be called!
-    warn "dns: cannot create Net::DNS::Packet, but new_dns_packet() was called: $eval_stat";
+    # another possible failure reason: "unexpected null domain label"
+    my $eval_stat = $@ ne '' ? $@ : "errno=$!";  chomp $eval_stat;
+    warn sprintf("dns: new_dns_packet (host=%s type=%s class=%s id=%s): ".
+                 "cannot create Net::DNS::Packet: %s",
+                 $host, $type, $class, $packet->id, $eval_stat);
   };
 
   return $packet;
@@ -549,6 +552,7 @@ sub bgsend {
   $self->{send_timed_out} = 0;
 
   my $pkt = $self->new_dns_packet($host, $type, $class);
+  return if !$pkt;  # just bail out, new_dns_packet already reported a failure
 
   my @ns_addr_port = $self->available_nameservers();
   dbg("dns: bgsend, DNS servers: %s", join(', ',@ns_addr_port));

Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/URIDNSBL.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/URIDNSBL.pm?rev=1365983&r1=1365982&r2=1365983&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/URIDNSBL.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/URIDNSBL.pm Thu Jul 26 13:29:26 2012
@@ -995,12 +995,19 @@ sub complete_a_lookup {
   my ($self, $scanner, $ent, $hname) = @_;
 
   my $packet = $ent->{response_packet};
-  my @answer = !defined $packet ? () : $packet->answer;
+  my @answer;
+  @answer = $packet->answer  if $packet;
   my $j = 0;
   foreach my $rr (@answer) {
     $j++;
     my $str = $rr->string;
-    dbg("uridnsbl: got($j) A for $hname: $str");
+    if (!defined $hname) {
+      warn "complete_a_lookup-1: $j, (hname is undef), $str";
+    } elsif (!defined $str) {
+      warn "complete_a_lookup-2: $j, $hname, (str is undef)";
+      next;
+    }
+    dbg("uridnsbl: complete_a_lookup got(%d) A for %s: %s", $j,$hname,$str);
 
     local $1;
     if ($str =~ /IN\s+A\s+(\S+)/) {
@@ -1168,7 +1175,14 @@ sub completed_lookup_callback {
   my ($self, $scanner, $ent) = @_;
   my $type = $ent->{type};
   my $key = $ent->{key};
-  local $1; $key =~ /:(\S+?)$/; my $val = $1;
+  my $val = $key; $val =~ s/^[^:]*://s;
+
+  # key could be:  "A:link.software-dispa tch.intel.com"
+  #                "A:reba b324.storedrugs.ru"
+  #   <a href="http://Reba B324.storedrugs.ru/item/...>
+  #
+  dbg("uridnsbl: completed_lookup_callback type=%s, key=%s, val=%s",
+      $type, $key, $val);
 
   if ($type eq 'URI-NS') {
     $self->complete_ns_lookup ($scanner, $ent, $val);