App-DNS-Adblock
view release on metacpan or search on metacpan
lib/App/DNS/Adblock.pm view on Meta::CPAN
$self->log("nameserver accessible locally @ $self->{host}", 1);
$self->{nameserver}->main_loop;
};
sub set_local_dns {
my ( $self ) = shift;
my $stdout;
my $stderr;
my @result;
if ($^O =~ /darwin/i) { # is osx
eval {
($self->{service}, $stderr, @result) = capture { system("networksetup -listallhardwareports | grep -B 1 $self->{interface} | cut -c 16-32") };
if ($stderr || ($result[0] < 0)) {
die $stderr || $result[0];
} else {
$self->{service} =~ s/\n//g;
system("networksetup -setdnsservers $self->{service} $self->{host}");
system("networksetup -setsearchdomains $self->{service} empty");
}
}
}
if (!grep { $^O eq $_ } qw(VMS MSWin32 os2 dos MacOS darwin NetWare beos vos)) { # is unix
eval {
($stdout, $stderr, @result) = capture { system("cp /etc/resolv.conf /etc/resolv.bk") };
if ($stderr || ($result[0] < 0)) {
die $stderr || $result[0];
} else {
open(CONF, ">", "/etc/resolv.conf");
print CONF "nameserver $self->{host}\n";
close CONF;
}
}
}
if ($stderr||$result[0]) {
$self->log("switching of local dns settings failed: $@", 1);
undef $self->{setdns};
} else {
$self->log("local dns settings ($self->{interface}) switched", 1);
}
}
sub restore_local_dns {
my ( $self ) = shift;
my $stdout;
my $stderr;
my @result;
if ($^O =~ /darwin/i) { # is osx
eval {
($stdout, $stderr, @result) = capture { system("networksetup -setdnsservers $self->{service} empty") };
if ($stderr || ($result[0] < 0)) {
die $stderr || $result[0];
} else {
system("networksetup -setsearchdomains $self->{service} empty");
}
}
}
if (!grep { $^O eq $_ } qw(VMS MSWin32 os2 dos MacOS darwin NetWare beos vos)) { # is unix
eval {
($stdout, $stderr, @result) = capture { system("mv /etc/resolv.bk /etc/resolv.conf") };
die $stderr || $result[0];
}
}
($stderr||$result[0]) ? $self->log("local dns settings failed to restore: $@", 1)
: $self->log("local dns settings restored", 1);
}
sub signal_handler {
my ( $self, $signal ) = @_;
$self->log("shutting down: signal $signal");
$self->restore_local_dns() if $self->{setdns};
( run in 0.705 second using v1.01-cache-2.11-cpan-49f99fa48dc )