our
$VERSION
= (
qw$Id: os390.pm 2007 2025-02-08 16:45:23Z willem $
)[2];
my
$path
=
$ENV
{PATH};
local
$ENV
{PATH} =
join
':'
,
grep
{
$_
}
qw(/bin /usr/bin)
,
$path
;
my
$sysname
=
eval
{`sysvar SYSNAME 2>/dev/null`} ||
''
;
chomp
$sysname
;
my
%RESOLVER_SETUP
;
my
@dataset
= (
$RESOLVER_SETUP
{GLOBALTCPIPDATA},
$ENV
{RESOLVER_CONFIG},
"/etc/resolv.conf"
,
$RESOLVER_SETUP
{SYSTCPD},
"//TCPIP.DATA"
,
"//'${sysname}.TCPPARMS(TCPDATA)'"
,
"//'SYS1.TCPPARMS(TCPDATA)'"
,
$RESOLVER_SETUP
{DEFAULTTCPIPDATA},
"//'TCPIP.TCPIP.DATA'"
);
my
$homedir
=
$ENV
{HOME};
my
$dotfile
=
'.resolv.conf'
;
my
@dotfile
=
grep
{ -f
$_
&& -o
$_
}
map
{
"$_/$dotfile"
}
grep
{
$_
}
$homedir
,
'.'
;
my
%option
= (
NSPORTADDR
=>
'port'
,
RESOLVERTIMEOUT
=>
'retrans'
,
RESOLVERUDPRETRIES
=>
'retry'
,
SORTLIST
=>
'sortlist'
,
);
sub
_init {
my
$defaults
=
shift
->_defaults;
my
%stop
;
local
$ENV
{PATH} =
join
':'
,
grep
{
$_
}
qw(/bin /usr/bin)
,
$path
;
foreach
my
$dataset
( Net::DNS::Resolver::Base::_untaint(
grep
{
$_
}
@dataset
) ) {
eval
{
local
$_
;
my
@nameserver
;
my
@searchlist
;
my
$handle
= IO::File->new(
qq[cat "$dataset" 2>/dev/null]
,
'-|'
)
or
die
"$dataset: $!"
;
while
(<
$handle
>) {
s/[;
s/^\s+//;
next
unless
$_
;
next
if
m/^\w+:/ && !m/^
$sysname
:/oi;
s/^\w+:\s*//;
m/^(NSINTERADDR|nameserver)/i &&
do
{
my
(
$keyword
,
@ip
) =
grep
{
defined
}
split
;
push
@nameserver
,
@ip
;
next
;
};
m/^(DOMAINORIGIN|domain)/i &&
do
{
my
(
$keyword
,
@domain
) =
grep
{
defined
}
split
;
$defaults
->domain(
@domain
)
unless
$stop
{domain}++;
next
;
};
m/^search/i &&
do
{
my
(
$keyword
,
@domain
) =
grep
{
defined
}
split
;
push
@searchlist
,
@domain
;
next
;
};
m/^option/i &&
do
{
my
(
$keyword
,
@option
) =
grep
{
defined
}
split
;
foreach
(
@option
) {
my
(
$attribute
,
@value
) =
split
m/:/;
$defaults
->_option(
$attribute
,
@value
)
unless
$stop
{
$attribute
}++;
}
next
;
};
m/^RESOLVEVIA/i &&
do
{
my
(
$keyword
,
$value
) =
grep
{
defined
}
split
;
$defaults
->_option(
'usevc'
,
$value
eq
'TCP'
)
unless
$stop
{usevc}++;
next
;
};
m/^\w+\s*/ &&
do
{
my
(
$keyword
,
@value
) =
grep
{
defined
}
split
;
my
$attribute
=
$option
{
uc
$keyword
} ||
next
;
$defaults
->_option(
$attribute
,
@value
)
unless
$stop
{
$attribute
}++;
};
}
close
(
$handle
);
$defaults
->nameserver(
@nameserver
)
if
@nameserver
&& !
$stop
{nameserver}++;
$defaults
->searchlist(
@searchlist
)
if
@searchlist
&& !
$stop
{search}++;
};
warn
$@
if
$@;
}
%$defaults
= Net::DNS::Resolver::Base::_untaint(
%$defaults
);
$defaults
->_read_config_file(
$_
)
foreach
@dotfile
;
$defaults
->_read_env;
return
;
}
1;