version 1.106, 2018/07/18 13:44:55
|
version 1.109, 2018/10/25 02:48:56
|
Line 165 sub checkon_daemon {
|
Line 165 sub checkon_daemon {
|
&log($fh,unlink($pidfile).' - '. |
&log($fh,unlink($pidfile).' - '. |
`killall -9 $kadaemon 2>&1`. |
`killall -9 $kadaemon 2>&1`. |
'</font><br />'); |
'</font><br />'); |
|
if ($kadaemon eq 'loncnew') { |
|
&clean_lonc_childpids(); |
|
} |
&log($fh,"<h3>$daemon not running, trying to start</h3>"); |
&log($fh,"<h3>$daemon not running, trying to start</h3>"); |
|
|
if (&start_daemon($fh,$daemon,$pidfile,$args)) { |
if (&start_daemon($fh,$daemon,$pidfile,$args)) { |
Line 821 sub write_checksums {
|
Line 824 sub write_checksums {
|
return; |
return; |
} |
} |
|
|
|
sub clean_nosslverify { |
|
my ($fh) = @_; |
|
my %unlinked; |
|
if (-d "$perlvar{'lonSockDir'}/nosslverify") { |
|
if (opendir(my $dh,"$perlvar{'lonSockDir'}/nosslverify")) { |
|
while (my $fname=readdir($dh)) { |
|
next if ($fname =~ /^\.+$/); |
|
if (unlink("/home/httpd/sockets/nosslverify/$fname")) { |
|
&log($fh,"Unlinking $fname<br />"); |
|
$unlinked{$fname} = 1; |
|
} |
|
} |
|
closedir($dh); |
|
} |
|
} |
|
&log($fh,"<p>Removed ".scalar(keys(%unlinked))." nosslverify clients</p>"); |
|
return %unlinked; |
|
} |
|
sub clean_lonc_childpids { |
|
my $childpiddir = "$perlvar{'lonDocRoot'}/lon-status/loncchld"; |
|
if (-d $childpiddir) { |
|
if (opendir(my $dh,$childpiddir)) { |
|
while (my $fname=readdir($dh)) { |
|
next if ($fname =~ /^\.+$/); |
|
unlink("$childpiddir/$fname"); |
|
} |
|
closedir($dh); |
|
} |
|
} |
|
} |
|
|
sub write_connection_config { |
sub write_connection_config { |
my ($isprimary,$domconf,$url,%connectssl); |
my ($isprimary,$domconf,$url,%connectssl,%changes); |
my $primaryLibServer = &Apache::lonnet::domain($perlvar{'lonDefDomain'},'primary'); |
my $primaryLibServer = &Apache::lonnet::domain($perlvar{'lonDefDomain'},'primary'); |
if ($primaryLibServer eq $perlvar{'lonHostID'}) { |
if ($primaryLibServer eq $perlvar{'lonHostID'}) { |
$isprimary = 1; |
$isprimary = 1; |
Line 849 sub write_connection_config {
|
Line 883 sub write_connection_config {
|
} |
} |
} |
} |
if (keys(%connectssl)) { |
if (keys(%connectssl)) { |
if (open(my $fh,">$perlvar{'lonTabDir'}/connectionrules.tab")) { |
my %currconf; |
|
if (open(my $fh,'<',"$perlvar{'lonTabDir'}/connectionrules.tab")) { |
|
while (my $line = <$fh>) { |
|
chomp($line); |
|
my ($name,$value) = split(/=/,$line); |
|
if ($value =~ /^(?:no|yes|req)$/) { |
|
if ($name =~ /^conn(to|from)_(dom|intdom|other)$/) { |
|
$currconf{$name} = $value; |
|
} |
|
} |
|
} |
|
close($fh); |
|
} |
|
if (open(my $fh,'>',"$perlvar{'lonTabDir'}/connectionrules.tab")) { |
my $count = 0; |
my $count = 0; |
foreach my $key (sort(keys(%connectssl))) { |
foreach my $key (sort(keys(%connectssl))) { |
print $fh "$key=$connectssl{$key}\n"; |
print $fh "$key=$connectssl{$key}\n"; |
|
if (exists($currconf{$key})) { |
|
unless ($currconf{$key} eq $connectssl{$key}) { |
|
$changes{$key} = 1; |
|
} |
|
} else { |
|
$changes{$key} = 1; |
|
} |
$count ++; |
$count ++; |
} |
} |
close($fh); |
close($fh); |
Line 864 sub write_connection_config {
|
Line 918 sub write_connection_config {
|
} else { |
} else { |
print "Retrieval of SSL options for lonc/lond skipped - no configuration data available for domain.\n"; |
print "Retrieval of SSL options for lonc/lond skipped - no configuration data available for domain.\n"; |
} |
} |
|
return %changes; |
} |
} |
|
|
sub get_domain_config { |
sub get_domain_config { |
Line 917 sub write_hosttypes {
|
Line 972 sub write_hosttypes {
|
my %hostdom = &Apache::lonnet::all_host_domain(); |
my %hostdom = &Apache::lonnet::all_host_domain(); |
my $dom = $hostdom{$perlvar{'lonHostID'}}; |
my $dom = $hostdom{$perlvar{'lonHostID'}}; |
my $internetdom = $intdom{$perlvar{'lonHostID'}}; |
my $internetdom = $intdom{$perlvar{'lonHostID'}}; |
|
my %changes; |
if (($dom ne '') && ($internetdom ne '')) { |
if (($dom ne '') && ($internetdom ne '')) { |
if (keys(%hostdom)) { |
if (keys(%hostdom)) { |
if (open(my $fh,">$perlvar{'lonTabDir'}/hosttypes.tab")) { |
my %currhosttypes; |
|
if (open(my $fh,'<',"$perlvar{'lonTabDir'}/hosttypes.tab")) { |
|
while (my $line = <$fh>) { |
|
chomp($line); |
|
my ($name,$value) = split(/:/,$line); |
|
if (($name ne '') && ($value =~ /^(dom|intdom|other)$/)) { |
|
$currhosttypes{$name} = $value; |
|
} |
|
} |
|
close($fh); |
|
} |
|
if (open(my $fh,'>',"$perlvar{'lonTabDir'}/hosttypes.tab")) { |
my $count = 0; |
my $count = 0; |
foreach my $lonid (sort(keys(%hostdom))) { |
foreach my $lonid (sort(keys(%hostdom))) { |
my $type = 'other'; |
my $type = 'other'; |
Line 929 sub write_hosttypes {
|
Line 996 sub write_hosttypes {
|
$type = 'intdom'; |
$type = 'intdom'; |
} |
} |
print $fh "$lonid:$type\n"; |
print $fh "$lonid:$type\n"; |
|
if (exists($currhosttypes{$lonid})) { |
|
if ($type ne $currhosttypes{$lonid}) { |
|
$changes{$lonid} = 1; |
|
} |
|
} else { |
|
$changes{$lonid} = 1; |
|
} |
$count ++; |
$count ++; |
} |
} |
close($fh); |
close($fh); |
Line 940 sub write_hosttypes {
|
Line 1014 sub write_hosttypes {
|
} else { |
} else { |
print "Writing of host types skipped - could not determine this host's LON-CAPA domain or 'internet' domain.\n"; |
print "Writing of host types skipped - could not determine this host's LON-CAPA domain or 'internet' domain.\n"; |
} |
} |
|
return %changes; |
} |
} |
|
|
sub update_revocation_list { |
sub update_revocation_list { |
if (&Apache::lonnet::fetch_crl_pemfile() eq 'ok') { |
my ($result,$changed) = &Apache::lonnet::fetch_crl_pemfile(); |
|
if ($result eq 'ok') { |
print "Certificate Revocation List (from CA) updated.\n"; |
print "Certificate Revocation List (from CA) updated.\n"; |
} else { |
} else { |
print "Certificate Revocation List from (CA) not updated.\n"; |
print "Certificate Revocation List from (CA) not updated.\n"; |
} |
} |
|
return $changed; |
|
} |
|
|
|
sub reset_nosslverify_pids { |
|
my ($fh,%sslrem) = @_; |
|
&checkon_daemon($fh,'lond',40000,'USR2'); |
|
my $loncpidfile="$perlvar{'lonDaemons'}/logs/lonc.pid"; |
|
my $loncppid; |
|
if ((-e $loncpidfile) && (open(my $pfh,'<',$loncpidfile))) { |
|
$loncppid=<$pfh>; |
|
chomp($loncppid); |
|
close($pfh); |
|
if ($loncppid =~ /^\d+$/) { |
|
my %pids_by_host; |
|
my $docdir = $perlvar{'lonDocRoot'}; |
|
if (-d "$docdir/lon-status/loncchld") { |
|
if (opendir(my $dh,"$docdir/lon-status/loncchld")) { |
|
while (my $file = readdir($dh)) { |
|
next if ($file =~ /^\./); |
|
if (open(my $fh,'<',"$docdir/lon-status/loncchld/$file")) { |
|
my $record = <$fh>; |
|
chomp($record); |
|
close($fh); |
|
my ($remotehost,$authmode) = split(/:/,$record); |
|
$pids_by_host{$remotehost}{$authmode}{$file} = 1; |
|
} |
|
} |
|
closedir($dh); |
|
if (keys(%pids_by_host)) { |
|
foreach my $host (keys(%pids_by_host)) { |
|
if ($sslrem{$host}) { |
|
if (ref($pids_by_host{$host}) eq 'HASH') { |
|
if (ref($pids_by_host{$host}{'insecure'}) eq 'HASH') { |
|
if (keys(%{$pids_by_host{$host}{'insecure'}})) { |
|
foreach my $pid (keys(%{$pids_by_host{$host}{'insecure'}})) { |
|
if (open(PIPE,"ps -o ppid= -p $pid |")) { |
|
my $ppid = <PIPE>; |
|
chomp($ppid); |
|
close(PIPE); |
|
$ppid =~ s/(^\s+|\s+$)//g; |
|
if (($ppid == $loncppid) && (kill 0 => $pid)) { |
|
kill QUIT => $pid; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
return; |
} |
} |
|
|
sub send_mail { |
sub send_mail { |
Line 1125 sub main () {
|
Line 1257 sub main () {
|
&checkon_daemon($fh,'lonr',40000); |
&checkon_daemon($fh,'lonr',40000); |
} |
} |
if ($justreload) { |
if ($justreload) { |
|
&clean_nosslverify($fh); |
&write_connection_config(); |
&write_connection_config(); |
&write_hosttypes(); |
&write_hosttypes(); |
|
&update_revocation_list(); |
&checkon_daemon($fh,'lond',40000,'USR2'); |
&checkon_daemon($fh,'lond',40000,'USR2'); |
&checkon_daemon($fh,'lonc',40000,'USR2'); |
&checkon_daemon($fh,'lonc',40000,'USR2'); |
} |
} |
Line 1135 sub main () {
|
Line 1269 sub main () {
|
} |
} |
if (!$justcheckdaemons && !$justcheckconnections && !$justreload) { |
if (!$justcheckdaemons && !$justcheckconnections && !$justreload) { |
&check_delayed_msg($fh); |
&check_delayed_msg($fh); |
&finish_logging($fh); |
|
&log_simplestatus(); |
&log_simplestatus(); |
&write_loncaparevs(); |
&write_loncaparevs(); |
&write_serverhomeIDs(); |
&write_serverhomeIDs(); |
&write_checksums(); |
&write_checksums(); |
&write_connection_config(); |
my %sslrem = &clean_nosslverify($fh); |
&write_hosttypes(); |
my %conchgs = &write_connection_config(); |
&update_revocation_list(); |
my %hosttypechgs = &write_hosttypes(); |
|
my $hadcrlchg = &update_revocation_list(); |
|
if ((keys(%conchgs) > 0) || (keys(%hosttypechgs) > 0) || |
|
$hadcrlchg || (keys(%sslrem) > 0)) { |
|
&checkon_daemon($fh,'lond',40000,'USR2'); |
|
&reset_nosslverify_pids($fh,%sslrem); |
|
} |
|
&finish_logging($fh); |
if ($totalcount>200 && !$noemail) { &send_mail(); } |
if ($totalcount>200 && !$noemail) { &send_mail(); } |
} |
} |
} |
} |