sub get_dns_status
{
-if (&has_command("nslookup")) {
+if (&has_command("dig")) {
+ local $out;
+ &execute_command("dig \@".quotemeta($_[0]->{'server'})." ".
+ quotemeta($_[0]->{'host'}), undef, \$out, \$out);
+ return $out =~ /\Q$_[0]->{'host'}.\E\s+\S+\s+IN\s+A\s+\Q$_[0]->{'address'}\E/ ? { 'up' => 1 } : { 'up' => 0 };
+ }
+elsif (&has_command("nslookup")) {
local $out;
local $cmd = "server $_[0]->{'server'}\n$_[0]->{'host'}\n";
&execute_command("nslookup", \$cmd, \$out, \$out);
return $out =~ /\Q$_[0]->{'address'}\E/ ? { 'up' => 1 }
: { 'up' => 0 };
}
-elsif (&has_command("dig")) {
- local $out;
- &execute_command("dig \@".quotemeta($_[0]->{'server'})." ".
- quotemeta($_[0]->{'host'}), undef, \$out, \$out);
- return $out =~ /\Q$_[0]->{'host'}.\E\s+\S+\s+IN\s+A\s+\Q$_[0]->{'address'}\E/ ? { 'up' => 1 } : { 'up' => 0 };
- }
else {
return { 'up' => - 1 };
}
{
&has_command("nslookup") || &has_command("dig") ||
&error($text{'dns_ecmds'});
-gethostbyname($in{'server'}) || &error($text{'dns_eserver'});
+&to_ipaddress($in{'server'}) || &to_ip6address($in{'server'}) ||
+ &error($text{'dns_eserver'});
$_[0]->{'server'} = $in{'server'};
$in{'host'} =~ /^[a-z0-9\.\-\_]+$/i || &error($text{'dns_ehost'});
$_[0]->{'host'} = $in{'host'};
sub get_ping_status
{
local $wait = defined($_[0]->{'wait'}) ? $_[0]->{'wait'} : 5;
-local $ip = inet_aton($_[0]->{'host'});
+local $ip = &to_ipaddress($_[0]->{'host'}) ||
+ &to_ip6address($_[0]->{'host'});
return { 'up' => 0 } if (!$ip);
-if ($config{'pinger'}) {
- # Call a ping command
+local $ipv6 = &to_ip6address($_[0]->{'host'}) &&
+ !&to_ipaddress($_[0]->{'host'});
+if ($config{'pinger'} || $ipv6) {
+ # Call a ping command if configured, or if using IPv6 since the built-
+ # in code doesn't support it yet
local $cmd;
- if ($config{'pinger'} eq "linux" &&
- $gconfig{'os_type'} =~ /-linux$/) {
+ local $auto_pinger = $config{'pinger'} eq "linux" || !$config{'pinger'};
+ if ($auto_pinger && $gconfig{'os_type'} =~ /-linux$/) {
# Use linux command
- $cmd = "ping -c 1 -w $wait";
+ $cmd = ($ipv6 ? "ping6" : "ping")." -c 1 -w $wait";
}
- elsif ($config{'pinger'} eq "linux" &&
- $gconfig{'os_type'} eq 'freebsd') {
+ elsif ($auto_pinger && $gconfig{'os_type'} eq 'freebsd') {
# Use FreeBSD command
- $cmd = "ping -c 1 -W ".($wait * 1000);
+ $cmd = ($ipv6 ? "ping6" : "ping")." -c 1 -W ".($wait * 1000);
}
- elsif ($config{'pinger'} eq "linux") {
+ elsif ($auto_pinger) {
# Don't know command for this OS
return { 'up' => - 1 };
}
sub parse_ping_dialog
{
#$config{'ping_cmd'} || &error($text{'ping_econfig'});
-&check_ipaddress($in{'host'}) || gethostbyname($in{'host'}) ||
+&to_ipaddress($in{'host'}) || &to_ip6address($in{'host'}) ||
&error($text{'ping_ehost'});
$in{'wait'} =~ /^(\d*\.)?\d+$/ || &error($text{'ping_ewait'});
$_[0]->{'host'} = $in{'host'};
delete($_[0]->{'host'});
}
else {
- gethostbyname($in{'host'}) || &error($text{'query_ehost'});
+ &to_ipaddress($in{'host'}) || &to_ip6address($in{'host'}) ||
+ &error($text{'query_ehost'});
$_[0]->{'host'} = $in{'host'};
}
}
else {
if (!$in{'from_def'}) {
- gethostbyname($in{'smtp'}) || &check_ipaddress($in{'smtp'}) ||
+ &to_ipaddress($in{'smtp'}) || &to_ip6address($in{'smtp'}) ||
&error($text{'sched_esmtp'});
}
$config{'sched_smtp'} = $in{'smtp'};
sub parse_tcp_dialog
{
-&check_ipaddress($in{'host'}) || gethostbyname($in{'host'}) ||
+&to_ipaddress($in{'host'}) || &to_ip6address($in{'host'}) ||
&error($text{'tcp_ehost'});
$_[0]->{'host'} = $in{'host'};