version 1.162, 2003/11/12 20:47:04
|
version 1.165.2.1, 2004/01/14 01:20:40
|
Line 205 sub ReadManagerTable {
|
Line 205 sub ReadManagerTable {
|
sub ValidManager { |
sub ValidManager { |
my $certificate = shift; |
my $certificate = shift; |
|
|
ReadManagerTable; |
return isManager; |
|
|
my $hostname = $hostid{$certificate}; |
|
|
|
|
|
if ($hostname ne undef) { |
|
if($managers{$hostname} ne undef) { |
|
&logthis('<font color="yellow">Authenticating manager'. |
|
" $hostname</font>"); |
|
return 1; |
|
} else { |
|
&logthis('<font color="red" failed manager authentication '. |
|
$hostname." is not a valid manager host</font>"); |
|
return 0; |
|
} |
|
} else { |
|
&logthis('<font color="red"> Failed manager authentication '. |
|
"$certificate </font>"); |
|
return 0; |
|
} |
|
} |
} |
# |
# |
# CopyFile: Called as part of the process of installing a |
# CopyFile: Called as part of the process of installing a |
Line 532 sub catchexception {
|
Line 513 sub catchexception {
|
my ($error)=@_; |
my ($error)=@_; |
$SIG{'QUIT'}='DEFAULT'; |
$SIG{'QUIT'}='DEFAULT'; |
$SIG{__DIE__}='DEFAULT'; |
$SIG{__DIE__}='DEFAULT'; |
|
&status("Catching exception"); |
&logthis("<font color=red>CRITICAL: " |
&logthis("<font color=red>CRITICAL: " |
."ABNORMAL EXIT. Child $$ for server $thisserver died through " |
."ABNORMAL EXIT. Child $$ for server $thisserver died through " |
."a crash with this error msg->[$error]</font>"); |
."a crash with this error msg->[$error]</font>"); |
Line 542 sub catchexception {
|
Line 524 sub catchexception {
|
} |
} |
|
|
sub timeout { |
sub timeout { |
|
&status("Handling Timeout"); |
&logthis("<font color=ref>CRITICAL: TIME OUT ".$$."</font>"); |
&logthis("<font color=ref>CRITICAL: TIME OUT ".$$."</font>"); |
&catchexception('Timeout'); |
&catchexception('Timeout'); |
} |
} |
Line 598 my $children = 0; #
|
Line 581 my $children = 0; #
|
|
|
sub REAPER { # takes care of dead children |
sub REAPER { # takes care of dead children |
$SIG{CHLD} = \&REAPER; |
$SIG{CHLD} = \&REAPER; |
|
&status("Handling child death"); |
my $pid = wait; |
my $pid = wait; |
if (defined($children{$pid})) { |
if (defined($children{$pid})) { |
&logthis("Child $pid died"); |
&logthis("Child $pid died"); |
Line 606 sub REAPER { # ta
|
Line 590 sub REAPER { # ta
|
} else { |
} else { |
&logthis("Unknown Child $pid died"); |
&logthis("Unknown Child $pid died"); |
} |
} |
|
&status("Finished Handling child death"); |
} |
} |
|
|
sub HUNTSMAN { # signal handler for SIGINT |
sub HUNTSMAN { # signal handler for SIGINT |
|
&status("Killing children (INT)"); |
local($SIG{CHLD}) = 'IGNORE'; # we're going to kill our children |
local($SIG{CHLD}) = 'IGNORE'; # we're going to kill our children |
kill 'INT' => keys %children; |
kill 'INT' => keys %children; |
&logthis("Free socket: ".shutdown($server,2)); # free up socket |
&logthis("Free socket: ".shutdown($server,2)); # free up socket |
my $execdir=$perlvar{'lonDaemons'}; |
my $execdir=$perlvar{'lonDaemons'}; |
unlink("$execdir/logs/lond.pid"); |
unlink("$execdir/logs/lond.pid"); |
&logthis("<font color=red>CRITICAL: Shutting down</font>"); |
&logthis("<font color=red>CRITICAL: Shutting down</font>"); |
|
&status("Done killing children"); |
exit; # clean up with dignity |
exit; # clean up with dignity |
} |
} |
|
|
sub HUPSMAN { # signal handler for SIGHUP |
sub HUPSMAN { # signal handler for SIGHUP |
local($SIG{CHLD}) = 'IGNORE'; # we're going to kill our children |
local($SIG{CHLD}) = 'IGNORE'; # we're going to kill our children |
|
&status("Killing children for restart (HUP)"); |
kill 'INT' => keys %children; |
kill 'INT' => keys %children; |
&logthis("Free socket: ".shutdown($server,2)); # free up socket |
&logthis("Free socket: ".shutdown($server,2)); # free up socket |
&logthis("<font color=red>CRITICAL: Restarting</font>"); |
&logthis("<font color=red>CRITICAL: Restarting</font>"); |
my $execdir=$perlvar{'lonDaemons'}; |
my $execdir=$perlvar{'lonDaemons'}; |
unlink("$execdir/logs/lond.pid"); |
unlink("$execdir/logs/lond.pid"); |
|
&status("Restarting self (HUP)"); |
exec("$execdir/lond"); # here we go again |
exec("$execdir/lond"); # here we go again |
} |
} |
|
|
Line 686 sub ReloadApache {
|
Line 675 sub ReloadApache {
|
# now be honored. |
# now be honored. |
# |
# |
sub UpdateHosts { |
sub UpdateHosts { |
|
&status("Reload hosts.tab"); |
logthis('<font color="blue"> Updating connections </font>'); |
logthis('<font color="blue"> Updating connections </font>'); |
# |
# |
# The %children hash has the set of IP's we currently have children |
# The %children hash has the set of IP's we currently have children |
Line 710 sub UpdateHosts {
|
Line 700 sub UpdateHosts {
|
} |
} |
} |
} |
ReloadApache; |
ReloadApache; |
|
&status("Finished reloading hosts.tab"); |
} |
} |
|
|
|
|
sub checkchildren { |
sub checkchildren { |
|
&status("Checking on the children (sending signals)"); |
&initnewstatus(); |
&initnewstatus(); |
&logstatus(); |
&logstatus(); |
&logthis('Going to check on the children'); |
&logthis('Going to check on the children'); |
Line 728 sub checkchildren {
|
Line 720 sub checkchildren {
|
sleep 5; |
sleep 5; |
$SIG{ALRM} = sub { die "timeout" }; |
$SIG{ALRM} = sub { die "timeout" }; |
$SIG{__DIE__} = 'DEFAULT'; |
$SIG{__DIE__} = 'DEFAULT'; |
|
&status("Checking on the children (waiting for reports)"); |
foreach (sort keys %children) { |
foreach (sort keys %children) { |
unless (-e "$docdir/lon-status/londchld/$_.txt") { |
unless (-e "$docdir/lon-status/londchld/$_.txt") { |
eval { |
eval { |
Line 745 sub checkchildren {
|
Line 738 sub checkchildren {
|
} |
} |
$SIG{ALRM} = 'DEFAULT'; |
$SIG{ALRM} = 'DEFAULT'; |
$SIG{__DIE__} = \&catchexception; |
$SIG{__DIE__} = \&catchexception; |
|
&status("Finished checking children"); |
} |
} |
|
|
# --------------------------------------------------------------------- Logging |
# --------------------------------------------------------------------- Logging |
Line 787 sub Reply {
|
Line 781 sub Reply {
|
# ------------------------------------------------------------------ Log status |
# ------------------------------------------------------------------ Log status |
|
|
sub logstatus { |
sub logstatus { |
|
&status("Doing logging"); |
my $docdir=$perlvar{'lonDocRoot'}; |
my $docdir=$perlvar{'lonDocRoot'}; |
{ |
{ |
my $fh=IO::File->new(">>$docdir/lon-status/londstatus.txt"); |
my $fh=IO::File->new(">>$docdir/lon-status/londstatus.txt"); |
print $fh $$."\t".$currenthostid."\t".$status."\t".$lastlog."\n"; |
print $fh $$."\t".$currenthostid."\t".$status."\t".$lastlog."\n"; |
$fh->close(); |
$fh->close(); |
} |
} |
|
&status("Finished londstatus.txt"); |
{ |
{ |
my $fh=IO::File->new(">$docdir/lon-status/londchld/$$.txt"); |
my $fh=IO::File->new(">$docdir/lon-status/londchld/$$.txt"); |
print $fh $status."\n".$lastlog."\n".time; |
print $fh $status."\n".$lastlog."\n".time; |
$fh->close(); |
$fh->close(); |
} |
} |
|
&status("Finished logging"); |
} |
} |
|
|
sub initnewstatus { |
sub initnewstatus { |
Line 985 ReadHostTable;
|
Line 982 ReadHostTable;
|
# along the connection. |
# along the connection. |
|
|
while (1) { |
while (1) { |
|
&status('Starting accept'); |
$client = $server->accept() or next; |
$client = $server->accept() or next; |
|
&status('Accepted '.$client.' off to spawn'); |
make_new_child($client); |
make_new_child($client); |
|
&status('Finished spawning'); |
} |
} |
|
|
sub make_new_child { |
sub make_new_child { |
Line 995 sub make_new_child {
|
Line 995 sub make_new_child {
|
my $sigset; |
my $sigset; |
|
|
$client = shift; |
$client = shift; |
|
&status('Starting new child '.$client); |
&logthis('<font color="green"> Attempting to start child ('.$client. |
&logthis('<font color="green"> Attempting to start child ('.$client. |
")</font>"); |
")</font>"); |
# block signal for fork |
# block signal for fork |
Line 1438 sub make_new_child {
|
Line 1439 sub make_new_child {
|
unless (mkdir($fpnow,0777)) { |
unless (mkdir($fpnow,0777)) { |
$fperror="error: ".($!+0) |
$fperror="error: ".($!+0) |
." mkdir failed while attempting " |
." mkdir failed while attempting " |
."makeuser\n"; |
."makeuser"; |
} |
} |
} |
} |
} |
} |
Line 1958 sub make_new_child {
|
Line 1959 sub make_new_child {
|
my %hash; |
my %hash; |
if (tie(%hash,'GDBM_File',"$proname/$namespace.db",&GDBM_WRCREAT(),0640)) { |
if (tie(%hash,'GDBM_File',"$proname/$namespace.db",&GDBM_WRCREAT(),0640)) { |
foreach my $key (@keys) { |
foreach my $key (@keys) { |
delete($hash{$key}); |
delete($hash{&unescape($key)}); |
} |
} |
if (untie(%hash)) { |
if (untie(%hash)) { |
print $client "ok\n"; |
print $client "ok\n"; |
Line 2519 sub make_new_child {
|
Line 2520 sub make_new_child {
|
&logthis( |
&logthis( |
"Client $clientip ($clientname) hanging up: $userinput"); |
"Client $clientip ($clientname) hanging up: $userinput"); |
print $client "bye\n"; |
print $client "bye\n"; |
|
$client->shutdown(2); # shutdown the socket forcibly. |
$client->close(); |
$client->close(); |
last; |
last; |
|
|