X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FNet%2FDomain.pm;h=b79ec8fa073fddd4570b95e8b3ced211da349a80;hb=446eaa427e017001f2d47e21b0ad20ce965cd808;hp=189bb73ff573668cb12449b5be062eb6757eca18;hpb=058e53a4638aa7eba382b3df4f4f6fa0ecfb7013;p=p5sagit%2Fp5-mst-13.2.git diff --git a/lib/Net/Domain.pm b/lib/Net/Domain.pm index 189bb73..b79ec8f 100644 --- a/lib/Net/Domain.pm +++ b/lib/Net/Domain.pm @@ -16,7 +16,7 @@ use Net::Config; @ISA = qw(Exporter); @EXPORT_OK = qw(hostname hostdomain hostfqdn domainname); -$VERSION = "2.13"; # $Id: //depot/libnet/Net/Domain.pm#10 $ +$VERSION = "2.17"; # $Id: //depot/libnet/Net/Domain.pm#19 $ my($host,$domain,$fqdn) = (undef,undef,undef); @@ -28,7 +28,7 @@ sub _hostname { return $host if(defined $host); - if ($^O eq 'MSWin32' || $^O eq 'cygwin') { + if ($^O eq 'MSWin32') { require Socket; my ($name,$alias,$type,$len,@addr) = gethostbyname($ENV{'COMPUTERNAME'}||'localhost'); while (@addr) @@ -36,8 +36,8 @@ sub _hostname { my $a = shift(@addr); $host = gethostbyaddr($a,Socket::AF_INET()); last if defined $host; - } - if (index($host,'.') > 0) { + } + if (defined($host) && index($host,'.') > 0) { $fqdn = $host; ($host,$domain) = $fqdn =~ /^([^\.]+)\.(.*)$/; } @@ -101,8 +101,8 @@ sub _hostname { $host = ""; }; } - - # remove garbage + + # remove garbage $host =~ s/[\0\r\n]+//go; $host =~ s/(\A\.+|\.+\Z)//go; $host =~ s/\.\.+/\./go; @@ -127,6 +127,7 @@ sub _hostdomain { # those on dialup systems. local *RES; + local($_); if(open(RES,"/etc/resolv.conf")) { while() { @@ -143,11 +144,10 @@ sub _hostdomain { my $host = _hostname(); my(@hosts); - local($_); @hosts = ($host,"localhost"); - unless($host =~ /\./) { + unless (defined($host) && $host =~ /\./) { my $dom = undef; eval { my $tmp = "\0" x 256; ## preload scalar @@ -165,7 +165,7 @@ sub _hostdomain { }; chop($dom = `domainname 2>/dev/null`) - unless(defined $dom); + unless(defined $dom || $^O =~ /^(?:cygwin|MSWin32)/); if(defined $dom) { my @h = (); @@ -179,19 +179,19 @@ sub _hostdomain { # Attempt to locate FQDN - foreach (@hosts) { + foreach (grep {defined $_} @hosts) { my @info = gethostbyname($_); next unless @info; # look at real name & aliases my $site; - foreach $site ($info[0], split(/ /,$info[1])) { + foreach $site ($info[0], split(/ /,$info[1])) { if(rindex($site,".") > 0) { # Extract domain from FQDN - ($domain = $site) =~ s/\A[^\.]+\.//; + ($domain = $site) =~ s/\A[^\.]+\.//; return $domain; } } @@ -199,7 +199,7 @@ sub _hostdomain { # Look for environment variable - $domain ||= $ENV{LOCALDOMAIN} ||= $ENV{DOMAIN} || undef; + $domain ||= $ENV{LOCALDOMAIN} || $ENV{DOMAIN}; if(defined $domain) { $domain =~ s/[\r\n\0]+//g; @@ -224,19 +224,20 @@ sub domainname { # eleminate DNS lookups return $fqdn = $host . "." . $domain - if($host !~ /\./ && $domain =~ /\./); + if(defined $host and defined $domain + and $host !~ /\./ and $domain =~ /\./); # For hosts that have no name, just an IP address - return $fqdn = $host if $host =~ /^\d+(\.\d+){3}$/; + return $fqdn = $host if defined $host and $host =~ /^\d+(\.\d+){3}$/; - my @host = split(/\./, $host); - my @domain = split(/\./, $domain); + my @host = defined $host ? split(/\./, $host) : ('localhost'); + my @domain = defined $domain ? split(/\./, $domain) : (); my @fqdn = (); # Determine from @host & @domain the FQDN my @d = @domain; - + LOOP: while(1) { my @h = @host; @@ -328,4 +329,8 @@ Copyright (c) 1995-1998 Graham Barr. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. +=for html
+ +I<$Id: //depot/libnet/Net/Domain.pm#19 $> + =cut