Net-DNS
view release on metacpan or search on metacpan
lib/Net/DNS/Question.pm view on Meta::CPAN
########################################
sub _dns_addr { ## Map IP address into reverse lookup namespace
local $_ = shift;
# IP address must contain address characters only
s/[%].+$//; # discard RFC4007 scopeid
return unless m#^[a-fA-F0-9:./]+$#;
my ( $address, $pfxlen ) = split m#/#;
# map IPv4 address to in-addr.arpa space
if (m#^\d*[.\d]*\d(/\d+)?$#) {
my @parse = split /\./, $address;
$pfxlen = scalar(@parse) << 3 unless $pfxlen;
my $last = $pfxlen > 24 ? 3 : ( $pfxlen - 1 ) >> 3;
return join '.', reverse( ( @parse, (0) x 3 )[0 .. $last] ), 'in-addr.arpa.';
}
# map IPv6 address to ip6.arpa space
lib/Net/DNS/Resolver/Base.pm view on Meta::CPAN
sub _read_env { ## read resolver config environment variables
my $self = shift;
$self->searchlist( map {split} $ENV{LOCALDOMAIN} ) if defined $ENV{LOCALDOMAIN};
$self->nameservers( map {split} $ENV{RES_NAMESERVERS} ) if defined $ENV{RES_NAMESERVERS};
$self->searchlist( map {split} $ENV{RES_SEARCHLIST} ) if defined $ENV{RES_SEARCHLIST};
foreach ( map {split} $ENV{RES_OPTIONS} || '' ) {
$self->_option( split m/:/ );
}
return;
}
sub _read_config_file { ## read resolver config file
my ( $self, $file ) = @_;
my $filehandle = IO::File->new( $file, '<' ) or croak "$file: $!";
lib/Net/DNS/Resolver/Base.pm view on Meta::CPAN
/^search/ && do {
my ( $keyword, @domain ) = grep {defined} split;
push @searchlist, @domain;
next;
};
/^option/ && do {
my ( $keyword, @option ) = grep {defined} split;
foreach (@option) {
$self->_option( split m/:/ );
}
};
}
close($filehandle);
$self->nameservers(@nameserver) if @nameserver;
$self->searchlist(@searchlist) if @searchlist;
return;
}
lib/Net/DNS/Resolver/MSWin32.pm view on Meta::CPAN
my $leaf = join '\\', @root, qw(Tcpip Parameters);
my $reg_tcpip = $Registry->Open( $leaf, {Access => KEY_READ} );
unless ( defined $reg_tcpip ) { # Didn't work, Win95/98/Me?
$leaf = join '\\', @root, qw(VxD MSTCP);
$reg_tcpip = $Registry->Open( $leaf, {Access => KEY_READ} );
}
if ( defined $reg_tcpip ) {
my $searchlist = $reg_tcpip->GetValue('SearchList') || '';
push @searchlist, split m/[\s,]+/, $searchlist;
my ( $value, $type ) = $reg_tcpip->GetValue('UseDomainNameDevolution');
$devolution = defined $value && $type == REG_DWORD ? hex $value : 0;
}
}
# fix devolution if configured, and simultaneously
# eliminate duplicate entries (but keep the order)
my @list;
lib/Net/DNS/Resolver/cygwin.pm view on Meta::CPAN
# Best effort to find a useful domain name for the current host
# if domain ends up blank, we're probably (?) not connected anywhere
# a DNS server is interesting either...
my $domain = _getregkey( $root, 'Domain' ) || _getregkey( $root, 'DhcpDomain' );
# If nothing else, the searchlist should probably contain our own domain
# also see below for domain name devolution if so configured
# (also remove any duplicates later)
my $devolution = _getregkey( $root, 'UseDomainNameDevolution' );
my $searchlist = _getregkey( $root, 'SearchList' );
my @searchlist = ( $domain, split m/[\s,]+/, $searchlist );
# This is (probably) adequate on NT4
my @nt4nameservers;
foreach ( grep {length} _getregkey( $root, 'NameServer' ), _getregkey( $root, 'DhcpNameServer' ) ) {
push @nt4nameservers, split m/[\s,]+/;
last;
}
# but on W2K/XP the registry layout is more advanced due to dynamically
# appearing connections. So we attempt to handle them, too...
# opt to silently fail if something isn't ok (maybe we're on NT4)
# If this doesn't fail override any NT4 style result we found, as it
# may be there but is not valid.
# drop any duplicates later
lib/Net/DNS/Resolver/cygwin.pm view on Meta::CPAN
foreach my $iface (@ifacelist) {
my $ip = _getregkey( $interfaces, $iface, 'DhcpIPAddress' )
|| _getregkey( $interfaces, $iface, 'IPAddress' );
next unless $ip;
next if $ip eq '0.0.0.0';
foreach (
grep {length} _getregkey( $interfaces, $iface, 'NameServer' ),
_getregkey( $interfaces, $iface, 'DhcpNameServer' )
) {
push @nameservers, split m/[\s,]+/;
last;
}
}
}
@nameservers = @nt4nameservers unless @nameservers;
$defaults->nameservers(@nameservers);
# fix devolution if configured, and simultaneously
lib/Net/DNS/Resolver/os390.pm view on Meta::CPAN
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' )
lib/Net/DNS/ZoneFile.pm view on Meta::CPAN
{
package Net::DNS::ZoneFile::Generator; ## no critic ProhibitMultiplePackages
use overload ( '<>' => 'readline' );
sub new {
my ( $class, $range, $template, $line ) = @_;
my $self = bless {}, $class;
my ( $bound, $step ) = split m#[/]#, $range; # initial iterator state
my ( $first, $last ) = split m#[-]#, $bound;
$first ||= 0;
$last ||= $first;
$step ||= 1; # coerce step to match range
$step = ( $last < $first ) ? -abs($step) : abs($step);
$self->{count} = int( ( $last - $first ) / $step ) + 1;
for ($template) {
s/\\\$/\\036/g; # disguise escaped dollar
s/\$\$/\\036/g; # disguise escaped dollar
s/^"(.*)"$/$1/s; # unwrap BIND's quoted template
( run in 0.500 second using v1.01-cache-2.11-cpan-71847e10f99 )