version 1.841, 2007/03/03 01:33:10
|
version 1.855, 2007/03/30 18:18:43
|
Line 35 use HTTP::Headers;
|
Line 35 use HTTP::Headers;
|
use HTTP::Date; |
use HTTP::Date; |
# use Date::Parse; |
# use Date::Parse; |
use vars |
use vars |
qw(%perlvar %badServerCache %iphost %spareid %hostdom |
qw(%perlvar %badServerCache %spareid |
%libserv %pr %prp $memcache %packagetab |
%pr %prp $memcache %packagetab |
%courselogs %accesshash %userrolehash %domainrolehash $processmarker $dumpcount |
%courselogs %accesshash %userrolehash %domainrolehash $processmarker $dumpcount |
%coursedombuf %coursenumbuf %coursehombuf %coursedescrbuf %courseinstcodebuf %courseownerbuf %coursetypebuf |
%coursedombuf %coursenumbuf %coursehombuf %coursedescrbuf %courseinstcodebuf %courseownerbuf %coursetypebuf |
%domaindescription %domain_auth_def %domain_auth_arg_def |
|
%domain_lang_def %domain_city %domain_longi %domain_lati %domain_primary |
|
$tmpdir $_64bit %env); |
$tmpdir $_64bit %env); |
|
|
use IO::Socket; |
use IO::Socket; |
Line 146 sub logperm {
|
Line 144 sub logperm {
|
return 1; |
return 1; |
} |
} |
|
|
|
sub create_connection { |
|
my ($hostname,$lonid) = @_; |
|
my $client=IO::Socket::UNIX->new(Peer => $perlvar{'lonSockCreate'}, |
|
Type => SOCK_STREAM, |
|
Timeout => 10); |
|
return 0 if (!$client); |
|
print $client (join(':',$hostname,$lonid,&machine_ids($lonid))."\n"); |
|
my $result = <$client>; |
|
chomp($result); |
|
return 1 if ($result eq 'done'); |
|
return 0; |
|
} |
|
|
|
|
# -------------------------------------------------- Non-critical communication |
# -------------------------------------------------- Non-critical communication |
sub subreply { |
sub subreply { |
my ($cmd,$server)=@_; |
my ($cmd,$server)=@_; |
Line 172 sub subreply {
|
Line 184 sub subreply {
|
Timeout => 10); |
Timeout => 10); |
if($client) { |
if($client) { |
last; # Connected! |
last; # Connected! |
|
} else { |
|
&create_connection(&hostname($server),$server); |
} |
} |
sleep(1); # Try again later if failed connection. |
sleep(1); # Try again later if failed connection. |
} |
} |
my $answer; |
my $answer; |
if ($client) { |
if ($client) { |
Line 727 sub get_dom {
|
Line 741 sub get_dom {
|
} |
} |
$items=~s/\&$//; |
$items=~s/\&$//; |
if (!$udom) { $udom=$env{'user.domain'}; } |
if (!$udom) { $udom=$env{'user.domain'}; } |
if (exists($domain_primary{$udom})) { |
if (defined(&domain($udom,'primary'))) { |
my $uhome=$domain_primary{$udom}; |
my $uhome=&domain($udom,'primary'); |
my $rep=&reply("getdom:$udom:$namespace:$items",$uhome); |
my $rep=&reply("getdom:$udom:$namespace:$items",$uhome); |
my @pairs=split(/\&/,$rep); |
my @pairs=split(/\&/,$rep); |
if ( $#pairs==0 && $pairs[0] =~ /^(con_lost|error|no_such_host)/i) { |
if ( $#pairs==0 && $pairs[0] =~ /^(con_lost|error|no_such_host)/i) { |
Line 751 sub get_dom {
|
Line 765 sub get_dom {
|
sub put_dom { |
sub put_dom { |
my ($namespace,$storehash,$udom)=@_; |
my ($namespace,$storehash,$udom)=@_; |
if (!$udom) { $udom=$env{'user.domain'}; } |
if (!$udom) { $udom=$env{'user.domain'}; } |
if (exists($domain_primary{$udom})) { |
if (defined(&domain($udom,'primary'))) { |
my $uhome=$domain_primary{$udom}; |
my $uhome=&domain($udom,'primary'); |
my $items=''; |
my $items=''; |
foreach my $item (keys(%$storehash)) { |
foreach my $item (keys(%$storehash)) { |
$items.=&escape($item).'='.&freeze_escape($$storehash{$item}).'&'; |
$items.=&escape($item).'='.&freeze_escape($$storehash{$item}).'&'; |
Line 767 sub put_dom {
|
Line 781 sub put_dom {
|
sub retrieve_inst_usertypes { |
sub retrieve_inst_usertypes { |
my ($udom) = @_; |
my ($udom) = @_; |
my (%returnhash,@order); |
my (%returnhash,@order); |
if (exists($domain_primary{$udom})) { |
if (defined(&domain($udom,'primary'))) { |
my $uhome=$domain_primary{$udom}; |
my $uhome=&domain($udom,'primary'); |
my $rep=&reply("inst_usertypes:$udom",$uhome); |
my $rep=&reply("inst_usertypes:$udom",$uhome); |
my ($hashitems,$orderitems) = split(/:/,$rep); |
my ($hashitems,$orderitems) = split(/:/,$rep); |
my @pairs=split(/\&/,$hashitems); |
my @pairs=split(/\&/,$hashitems); |
Line 1012 my %remembered;
|
Line 1026 my %remembered;
|
my %accessed; |
my %accessed; |
my $kicks=0; |
my $kicks=0; |
my $hits=0; |
my $hits=0; |
|
sub make_key { |
|
my ($name,$id) = @_; |
|
if (length($id) > 200) { $id=length($id).':'.&Digest::MD5::md5_hex($id); } |
|
return &escape($name.':'.$id); |
|
} |
|
|
sub devalidate_cache_new { |
sub devalidate_cache_new { |
my ($name,$id,$debug) = @_; |
my ($name,$id,$debug) = @_; |
if ($debug) { &Apache::lonnet::logthis("deleting $name:$id"); } |
if ($debug) { &Apache::lonnet::logthis("deleting $name:$id"); } |
$id=&escape($name.':'.$id); |
$id=&make_key($name,$id); |
$memcache->delete($id); |
$memcache->delete($id); |
delete($remembered{$id}); |
delete($remembered{$id}); |
delete($accessed{$id}); |
delete($accessed{$id}); |
Line 1023 sub devalidate_cache_new {
|
Line 1043 sub devalidate_cache_new {
|
|
|
sub is_cached_new { |
sub is_cached_new { |
my ($name,$id,$debug) = @_; |
my ($name,$id,$debug) = @_; |
$id=&escape($name.':'.$id); |
$id=&make_key($name,$id); |
if (exists($remembered{$id})) { |
if (exists($remembered{$id})) { |
if ($debug) { &Apache::lonnet::logthis("Earyl return $id of $remembered{$id} "); } |
if ($debug) { &Apache::lonnet::logthis("Earyl return $id of $remembered{$id} "); } |
$accessed{$id}=[&gettimeofday()]; |
$accessed{$id}=[&gettimeofday()]; |
Line 1046 sub is_cached_new {
|
Line 1066 sub is_cached_new {
|
|
|
sub do_cache_new { |
sub do_cache_new { |
my ($name,$id,$value,$time,$debug) = @_; |
my ($name,$id,$value,$time,$debug) = @_; |
$id=&escape($name.':'.$id); |
$id=&make_key($name,$id); |
my $setvalue=$value; |
my $setvalue=$value; |
if (!defined($setvalue)) { |
if (!defined($setvalue)) { |
$setvalue='__undef__'; |
$setvalue='__undef__'; |
Line 1842 sub flushcourselogs {
|
Line 1862 sub flushcourselogs {
|
# Is used in pickcourse |
# Is used in pickcourse |
# |
# |
foreach my $crs_home (keys(%courseidbuffer)) { |
foreach my $crs_home (keys(%courseidbuffer)) { |
&courseidput($hostdom{$crs_home},$courseidbuffer{$crs_home}, |
&courseidput(&host_domain($crs_home),$courseidbuffer{$crs_home}, |
$crs_home); |
$crs_home); |
} |
} |
# |
# |
Line 2097 sub get_my_roles {
|
Line 2117 sub get_my_roles {
|
|
|
sub postannounce { |
sub postannounce { |
my ($server,$text)=@_; |
my ($server,$text)=@_; |
unless (&allowed('psa',$hostdom{$server})) { return 'refused'; } |
unless (&allowed('psa',&host_domain($server))) { return 'refused'; } |
unless ($text=~/\w/) { $text=''; } |
unless ($text=~/\w/) { $text=''; } |
return &reply('setannounce:'.&escape($text),$server); |
return &reply('setannounce:'.&escape($text),$server); |
} |
} |
Line 2133 sub courseiddump {
|
Line 2153 sub courseiddump {
|
my ($domfilter,$descfilter,$sincefilter,$instcodefilter,$ownerfilter,$coursefilter,$hostidflag,$hostidref,$typefilter,$regexp_ok)=@_; |
my ($domfilter,$descfilter,$sincefilter,$instcodefilter,$ownerfilter,$coursefilter,$hostidflag,$hostidref,$typefilter,$regexp_ok)=@_; |
my %returnhash=(); |
my %returnhash=(); |
unless ($domfilter) { $domfilter=''; } |
unless ($domfilter) { $domfilter=''; } |
foreach my $tryserver (keys %libserv) { |
my %libserv = &all_library(); |
if ( ($hostidflag == 1 && grep/^$tryserver$/,@{$hostidref}) || (!defined($hostidflag)) ) { |
foreach my $tryserver (keys(%libserv)) { |
if ((!$domfilter) || ($hostdom{$tryserver} eq $domfilter)) { |
if ( ( $hostidflag == 1 |
|
&& grep(/^\Q$tryserver\E$/,@{$hostidref}) ) |
|
|| (!defined($hostidflag)) ) { |
|
|
|
if ($domfilter eq '' |
|
|| (&host_domain($tryserver) eq $domfilter)) { |
foreach my $line ( |
foreach my $line ( |
split(/\&/,&reply('courseiddump:'.$hostdom{$tryserver}.':'. |
split(/\&/,&reply('courseiddump:'.&host_domain($tryserver).':'. |
$sincefilter.':'.&escape($descfilter).':'. |
$sincefilter.':'.&escape($descfilter).':'. |
&escape($instcodefilter).':'.&escape($ownerfilter).':'.&escape($coursefilter).':'.&escape($typefilter).':'.&escape($regexp_ok), |
&escape($instcodefilter).':'.&escape($ownerfilter).':'.&escape($coursefilter).':'.&escape($typefilter).':'.&escape($regexp_ok), |
$tryserver))) { |
$tryserver))) { |
Line 2165 sub dcmailput {
|
Line 2190 sub dcmailput {
|
sub dcmaildump { |
sub dcmaildump { |
my ($dom,$startdate,$enddate,$senders) = @_; |
my ($dom,$startdate,$enddate,$senders) = @_; |
my %returnhash=(); |
my %returnhash=(); |
if (exists($domain_primary{$dom})) { |
|
|
if (defined(&domain($dom,'primary'))) { |
my $cmd='dcmaildump:'.$dom.':'.&escape($startdate).':'. |
my $cmd='dcmaildump:'.$dom.':'.&escape($startdate).':'. |
&escape($enddate).':'; |
&escape($enddate).':'; |
my @esc_senders=map { &escape($_)} @$senders; |
my @esc_senders=map { &escape($_)} @$senders; |
$cmd.=&escape(join('&',@esc_senders)); |
$cmd.=&escape(join('&',@esc_senders)); |
foreach my $line (split(/\&/,&reply($cmd,$domain_primary{$dom}))) { |
foreach my $line (split(/\&/,&reply($cmd,&domain($dom,'primary')))) { |
my ($key,$value) = split(/\=/,$line,2); |
my ($key,$value) = split(/\=/,$line,2); |
if (($key) && ($value)) { |
if (($key) && ($value)) { |
$returnhash{&unescape($key)} = &unescape($value); |
$returnhash{&unescape($key)} = &unescape($value); |
Line 4170 sub definerole {
|
Line 4196 sub definerole {
|
sub metadata_query { |
sub metadata_query { |
my ($query,$custom,$customshow,$server_array)=@_; |
my ($query,$custom,$customshow,$server_array)=@_; |
my %rhash; |
my %rhash; |
|
my %libserv = &all_library(); |
my @server_list = (defined($server_array) ? @$server_array |
my @server_list = (defined($server_array) ? @$server_array |
: keys(%libserv) ); |
: keys(%libserv) ); |
for my $server (@server_list) { |
for my $server (@server_list) { |
Line 4811 sub modifyuser {
|
Line 4838 sub modifyuser {
|
if (($uhome eq 'no_host') && |
if (($uhome eq 'no_host') && |
(($umode && $upass) || ($umode eq 'localauth'))) { |
(($umode && $upass) || ($umode eq 'localauth'))) { |
my $unhome=''; |
my $unhome=''; |
if (defined($desiredhome) && $hostdom{$desiredhome} eq $udom) { |
if (defined($desiredhome) && &host_domain($desiredhome) eq $udom) { |
$unhome = $desiredhome; |
$unhome = $desiredhome; |
} elsif($env{'course.'.$env{'request.course.id'}.'.domain'} eq $udom) { |
} elsif($env{'course.'.$env{'request.course.id'}.'.domain'} eq $udom) { |
$unhome=$env{'course.'.$env{'request.course.id'}.'.home'}; |
$unhome=$env{'course.'.$env{'request.course.id'}.'.home'}; |
Line 5038 sub createcourse {
|
Line 5065 sub createcourse {
|
} |
} |
# ------------------------------------------------ Check supplied server name |
# ------------------------------------------------ Check supplied server name |
$course_server = $env{'user.homeserver'} if (! defined($course_server)); |
$course_server = $env{'user.homeserver'} if (! defined($course_server)); |
if (! exists($libserv{$course_server})) { |
if (! &is_library($course_server)) { |
return 'error:bad server name '.$course_server; |
return 'error:bad server name '.$course_server; |
} |
} |
# ------------------------------------------------------------- Make the course |
# ------------------------------------------------------------- Make the course |
Line 6171 sub packages_tab_default {
|
Line 6198 sub packages_tab_default {
|
$do_default=1; |
$do_default=1; |
} elsif ($pack_type eq 'extension') { |
} elsif ($pack_type eq 'extension') { |
push(@extension,[$package,$pack_type,$pack_part]); |
push(@extension,[$package,$pack_type,$pack_part]); |
} else { |
} elsif ($pack_part eq $part) { |
|
# only look at packages defaults for packages that this id is |
push(@specifics,[$package,$pack_type,$pack_part]); |
push(@specifics,[$package,$pack_type,$pack_part]); |
} |
} |
} |
} |
Line 7398 sub hreflocation {
|
Line 7426 sub hreflocation {
|
} |
} |
|
|
sub current_machine_domains { |
sub current_machine_domains { |
my $hostname=&hostname($perlvar{'lonHostID'}); |
return &machine_domains(&hostname($perlvar{'lonHostID'})); |
|
} |
|
|
|
sub machine_domains { |
|
my ($hostname) = @_; |
my @domains; |
my @domains; |
my %hostname = &all_hostnames(); |
my %hostname = &all_hostnames(); |
while( my($id, $name) = each(%hostname)) { |
while( my($id, $name) = each(%hostname)) { |
# &logthis("-$id-$name-$hostname-"); |
# &logthis("-$id-$name-$hostname-"); |
if ($hostname eq $name) { |
if ($hostname eq $name) { |
push(@domains,$hostdom{$id}); |
push(@domains,&host_domain($id)); |
} |
} |
} |
} |
return @domains; |
return @domains; |
} |
} |
|
|
sub current_machine_ids { |
sub current_machine_ids { |
my $hostname=&hostname($perlvar{'lonHostID'}); |
return &machine_ids(&hostname($perlvar{'lonHostID'})); |
|
} |
|
|
|
sub machine_ids { |
|
my ($hostname) = @_; |
|
$hostname ||= &hostname($perlvar{'lonHostID'}); |
my @ids; |
my @ids; |
my %hostname = &all_hostnames(); |
my %hostname = &all_hostnames(); |
while( my($id, $name) = each(%hostname)) { |
while( my($id, $name) = each(%hostname)) { |
Line 7559 BEGIN {
|
Line 7596 BEGIN {
|
%perlvar = (%perlvar,%{$configvars}); |
%perlvar = (%perlvar,%{$configvars}); |
} |
} |
|
|
|
sub get_dns { |
|
my ($url,$func) = @_; |
|
open(my $config,"<$perlvar{'lonTabDir'}/hosts.tab"); |
|
foreach my $dns (<$config>) { |
|
next if ($dns !~ /^\^(\S*)/x); |
|
$dns = $1; |
|
my $ua=new LWP::UserAgent; |
|
my $request=new HTTP::Request('GET',"http://$dns$url"); |
|
my $response=$ua->request($request); |
|
next if ($response->is_error()); |
|
my @content = split("\n",$response->content); |
|
&$func(\@content); |
|
} |
|
close($config); |
|
} |
# ------------------------------------------------------------ Read domain file |
# ------------------------------------------------------------ Read domain file |
{ |
{ |
%domaindescription = (); |
my $loaded; |
%domain_auth_def = (); |
my %domain; |
%domain_auth_arg_def = (); |
|
my $fh; |
sub parse_domain_tab { |
if (open($fh,"<".$Apache::lonnet::perlvar{'lonTabDir'}.'/domain.tab')) { |
my ($lines) = @_; |
while (my $line = <$fh>) { |
foreach my $line (@$lines) { |
next if ($line =~ /^(\#|\s*$)/); |
next if ($line =~ /^(\#|\s*$ )/x); |
# next if /^\#/; |
|
chomp $line; |
chomp($line); |
my ($domain, $domain_description, $def_auth, $def_auth_arg, |
my ($name,@elements) = split(/:/,$line,9); |
$def_lang, $city, $longi, $lati, $primary) = split(/:/,$line,9); |
my %this_domain; |
$domain_auth_def{$domain}=$def_auth; |
foreach my $field ('description', 'auth_def', 'auth_arg_def', |
$domain_auth_arg_def{$domain}=$def_auth_arg; |
'lang_def', 'city', 'longi', 'lati', |
$domaindescription{$domain}=$domain_description; |
'primary') { |
$domain_lang_def{$domain}=$def_lang; |
$this_domain{$field} = shift(@elements); |
$domain_city{$domain}=$city; |
} |
$domain_longi{$domain}=$longi; |
$domain{$name} = \%this_domain; |
$domain_lati{$domain}=$lati; |
&logthis("Domain.tab: $name ".$domain{$name}{'description'} ); |
$domain_primary{$domain}=$primary; |
} |
|
} |
|
|
|
sub load_domain_tab { |
|
&get_dns('/adm/dns/domain',\&parse_domain_tab); |
|
my $fh; |
|
if (open($fh,"<".$perlvar{'lonTabDir'}.'/domain.tab')) { |
|
my @lines = <$fh>; |
|
&parse_domain_tab(\@lines); |
|
} |
|
close($fh); |
|
$loaded = 1; |
|
} |
|
|
|
sub domain { |
|
&load_domain_tab() if (!$loaded); |
|
|
|
my ($name,$what) = @_; |
|
return if ( !exists($domain{$name}) ); |
|
|
# &logthis("Domain.tab: $domain, $domain_auth_def{$domain}, $domain_auth_arg_def{$domain},$domaindescription{$domain}"); |
if (!$what) { |
# &logthis("Domain.tab: $domain ".$domaindescription{$domain} ); |
return $domain{$name}{'description'}; |
} |
} |
|
return $domain{$name}{$what}; |
} |
} |
close ($fh); |
|
} |
} |
|
|
|
|
# ------------------------------------------------------------- Read hosts file |
# ------------------------------------------------------------- Read hosts file |
{ |
{ |
my %hostname; |
my %hostname; |
open(my $config,"<$perlvar{'lonTabDir'}/hosts.tab"); |
my %hostdom; |
|
my %libserv; |
|
my $loaded; |
|
|
|
sub parse_hosts_tab { |
|
my ($file) = @_; |
|
foreach my $configline (@$file) { |
|
next if ($configline =~ /^(\#|\s*$ )/x); |
|
next if ($configline =~ /^\^/); |
|
chomp($configline); |
|
my ($id,$domain,$role,$name)=split(/:/,$configline); |
|
$name=~s/\s//g; |
|
if ($id && $domain && $role && $name) { |
|
$hostname{$id}=$name; |
|
$hostdom{$id}=$domain; |
|
if ($role eq 'library') { $libserv{$id}=$name; } |
|
} |
|
&logthis("Hosts.tab: $name ".$id ); |
|
} |
|
} |
|
|
while (my $configline=<$config>) { |
sub load_hosts_tab { |
next if ($configline =~ /^(\#|\s*$)/); |
&get_dns('/adm/dns/hosts',\&parse_hosts_tab); |
chomp($configline); |
open(my $config,"<$perlvar{'lonTabDir'}/hosts.tab"); |
my ($id,$domain,$role,$name)=split(/:/,$configline); |
my @config = <$config>; |
$name=~s/\s//g; |
&parse_hosts_tab(\@config); |
if ($id && $domain && $role && $name) { |
close($config); |
$hostname{$id}=$name; |
$loaded=1; |
$hostdom{$id}=$domain; |
|
if ($role eq 'library') { $libserv{$id}=$name; } |
|
} |
|
} |
} |
close($config); |
|
# FIXME: dev server don't want this, production servers _do_ want this |
# FIXME: dev server don't want this, production servers _do_ want this |
#&get_iphost(); |
#&get_iphost(); |
|
|
sub hostname { |
sub hostname { |
|
&load_hosts_tab() if (!$loaded); |
|
|
my ($lonid) = @_; |
my ($lonid) = @_; |
return $hostname{$lonid}; |
return $hostname{$lonid}; |
} |
} |
|
|
sub all_hostnames { |
sub all_hostnames { |
|
&load_hosts_tab() if (!$loaded); |
|
|
return %hostname; |
return %hostname; |
} |
} |
|
|
|
sub is_library { |
|
&load_hosts_tab() if (!$loaded); |
|
|
|
return exists($libserv{$_[0]}); |
|
} |
|
|
|
sub all_library { |
|
&load_hosts_tab() if (!$loaded); |
|
|
|
return %libserv; |
|
} |
|
|
sub get_servers { |
sub get_servers { |
|
&load_hosts_tab() if (!$loaded); |
|
|
my ($domain,$type) = @_; |
my ($domain,$type) = @_; |
my %possible_hosts = ($type eq 'library') ? %libserv |
my %possible_hosts = ($type eq 'library') ? %libserv |
: %hostname; |
: %hostname; |
my %result; |
my %result; |
while ( my ($host,$hostname) = each(%possible_hosts)) { |
if (ref($domain) eq 'ARRAY') { |
if ($hostdom{$host} eq $domain) { |
while ( my ($host,$hostname) = each(%possible_hosts)) { |
$result{$host} = $hostname; |
if (grep(/^\Q$hostdom{$host}\E$/,@$domain)) { |
|
$result{$host} = $hostname; |
|
} |
|
} |
|
} else { |
|
while ( my ($host,$hostname) = each(%possible_hosts)) { |
|
if ($hostdom{$host} eq $domain) { |
|
$result{$host} = $hostname; |
|
} |
} |
} |
} |
} |
return %result; |
return %result; |
} |
} |
|
|
|
sub host_domain { |
|
&load_hosts_tab() if (!$loaded); |
|
|
|
my ($lonid) = @_; |
|
return $hostdom{$lonid}; |
|
} |
|
|
sub all_domains { |
sub all_domains { |
|
&load_hosts_tab() if (!$loaded); |
|
|
my %seen; |
my %seen; |
my @uniq = grep(!$seen{$_}++, values(%hostdom)); |
my @uniq = grep(!$seen{$_}++, values(%hostdom)); |
return @uniq; |
return @uniq; |
} |
} |
} |
} |
|
|
sub get_hosts_from_ip { |
{ |
my ($ip) = @_; |
my %iphost; |
my %iphosts = &get_iphost(); |
sub get_hosts_from_ip { |
if (ref($iphosts{$ip})) { |
my ($ip) = @_; |
return @{$iphosts{$ip}}; |
my %iphosts = &get_iphost(); |
|
if (ref($iphosts{$ip})) { |
|
return @{$iphosts{$ip}}; |
|
} |
|
return; |
} |
} |
return; |
|
} |
sub get_iphost { |
|
if (%iphost) { return %iphost; } |
sub get_iphost { |
my %name_to_ip; |
if (%iphost) { return %iphost; } |
my %hostname = &all_hostnames(); |
my %name_to_ip; |
foreach my $id (keys(%hostname)) { |
my %hostname = &all_hostnames(); |
my $name=$hostname{$id}; |
foreach my $id (keys(%hostname)) { |
my $ip; |
my $name=$hostname{$id}; |
if (!exists($name_to_ip{$name})) { |
my $ip; |
$ip = gethostbyname($name); |
if (!exists($name_to_ip{$name})) { |
if (!$ip || length($ip) ne 4) { |
$ip = gethostbyname($name); |
&logthis("Skipping host $id name $name no IP found"); |
if (!$ip || length($ip) ne 4) { |
next; |
&logthis("Skipping host $id name $name no IP found"); |
} |
next; |
$ip=inet_ntoa($ip); |
|
$name_to_ip{$name} = $ip; |
|
} else { |
|
$ip = $name_to_ip{$name}; |
} |
} |
$ip=inet_ntoa($ip); |
push(@{$iphost{$ip}},$id); |
$name_to_ip{$name} = $ip; |
|
} else { |
|
$ip = $name_to_ip{$name}; |
|
} |
} |
push(@{$iphost{$ip}},$id); |
return %iphost; |
} |
} |
return %iphost; |
|
} |
} |
|
|
# ------------------------------------------------------ Read spare server file |
# ------------------------------------------------------ Read spare server file |