Subject: | Invalid registry path for win32.pm |
Hi,
File: Perl\site\lib\Net\DNS\Resolver\Win32.pm
Line: 64
There is a spelling mistake in the registry path to the Tcpip parameters.
In the file it is: Tcplp in uppercase - TCPLP
and it should be : Tcpip
my $root = 'SYSTEM\CurrentControlSet\Services\Tcplp\Parameters';
should be:
my $root = 'SYSTEM\CurrentControlSet\Services\Tcpip\Parameters';
I found this typing error whilst trying to use Net-DNS on another
machine. Because the machine doesnt have access to the perl ppm servers
I copied my perl installation across to the machine. For some reason, I
get a dump of the IP configuration.
In the script it contains the line: use Net::DNS;
C:\nsn_apps\ran_tools\www\cgi-bin>cat test.pl
use Net::DNS;
C:\nsn_apps\ran_tools\www\cgi-bin>c:\nsn_apps\Perl\bin\perl.exe -cw test.pl
$VAR1 = {
'EnableRouting' => 0,
'EnableDns' => 0,
'HostName' => 'EOSRS',
'EnableProxy' => 0,
'DomainName' => 'europe.nokia.com',
'NodeType' => 8,
'DnsServersList' => [
{
'IpMask' => '',
'IpAddress' => '172.20.29.204',
'Context' => 0
},
{
'IpMask' => '',
'IpAddress' => '172.20.29.205',
'Context' => 0
}
],
'ScopeId' => ''
};
Use of uninitialized value in concatenation (.) or string at
c:/nsn_apps/Perl/site/lib/Net/DNS/Resolver/Win32.pm line 75
.
$VAR1 = {
'cdflag' => 0,
'stayopen' => 0,
'srcaddr' => '0.0.0.0',
'answerfrom' => '',
'debug' => 0,
'ignqrid' => 0,
'defnames' => 1,
'retrans' => 5,
'port' => 53,
'usevc' => 0,
'force_v4' => 0,
'retry' => 4,
'recurse' => 1,
'dnsrch' => 1,
'persistent_udp' => 0,
'tsig_rr' => undef,
'persistent_tcp' => 0,
'querytime' => undef,
'udppacketsize' => 0,
'domain' => 'europe.nokia.com',
'axfr_soa_count' => 0,
'searchlist' => [
'europe.nokia.com'
],
'tcp_timeout' => 120,
'errorstring' => 'unknown error or no error',
'nameservers' => [
'172.20.29.204',
'172.20.29.205'
],
'axfr_sel' => undef,
'axfr_rr' => [],
'adflag' => 1,
'igntc' => 0,
'udp_timeout' => undef,
'dnssec' => 0,
'srcport' => 0
};
test.pl syntax OK
C:\nsn_apps\ran_tools\www\cgi-bin>
---------
Remote machine: Windows 2000 (activestate perl 5.10 is still supported
with this os version)
My machine: Win XP.
ppm query Net-DNS
Net-DNS │ 0.64 │ Perl DNS resolver module │ site │
Show quoted text
>perl -v
This is perl, v5.10.0 built for MSWin32-x86-multi-thread
(with 5 registered patches, see perl -V for more detail)
Copyright 1987-2007, Larry Wall
Binary build 1003 [285500] provided by ActiveState
http://www.ActiveState.com
Built May 13 2008 16:52:49
Perl may be copied only under the terms of either the Artistic License
or the
GNU General Public License, which may be found in the Perl 5 source kit.
Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl". If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.
Subject: | Win32.pm |
package Net::DNS::Resolver::Win32;
#
# $Id: Win32.pm 756 2008-12-22 21:32:51Z olaf $
#
use strict;
use vars qw(@ISA $VERSION);
use Net::DNS::Resolver::Base ();
@ISA = qw(Net::DNS::Resolver::Base);
$VERSION = (qw$LastChangedRevision: 756 $)[1];
use Win32::IPHelper;
use Win32::Registry;
use Data::Dumper;
sub init {
my $debug=1;
my ($class) = @_;
my $defaults = $class->defaults;
my $FIXED_INFO={};
my $ret = Win32::IPHelper::GetNetworkParams($FIXED_INFO);
if ($ret == 0)
{
print Dumper $FIXED_INFO if $debug;
}
else
{
Carp::croak "GetNetworkParams() error %u: %s\n", $ret, Win32::FormatMessage($ret);
}
my @nameservers = map { $_->{'IpAddress'} } @{$FIXED_INFO->{'DnsServersList'}};
if (@nameservers) {
# remove blanks and dupes
my @a;
my %h;
foreach my $ns (@nameservers) {
push @a, $ns unless (!$ns || $h{$ns});
$h{$ns} = 1;
}
$defaults->{'nameservers'} = [map { m/(.*)/ } @a];
}
my $domain=$FIXED_INFO->{'DomainName'}||'';
my $searchlist = "$domain" ;
#
# The Win32::IPHelper does not return searchlist. Lets do a best effort attempt to get
# a searchlist from the registry.
my ($resobj, %keys);
my $root = 'SYSTEM\CurrentControlSet\Services\Tcplp\Parameters';
my $opened_registry =1;
unless ($main::HKEY_LOCAL_MACHINE->Open($root, $resobj)) {
# Didn't work, maybe we are on 95/98/Me?
$root = 'SYSTEM\CurrentControlSet\Services\VxD\MSTCP';
$main::HKEY_LOCAL_MACHINE->Open($root, $resobj)
or $opened_registry =0;
}
if ($opened_registry && $resobj->GetValues(\%keys)){
$searchlist .= $keys{'SearchList'}->[2];
}
if ($domain) {
$defaults->{'domain'} = $domain;
}
my $usedevolution = $keys{'UseDomainNameDevolution'}->[2];
if ($searchlist) {
# fix devolution if configured, and simultaneously make sure no dups (but keep the order)
my @a;
my %h;
foreach my $entry (split(m/[\s,]+/, $searchlist)) {
push(@a, $entry) unless $h{$entry};
$h{$entry} = 1;
if ($usedevolution) {
# as long there's more than two pieces, cut
while ($entry =~ m#\..+\.#) {
$entry =~ s#^[^\.]+\.(.+)$#$1#;
push(@a, $entry) unless $h{$entry};
$h{$entry} = 1;
}
}
}
$defaults->{'searchlist'} = \@a;
}
$class->read_env;
if (!$defaults->{'domain'} && @{$defaults->{'searchlist'}}) {
$defaults->{'domain'} = $defaults->{'searchlist'}[0];
} elsif (!@{$defaults->{'searchlist'}} && $defaults->{'domain'}) {
$defaults->{'searchlist'} = [ $defaults->{'domain'} ];
}
print Dumper $defaults if $debug;
}
1;
__END__
=head1 NAME
Net::DNS::Resolver::Win32 - Windows Resolver Class
=head1 SYNOPSIS
use Net::DNS::Resolver;
=head1 DESCRIPTION
This class implements the windows specific portions of C<Net::DNS::Resolver>.
No user serviceable parts inside, see L<Net::DNS::Resolver|Net::DNS::Resolver>
for all your resolving needs.
=head1 COPYRIGHT
Copyright (c) 1997-2002 Michael Fuhr.
Portions Copyright (c) 2002-2004 Chris Reinhardt.
Portions Copyright (c) 2009 Olaf Kolkman, NLnet Labs
All rights reserved. This program is free software; you may redistribute
it and/or modify it under the same terms as Perl itself.
=head1 SEE ALSO
L<perl(1)>, L<Net::DNS>, L<Net::DNS::Resolver>
=cut