Net-DNS
view release on metacpan or search on metacpan
lib/Net/DNS/Resolver/os390.pm view on Meta::CPAN
my $homedir = $ENV{HOME};
my $dotfile = '.resolv.conf';
my @dotfile = grep { -f $_ && -o $_ } map {"$_/$dotfile"} grep {$_} $homedir, '.';
my %option = ( ## map MVS config option names
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: $!"; # "cat" able to read MVS datasets
while (<$handle>) {
s/[;#].*$//; # strip comment
s/^\s+//; # strip leading white space
next unless $_; # skip empty line
next if m/^\w+:/ && !m/^$sysname:/oi;
s/^\w+:\s*//; # discard qualifier
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;
__END__
=head1 SYNOPSIS
use Net::DNS::Resolver;
=head1 DESCRIPTION
This class implements the OS specific portions of C<Net::DNS::Resolver>.
No user serviceable parts inside, see L<Net::DNS::Resolver>
for all your resolving needs.
=head1 COPYRIGHT
Copyright (c)2017 Dick Franks.
All rights reserved.
( run in 0.563 second using v1.01-cache-2.11-cpan-71847e10f99 )