) {
- if ($configline !~ /^\s*\#/ && $configline !~ /^\s*$/ ) {
- my ($id,$domain,$role,$name)=split(/:/,$configline);
- $name=~s/\s//g;
- my $ip;
- if (!exists($name_to_ip{$name})) {
- $ip = gethostbyname($name);
- if (!$ip || length($ip) ne 4) {
- &logthis("Skipping host $id name $name no IP found\n");
- next;
- }
- $ip=inet_ntoa($ip);
- $name_to_ip{$name} = $ip;
- } else {
- $ip = $name_to_ip{$name};
- }
- $hostid{$ip}=$id; # LonCAPA name of host by IP.
- $hostdom{$id}=$domain; # LonCAPA domain name of host.
- $hostname{$id}=$name; # LonCAPA name -> DNS name
- $hostip{$id}=$ip; # IP address of host.
- $hostdns{$name} = $id; # LonCAPA name of host by DNS.
-
- if ($id eq $perlvar{'lonHostID'}) {
- Debug("Found me in the host table: $name");
- $thisserver=$name;
- }
- }
- }
- close(CONFIG);
-}
-#
# Reload the Apache daemon's state.
# This is done by invoking /home/httpd/perl/apachereload
# a setuid perl script that can be root for us to do this job.
@@ -5095,13 +5044,12 @@ sub UpdateHosts {
# either dropped or changed hosts. Note that the re-read of the table
# will take care of new and changed hosts as connections come into being.
+ &Apache::lonnet::reset_hosts_info();
- KillHostHashes;
- ReadHostTable;
-
- foreach my $child (keys %children) {
+ foreach my $child (keys(%children)) {
my $childip = $children{$child};
- if(!$hostid{$childip}) {
+ if ($childip ne '127.0.0.1'
+ && !defined(&Apache::lonnet::get_hosts_from_ip($childip))) {
logthis(' UpdateHosts killing child '
." $child for ip $childip ");
kill('INT', $child);
@@ -5261,63 +5209,6 @@ sub status {
$0='lond: '.$what.' '.$local;
}
-# ----------------------------------------------------------- Send USR1 to lonc
-
-sub reconlonc {
- my $peerfile=shift;
- &logthis("Trying to reconnect for $peerfile");
- my $loncfile="$perlvar{'lonDaemons'}/logs/lonc.pid";
- if (my $fh=IO::File->new("$loncfile")) {
- my $loncpid=<$fh>;
- chomp($loncpid);
- if (kill 0 => $loncpid) {
- &logthis("lonc at pid $loncpid responding, sending USR1");
- kill USR1 => $loncpid;
- } else {
- &logthis(
- "CRITICAL: "
- ."lonc at pid $loncpid not responding, giving up");
- }
- } else {
- &logthis('CRITICAL: lonc not running, giving up');
- }
-}
-
-# -------------------------------------------------- Non-critical communication
-
-sub subreply {
- my ($cmd,$server)=@_;
- my $peerfile="$perlvar{'lonSockDir'}/".$hostname{$server};
- my $sclient=IO::Socket::UNIX->new(Peer =>"$peerfile",
- Type => SOCK_STREAM,
- Timeout => 10)
- or return "con_lost";
- print $sclient "sethost:$server:$cmd\n";
- my $answer=<$sclient>;
- chomp($answer);
- if (!$answer) { $answer="con_lost"; }
- return $answer;
-}
-
-sub reply {
- my ($cmd,$server)=@_;
- my $answer;
- if ($server ne $currenthostid) {
- $answer=subreply($cmd,$server);
- if ($answer eq 'con_lost') {
- $answer=subreply("ping",$server);
- if ($answer ne $server) {
- &logthis("sub reply: answer != server answer is $answer, server is $server");
- &reconlonc("$perlvar{'lonSockDir'}/".$hostname{$server});
- }
- $answer=subreply($cmd,$server);
- }
- } else {
- $answer='self_reply';
- }
- return $answer;
-}
-
# -------------------------------------------------------------- Talk to lonsql
sub sql_reply {
@@ -5386,8 +5277,7 @@ $SIG{USR1} = \&checkchildren;
$SIG{USR2} = \&UpdateHosts;
# Read the host hashes:
-
-ReadHostTable;
+&Apache::lonnet::load_hosts_tab();
my $dist=`$perlvar{'lonDaemons'}/distprobe`;
@@ -5466,8 +5356,8 @@ sub make_new_child {
# my $tmpsnum=0; # Now global
#---------------------------------------------------- kerberos 5 initialization
&Authen::Krb5::init_context();
- unless (($dist eq 'fedora5') || ($dist eq 'fedora4')
- || ($dist eq 'suse9.3')) {
+ unless (($dist eq 'fedora5') || ($dist eq 'fedora4') ||
+ ($dist eq 'fedora6') || ($dist eq 'suse9.3')) {
&Authen::Krb5::init_ets();
}
@@ -5477,19 +5367,17 @@ sub make_new_child {
# -----------------------------------------------------------------------------
# see if we know client and 'check' for spoof IP by ineffective challenge
- ReadManagerTable; # May also be a manager!!
-
my $outsideip=$clientip;
if ($clientip eq '127.0.0.1') {
- $outsideip=$hostip{$perlvar{'lonHostID'}};
+ $outsideip=&Apache::lonnet::get_host_ip($perlvar{'lonHostID'});
}
- my $clientrec=($hostid{$outsideip} ne undef);
+ my $clientrec=defined(&Apache::lonnet::get_hosts_from_ip($outsideip));
my $ismanager=($managers{$outsideip} ne undef);
$clientname = "[unknonwn]";
if($clientrec) { # Establish client type.
$ConnectionType = "client";
- $clientname = $hostid{$outsideip};
+ $clientname = (&Apache::lonnet::get_hosts_from_ip($outsideip))[-1];
if($ismanager) {
$ConnectionType = "both";
}
@@ -5596,14 +5484,9 @@ sub make_new_child {
if ($clientok) {
# ---------------- New known client connecting, could mean machine online again
-
- foreach my $id (keys(%hostip)) {
- if ($hostip{$id} ne $clientip ||
- $hostip{$currenthostid} eq $clientip) {
- # no need to try to do recon's to myself
- next;
- }
- &reconlonc("$perlvar{'lonSockDir'}/".$hostname{$id});
+ if (&Apache::lonnet::get_host_ip($currenthostid) ne $clientip
+ && $clientip ne '127.0.0.1') {
+ &Apache::lonnet::reconlonc($clientname);
}
&logthis("Established connection: $clientname");
&status('Will listen to '.$clientname);
@@ -5880,7 +5763,8 @@ sub validate_user {
my $krbservice = "krbtgt/".$contentpwd."\@".$contentpwd;
my $krbserver = &Authen::Krb5::parse_name($krbservice);
my $credentials= &Authen::Krb5::cc_default();
- $credentials->initialize($krbclient);
+ $credentials->initialize(&Authen::Krb5::parse_name($user.'@'
+ .$contentpwd));
my $krbreturn = &Authen::Krb5::get_in_tkt_with_password($krbclient,
$krbserver,
$password,
@@ -5893,7 +5777,12 @@ sub validate_user {
# Authenticate via installation specific authentcation method:
$validated = &localauth::localauth($user,
$password,
- $contentpwd);
+ $contentpwd,
+ $domain);
+ if ($validated < 0) {
+ &logthis("localauth for $contentpwd $user:$domain returned a $validated");
+ $validated = 0;
+ }
} else { # Unrecognized auth is also bad.
$validated = 0;
}
@@ -5919,8 +5808,7 @@ sub addline {
my ($fname,$hostid,$ip,$newline)=@_;
my $contents;
my $found=0;
- my $expr='^'.$hostid.':'.$ip.':';
- $expr =~ s/\./\\\./g;
+ my $expr='^'.quotemeta($hostid).':'.quotemeta($ip).':';
my $sh;
if ($sh=IO::File->new("$fname.subscription")) {
while (my $subline=<$sh>) {
@@ -6127,7 +6015,7 @@ sub subscribe {
# the metadata
unless ($fname=~/\.meta$/) { &unsub("$fname.meta",$clientip); }
$fname=~s/\/home\/httpd\/html\/res/raw/;
- $fname="http://$thisserver/".$fname;
+ $fname="http://".&Apache::lonnet::hostname($perlvar{'lonHostID'})."/".$fname;
$result="$fname\n";
}
} else {
@@ -6281,9 +6169,10 @@ sub sethost {
}
if (!defined($hostid)) { $hostid=$perlvar{'lonHostID'}; }
- if ($hostip{$perlvar{'lonHostID'}} eq $hostip{$hostid}) {
+ if (&Apache::lonnet::get_host_ip($perlvar{'lonHostID'})
+ eq &Apache::lonnet::get_host_ip($hostid)) {
$currenthostid =$hostid;
- $currentdomainid=$hostdom{$hostid};
+ $currentdomainid=&Apache::lonnet::host_domain($hostid);
&logthis("Setting hostid to $hostid, and domain to $currentdomainid");
} else {
&logthis("Requested host id $hostid not an alias of ".
@@ -6299,96 +6188,6 @@ sub version {
return "version:$VERSION";
}
-#There is a copy of this in lonnet.pm
-sub userload {
- my $numusers=0;
- {
- opendir(LONIDS,$perlvar{'lonIDsDir'});
- my $filename;
- my $curtime=time;
- while ($filename=readdir(LONIDS)) {
- if ($filename eq '.' || $filename eq '..') {next;}
- my ($mtime)=(stat($perlvar{'lonIDsDir'}.'/'.$filename))[9];
- if ($curtime-$mtime < 1800) { $numusers++; }
- }
- closedir(LONIDS);
- }
- my $userloadpercent=0;
- my $maxuserload=$perlvar{'lonUserLoadLim'};
- if ($maxuserload) {
- $userloadpercent=100*$numusers/$maxuserload;
- }
- $userloadpercent=sprintf("%.2f",$userloadpercent);
- return $userloadpercent;
-}
-
-# Routines for serializing arrays and hashes (copies from lonnet)
-
-sub array2str {
- my (@array) = @_;
- my $result=&arrayref2str(\@array);
- $result=~s/^__ARRAY_REF__//;
- $result=~s/__END_ARRAY_REF__$//;
- return $result;
-}
-
-sub arrayref2str {
- my ($arrayref) = @_;
- my $result='__ARRAY_REF__';
- foreach my $elem (@$arrayref) {
- if(ref($elem) eq 'ARRAY') {
- $result.=&arrayref2str($elem).'&';
- } elsif(ref($elem) eq 'HASH') {
- $result.=&hashref2str($elem).'&';
- } elsif(ref($elem)) {
- #print("Got a ref of ".(ref($elem))." skipping.");
- } else {
- $result.=&escape($elem).'&';
- }
- }
- $result=~s/\&$//;
- $result .= '__END_ARRAY_REF__';
- return $result;
-}
-
-sub hash2str {
- my (%hash) = @_;
- my $result=&hashref2str(\%hash);
- $result=~s/^__HASH_REF__//;
- $result=~s/__END_HASH_REF__$//;
- return $result;
-}
-
-sub hashref2str {
- my ($hashref)=@_;
- my $result='__HASH_REF__';
- foreach (sort(keys(%$hashref))) {
- if (ref($_) eq 'ARRAY') {
- $result.=&arrayref2str($_).'=';
- } elsif (ref($_) eq 'HASH') {
- $result.=&hashref2str($_).'=';
- } elsif (ref($_)) {
- $result.='=';
- #print("Got a ref of ".(ref($_))." skipping.");
- } else {
- if ($_) {$result.=&escape($_).'=';} else { last; }
- }
-
- if(ref($hashref->{$_}) eq 'ARRAY') {
- $result.=&arrayref2str($hashref->{$_}).'&';
- } elsif(ref($hashref->{$_}) eq 'HASH') {
- $result.=&hashref2str($hashref->{$_}).'&';
- } elsif(ref($hashref->{$_})) {
- $result.='&';
- #print("Got a ref of ".(ref($hashref->{$_}))." skipping.");
- } else {
- $result.=&escape($hashref->{$_}).'&';
- }
- }
- $result=~s/\&$//;
- $result .= '__END_HASH_REF__';
- return $result;
-}
# ----------------------------------- POD (plain old documentation, CPAN style)
500 Internal Server Error
Internal Server Error
The server encountered an internal error or
misconfiguration and was unable to complete
your request.
Please contact the server administrator at
root@localhost to inform them of the time this error occurred,
and the actions you performed just before this error.
More information about this error may be available
in the server error log.