fix poking into DNS HOSTS

This commit is contained in:
Oliver Gorwits
2014-04-21 22:08:50 +01:00
parent 0e329d31d2
commit 67a0e6ca22

View File

@@ -8,6 +8,13 @@ use Net::DNS;
use AnyEvent::DNS;
use NetAddr::IP::Lite ':lower';
# AE::DNS::EtcHosts only works for A/AAAA/SRV, but we want PTR.
# this loads+parses /etc/hosts file using AE. dirty hack.
use AnyEvent::Socket 'format_address';
use AnyEvent::DNS::EtcHosts;
AnyEvent::DNS::EtcHosts::_load_hosts_unless(sub{},AE::cv);
no AnyEvent::DNS::EtcHosts; # unimport
use base 'Exporter';
our @EXPORT = ();
our @EXPORT_OK = qw/
@@ -94,27 +101,16 @@ addresses which resolved.
=cut
# AE::DNS::EtcHosts only works for A/AAAA/SRV, but we want PTR.
# this loads+parses /etc/hosts file using AE. dirty hack.
BEGIN {
use AnyEvent::Socket 'format_address';
use AnyEvent::DNS::EtcHosts;
AnyEvent::DNS::EtcHosts::_load_hosts_unless(sub{},AE::cv);
no AnyEvent::DNS::EtcHosts; # unimport
$AnyEvent::DNS::EtcHosts::HOSTS{$_}
= [ map { [ format_address $_->[0] ] }
@{$AnyEvent::DNS::EtcHosts::HOSTS{$_}} ]
for keys %AnyEvent::DNS::EtcHosts::HOSTS;
}
sub hostnames_resolve_async {
my $ips = shift;
my $resolver = AnyEvent::DNS->new();
my %HOSTS = ();
$HOSTS{$_} = [ map { [ format_address $_->[0] ] }
@{$AnyEvent::DNS::EtcHosts::HOSTS{$_}} ]
for keys %AnyEvent::DNS::EtcHosts::HOSTS;
# Set up the condvar
my $done = AE::cv;
$done->begin( sub { shift->send } );
@@ -124,8 +120,8 @@ sub hostnames_resolve_async {
next IP if no_resolve($ip);
# check /etc/hosts file and short-circuit if found
foreach my $name (reverse sort keys %AnyEvent::DNS::EtcHosts::HOSTS) {
if ($AnyEvent::DNS::EtcHosts::HOSTS{$name}->[0]->[0] eq $ip) {
foreach my $name (reverse sort keys %HOSTS) {
if ($HOSTS{$name}->[0]->[0] eq $ip) {
$hash_ref->{'dns'} = $name;
next IP;
}