You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spamassassin.apache.org by jm...@apache.org on 2005/12/15 00:54:21 UTC

svn commit: r356946 - /spamassassin/trunk/lib/Mail/SpamAssassin/DnsResolver.pm

Author: jm
Date: Wed Dec 14 15:54:19 2005
New Revision: 356946

URL: http://svn.apache.org/viewcvs?rev=356946&view=rev
Log:
bug 4735: lack of network interfaces causes 'spamassassin -L' to crash

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

Modified: spamassassin/trunk/lib/Mail/SpamAssassin/DnsResolver.pm
URL: http://svn.apache.org/viewcvs/spamassassin/trunk/lib/Mail/SpamAssassin/DnsResolver.pm?rev=356946&r1=356945&r2=356946&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/DnsResolver.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/DnsResolver.pm Wed Dec 14 15:54:19 2005
@@ -63,7 +63,6 @@
   bless ($self, $class);
 
   $self->load_resolver();
-  $self->connect_sock();
   $self;
 }
 
@@ -159,6 +158,7 @@
 sub nameservers {
   my $self = shift;
   my $res = $self->{res};
+  $self->connect_sock_if_reqd();
   return $res->nameservers(@_) if $res;
 }
 
@@ -223,14 +223,26 @@
     } elsif ($! == EADDRINUSE) {  # in use, let's try another source port
       dbg("dns: UDP port $lport already in use, trying another port");
     } else {
-      die "Error creating a DNS resolver socket: $errno";
+      warn "Error creating a DNS resolver socket: $errno";
+      goto no_sock;
     }
   }
-  defined $sock or die "Can't create a DNS resolver socket: $errno";
+  if (!defined $sock) {
+    warn "Can't create a DNS resolver socket: $errno";
+    goto no_sock;
+  }
 
   $self->{sock} = $sock;
-
   $self->{sock_as_vec} = $self->fhs_to_vec($self->{sock});
+  return;
+
+no_sock:
+  $self->{no_resolver} = 1;
+}
+
+sub connect_sock_if_reqd {
+  my ($self) = @_;
+  $self->connect_sock() if !$self->{sock};
 }
 
 =item $res->get_sock()
@@ -242,6 +254,7 @@
 
 sub get_sock {
   my ($self) = @_;
+  $self->connect_sock_if_reqd();
   return $self->{sock};
 }
 
@@ -266,6 +279,7 @@
 
   return if $self->{no_resolver};
 
+  $self->connect_sock_if_reqd();
   my $packet;
   eval {
     $packet = Net::DNS::Packet->new($host, $type, $class);
@@ -339,7 +353,7 @@
   my $pkt = $self->new_dns_packet($host, $type, $class);
 
   my $data = $pkt->data;
-  $self->connect_sock() if !$self->{sock};
+  $self->connect_sock_if_reqd();
   if (!$self->{sock}->send ($pkt->data, 0)) {
     warn "dns: sendto() failed: $@";
     return;