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;