Diff for /loncom/loncron between versions 1.106 and 1.107

version 1.106, 2018/07/18 13:44:55 version 1.107, 2018/08/07 17:12:09
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 (%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();          &finish_logging($fh);
         &update_revocation_list();          my %conchgs = &write_connection_config();
           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(%sslrem);
           }
  if ($totalcount>200 && !$noemail) { &send_mail(); }   if ($totalcount>200 && !$noemail) { &send_mail(); }
     }      }
 }  }

Removed from v.1.106  
changed lines
  Added in v.1.107


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>