Diff for /loncom/loncron between versions 1.118 and 1.130

version 1.118, 2019/03/18 00:37:37 version 1.130, 2024/07/10 02:47:53
Line 42  use IO::File; Line 42  use IO::File;
 use IO::Socket;  use IO::Socket;
 use HTML::Entities;  use HTML::Entities;
 use Getopt::Long;  use Getopt::Long;
 use GDBM_File;  use GDBM_File qw(GDBM_READER);
 use Storable qw(thaw);  use Storable qw(thaw);
 use File::ReadBackwards;  use File::ReadBackwards;
 use File::Copy;  use File::Copy;
   use Sys::Hostname::FQDN();
   
 #globals  #globals
 use vars qw (%perlvar %simplestatus $errors $warnings $notices $totalcount);  use vars qw (%perlvar %simplestatus $errors $warnings $notices $totalcount);
   
Line 78  sub rotate_logfile { Line 80  sub rotate_logfile {
  rename("$file.2","$file.3");   rename("$file.2","$file.3");
  rename("$file.1","$file.2");   rename("$file.1","$file.2");
  rename("$file","$file.1");   rename("$file","$file.1");
     }       }
 }  }
   
 sub start_daemon {  sub start_daemon {
     my ($fh,$daemon,$pidfile,$args) = @_;      my ($fh,$daemon,$pidfile,$args) = @_;
     my $progname=$daemon;      my $progname=$daemon;
     if ($daemon eq 'lonc') {      if ($daemon eq 'lonc') {
  $progname='loncnew';    $progname='loncnew';
     }      }
     my $error_fname="$perlvar{'lonDaemons'}/logs/${daemon}_errors";      my $error_fname="$perlvar{'lonDaemons'}/logs/${daemon}_errors";
     &rotate_logfile($error_fname,$fh,'error logs');      &rotate_logfile($error_fname,$fh,'error logs');
Line 119  sub checkon_daemon { Line 121  sub checkon_daemon {
     if ($fh) {      if ($fh) {
         if (-e "$perlvar{'lonDaemons'}/logs/$daemon.log"){          if (-e "$perlvar{'lonDaemons'}/logs/$daemon.log"){
     if (open(DFH,"tail -n25 $perlvar{'lonDaemons'}/logs/$daemon.log|")) {      if (open(DFH,"tail -n25 $perlvar{'lonDaemons'}/logs/$daemon.log|")) {
         while (my $line=<DFH>) {           while (my $line=<DFH>) {
             &log($fh,"$line");              &log($fh,"$line");
             if ($line=~/INFO/) { $notices++; }              if ($line=~/INFO/) { $notices++; }
             if ($line=~/WARNING/) { $notices++; }              if ($line=~/WARNING/) { $notices++; }
Line 130  sub checkon_daemon { Line 132  sub checkon_daemon {
         }          }
         &log($fh,"</tt></p>");          &log($fh,"</tt></p>");
     }      }
       
     my $pidfile="$perlvar{'lonDaemons'}/logs/$daemon.pid";      my $pidfile="$perlvar{'lonDaemons'}/logs/$daemon.pid";
        
     my $restartflag=1;      my $restartflag=1;
     my $daemonpid;      my $daemonpid;
     if (-e $pidfile) {      if (-e $pidfile) {
Line 215  sub checkon_daemon { Line 217  sub checkon_daemon {
             }              }
  }   }
     }      }
       
     my $fname="$perlvar{'lonDaemons'}/logs/$daemon.log";      my $fname="$perlvar{'lonDaemons'}/logs/$daemon.log";
     &rotate_logfile($fname,$fh,'logs');      &rotate_logfile($fname,$fh,'logs');
   
Line 228  sub log_machine_info { Line 230  sub log_machine_info {
     my ($fh)=@_;      my ($fh)=@_;
     &log($fh,'<hr /><a name="machine" /><h2>Machine Information</h2>');      &log($fh,'<hr /><a name="machine" /><h2>Machine Information</h2>');
     &log($fh,"<h3>loadavg</h3>");      &log($fh,"<h3>loadavg</h3>");
   
       my $cpucount;
       if (open(PIPE,"lscpu |grep '^CPU(s)' 2>&1 |")) {
           my $info = <PIPE>;
           chomp($info);
           ($cpucount) = ($info =~ /^\QCPU(s):\E\s+(\d+)$/);
           close(PIPE);
       }
       if (!$cpucount) {
           $cpucount = 1;
       }
       my %loadtarget = (
                           error => 4.0*$cpucount,
                           warn  => 2.0*$cpucount,
                           note  => 1.0*$cpucount,
                        );
     open (LOADAVGH,"/proc/loadavg");      open (LOADAVGH,"/proc/loadavg");
     my $loadavg=<LOADAVGH>;      my $loadavg=<LOADAVGH>;
     close (LOADAVGH);      close (LOADAVGH);
        
     &log($fh,"<tt>$loadavg</tt>");      &log($fh,"<tt>$loadavg</tt>");
       
     my @parts=split(/\s+/,$loadavg);      my @parts=split(/\s+/,$loadavg);
     if ($parts[1]>4.0) {      if ($parts[1]>$loadtarget{'error'}) {
  $errors++;   $errors++;
     } elsif ($parts[1]>2.0) {      } elsif ($parts[1]>$loadtarget{'warn'}) {
  $warnings++;   $warnings++;
     } elsif ($parts[1]>1.0) {      } elsif ($parts[1]>$loadtarget{'note'}) {
  $notices++;   $notices++;
     }      }
   
Line 248  sub log_machine_info { Line 265  sub log_machine_info {
     &log($fh,"<pre>");      &log($fh,"<pre>");
   
     open (DFH,"df|");      open (DFH,"df|");
     while (my $line=<DFH>) {       while (my $line=<DFH>) {
  &log($fh,&encode_entities($line,'<>&"'));    &log($fh,&encode_entities($line,'<>&"'));
  @parts=split(/\s+/,$line);   @parts=split(/\s+/,$line);
  my $usage=$parts[4];   my $usage=$parts[4];
  $usage=~s/\W//g;   $usage=~s/\W//g;
  if ($usage>90) {    if ($usage>90) {
     $warnings++;      $warnings++;
     $notices++;       $notices++;
  } elsif ($usage>80) {   } elsif ($usage>80) {
     $warnings++;      $warnings++;
  } elsif ($usage>60) {   } elsif ($usage>60) {
Line 272  sub log_machine_info { Line 289  sub log_machine_info {
     my $psproc=0;      my $psproc=0;
   
     open (PSH,"ps aux --cols 140 |");      open (PSH,"ps aux --cols 140 |");
     while (my $line=<PSH>) {       while (my $line=<PSH>) {
  &log($fh,&encode_entities($line,'<>&"'));    &log($fh,&encode_entities($line,'<>&"'));
  $psproc++;   $psproc++;
     }      }
     close (PSH);      close (PSH);
Line 295  sub start_logging { Line 312  sub start_logging {
     my %simplestatus=();      my %simplestatus=();
     my $now=time;      my $now=time;
     my $date=localtime($now);      my $date=localtime($now);
        
   
     &log($fh,(<<ENDHEADERS));      &log($fh,(<<ENDHEADERS));
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Line 320  sub start_logging { Line 337  sub start_logging {
 <li><a href="#lonc">lonc</a></li>  <li><a href="#lonc">lonc</a></li>
 <li><a href="#lonnet">lonnet</a></li>  <li><a href="#lonnet">lonnet</a></li>
 <li><a href="#connections">Connections</a></li>  <li><a href="#connections">Connections</a></li>
   <li><a href="#bashconf">bash readline config</a></li>
 <li><a href="#delayed">Delayed Messages</a></li>  <li><a href="#delayed">Delayed Messages</a></li>
 <li><a href="#errcount">Error Count</a></li>  <li><a href="#errcount">Error Count</a></li>
 </ol>  </ol>
Line 411  sub recursive_clean_tmp { Line 429  sub recursive_clean_tmp {
                 ($cleaned,$old,$removed) =                   ($cleaned,$old,$removed) = 
                      &recursive_clean_tmp($innerdir,$cleaned,$old,$removed,$errors);                       &recursive_clean_tmp($innerdir,$cleaned,$old,$removed,$errors);
                 my @doms = &Apache::lonnet::current_machine_domains();                  my @doms = &Apache::lonnet::current_machine_domains();
                   
                 if (open(my $dirhandle,$fname)) {                  if (open(my $dirhandle,$fname)) {
                     unless (($innerdir eq 'helprequests') ||                      unless (($innerdir eq 'helprequests') ||
                             (($innerdir =~ /^addcourse/) && ($innerdir !~ m{/\d+$}))) {                              (($innerdir =~ /^addcourse/) && ($innerdir !~ m{/\d+$}))) {
                         my @contents = grep {!/^\.\.?$/} readdir($dirhandle);                          my @contents = grep {!/^\.\.?$/} readdir($dirhandle);
                                       join('&&',@contents)."\n";                                            join('&&',@contents)."\n";
                         if (scalar(grep {!/^\.\.?$/} readdir($dirhandle)) == 0) {                          if (scalar(grep {!/^\.\.?$/} readdir($dirhandle)) == 0) {
                             closedir($dirhandle);                              closedir($dirhandle);
                             if ($fname =~ m{^\Q$perlvar{'lonDaemons'}\E/tmp/}) {                              if ($fname =~ m{^\Q$perlvar{'lonDaemons'}\E/tmp/}) {
Line 469  sub recursive_clean_tmp { Line 487  sub recursive_clean_tmp {
                                 }                                  }
                             }                              }
                         } elsif (ref($errors->{failopen}) eq 'ARRAY') {                          } elsif (ref($errors->{failopen}) eq 'ARRAY') {
                             push(@{$errors->{failopen}},$fname);                               push(@{$errors->{failopen}},$fname);
                         }                          }
                     } else {                      } else {
                         if (unlink($fname)) {                          if (unlink($fname)) {
Line 495  sub clean_lonIDs { Line 513  sub clean_lonIDs {
     my $cleaned=0;      my $cleaned=0;
     my $active=0;      my $active=0;
     while (my $fname=<$perlvar{'lonIDsDir'}/*>) {      while (my $fname=<$perlvar{'lonIDsDir'}/*>) {
  my ($dev,$ino,$mode,$nlink,          my $now=time;
     $uid,$gid,$rdev,$size,          if (-l $fname) {
     $atime,$mtime,$ctime,              my $linkfname = readlink($fname);
     $blksize,$blocks)=stat($fname);              if (-f $linkfname) {
  my $now=time;                  if ($linkfname =~ m{^$perlvar{'lonIDsDir'}/[^/]+\.id$}) {
  my $since=$now-$mtime;                      my @data = stat($linkfname);
  if ($since>$perlvar{'lonExpire'}) {                      my $mtime = $data[9];
     $cleaned++;                      my $since=$now-$mtime;
     &log($fh,"Unlinking $fname<br />");                      if ($since>$perlvar{'lonExpire'}) {
     unlink("$fname");                          if (unlink($linkfname)) {
  } else {                              $cleaned++;
     $active++;                              &log($fh,"Unlinking $linkfname<br />");
  }                              unlink($fname);
                           }
                       }
                   }
               } else {
                  unlink($fname);
               }
           } elsif (-f $fname) {
               my @data = stat($fname);
               my $mtime = $data[9];
               my $since=$now-$mtime;
               if ($since>$perlvar{'lonExpire'}) {
                   if (unlink($fname)) {
                       $cleaned++;
                       &log($fh,"Unlinking $fname<br />");
                   }
               } else {
                   $active++;
               }
           }
     }      }
     &log($fh,"<p>Cleaned up ".$cleaned." stale session token(s).</p>");      &log($fh,"<p>Cleaned up ".$cleaned." stale session token(s).</p>");
     &log($fh,"<h3>$active open session(s)</h3>");      &log($fh,"<h3>$active open session(s)</h3>");
Line 521  sub clean_balanceIDs { Line 558  sub clean_balanceIDs {
     my $cleaned=0;      my $cleaned=0;
     my $active=0;      my $active=0;
     if (-d $perlvar{'lonBalanceDir'}) {      if (-d $perlvar{'lonBalanceDir'}) {
         while (my $fname=<$perlvar{'balanceDir'}/*.id>) {          while (my $fname=<$perlvar{'lonBalanceDir'}/*.id>) {
             my ($dev,$ino,$mode,$nlink,              my ($dev,$ino,$mode,$nlink,
                 $uid,$gid,$rdev,$size,                  $uid,$gid,$rdev,$size,
                 $atime,$mtime,$ctime,                  $atime,$mtime,$ctime,
Line 567  sub clean_webDAV_sessionIDs { Line 604  sub clean_webDAV_sessionIDs {
     }      }
 }  }
   
   # ------------------------------------------------------------ clean out ltiIDs
   
   sub clean_ltiIDs {
       my ($fh)=@_;
       &log($fh,'<hr /><a name="ltisessions" /><h2>LTI Session Pointers</h2>');
       my $cleaned=0;
       my $active=0;
       if (-d $perlvar{'ltiIDsDir'}) {
           while (my $fname=<$perlvar{'ltiIDsDir'}/*>) {
               my ($dev,$ino,$mode,$nlink,
                   $uid,$gid,$rdev,$size,
                   $atime,$mtime,$ctime,
                   $blksize,$blocks)=stat($fname);
               my $now=time;
               my $since=$now-$mtime;
               if ($since>$perlvar{'lonExpire'}) {
                   $cleaned++;
                   &log($fh,"Unlinking $fname<br />");
                   unlink("$fname");
               } else {
                   $active++;
               }
           }
       }
       &log($fh,"<p>Cleaned up ".$cleaned." old LTI session pointers.</p>");
       &log($fh,"<h3>$active unexpired LTI session pointers</h3>");
   }
   
 # ----------------------------------------------------------- clean out sockets  # ----------------------------------------------------------- clean out sockets
 sub clean_sockets {  sub clean_sockets {
     my ($fh)=@_;      my ($fh)=@_;
Line 604  sub rotate_lonnet_logs { Line 669  sub rotate_lonnet_logs {
     print "Checking logs.\n";      print "Checking logs.\n";
     if (-e "$perlvar{'lonDaemons'}/logs/lonnet.log"){      if (-e "$perlvar{'lonDaemons'}/logs/lonnet.log"){
  open (DFH,"tail -n50 $perlvar{'lonDaemons'}/logs/lonnet.log|");   open (DFH,"tail -n50 $perlvar{'lonDaemons'}/logs/lonnet.log|");
  while (my $line=<DFH>) {    while (my $line=<DFH>) {
     &log($fh,&encode_entities($line,'<>&"'));      &log($fh,&encode_entities($line,'<>&"'));
  }   }
  close (DFH);   close (DFH);
     }      }
     &log($fh,"</pre><h3>Perm Log</h3><pre>");      &log($fh,"</pre><h3>Perm Log</h3><pre>");
       
     if (-e "$perlvar{'lonDaemons'}/logs/lonnet.perm.log") {      if (-e "$perlvar{'lonDaemons'}/logs/lonnet.perm.log") {
  open(DFH,"tail -n10 $perlvar{'lonDaemons'}/logs/lonnet.perm.log|");   open(DFH,"tail -n10 $perlvar{'lonDaemons'}/logs/lonnet.perm.log|");
  while (my $line=<DFH>) {    while (my $line=<DFH>) {
     &log($fh,&encode_entities($line,'<>&"'));      &log($fh,&encode_entities($line,'<>&"'));
  }   }
  close (DFH);   close (DFH);
Line 983  sub write_serverhomeIDs { Line 1048  sub write_serverhomeIDs {
                 eval {                  eval {
                     local $SIG{ ALRM } = sub { die "TIMEOUT" };                      local $SIG{ ALRM } = sub { die "TIMEOUT" };
                     alarm(10);                      alarm(10);
                     $serverhomeID =                       $serverhomeID =
                         &Apache::lonnet::get_server_homeID($name,1,'loncron');                          &Apache::lonnet::get_server_homeID($name,1,'loncron');
                     alarm(0);                      alarm(0);
                 };                  };
Line 1068  sub write_hostips { Line 1133  sub write_hostips {
     if (keys(%prevhosts) && keys(%currhosts)) {      if (keys(%prevhosts) && keys(%currhosts)) {
         foreach my $key (keys(%prevhosts)) {          foreach my $key (keys(%prevhosts)) {
             unless ($currhosts{$key} eq $prevhosts{$key}) {              unless ($currhosts{$key} eq $prevhosts{$key}) {
                 $ipchange{$key} = $prevhosts{$key}.'|'.$currhosts{$key};                  $ipchange{$key} = $prevhosts{$key}.' | '.$currhosts{$key};
             }              }
         }          }
         foreach my $key (keys(%currhosts)) {          foreach my $key (keys(%currhosts)) {
Line 1081  sub write_hostips { Line 1146  sub write_hostips {
         if (keys(%ipchange)) {          if (keys(%ipchange)) {
             if (open(my $fh,'>>',$perlvar{'lonDaemons'}.'/logs/hostip.log')) {              if (open(my $fh,'>>',$perlvar{'lonDaemons'}.'/logs/hostip.log')) {
                print $fh "********************\n".localtime(time).' Changes --'."\n".                 print $fh "********************\n".localtime(time).' Changes --'."\n".
                          "Hostname | Previous IP | New IP\n".                           "| Hostname | Previous IP | New IP |\n".
                          "--------------------------------\n";                           " --------------------------------- \n";
                foreach my $hostname (sort(keys(%ipchange))) {                 foreach my $hostname (sort(keys(%ipchange))) {
                     print $fh "$hostname | $ipchange{$hostname}\n";                      print $fh "| $hostname | $ipchange{$hostname} |\n";
                 }                  }
                 print $fh "\n*******************\n\n";                  print $fh "\n*******************\n\n";
                 close($fh);                  close($fh);
Line 1099  sub write_hostips { Line 1164  sub write_hostips {
                               "MIME-Version: 1.0\n\n".                                "MIME-Version: 1.0\n\n".
                               "Host/IP changes\n".                                "Host/IP changes\n".
                               " \n".                                " \n".
                               "Hostname | Previous IP | New IP\n".                                "| Hostname | Previous IP | New IP |\n".
                               "--------------------------------\n";                                " --------------------------------- \n";
                 foreach my $hostname (sort(keys(%ipchange))) {                  foreach my $hostname (sort(keys(%ipchange))) {
                     $chgmail .= "$hostname | $ipchange{$hostname}\n";                      $chgmail .= "| $hostname | $ipchange{$hostname} |\n";
                 }                  }
                 $chgmail .= "\n\n";                  $chgmail .= "\n\n";
                 if (open(my $mailh, "|/usr/lib/sendmail -oi -t -odb")) {                  if (open(my $mailh, "|/usr/lib/sendmail -oi -t -odb")) {
Line 1118  sub write_hostips { Line 1183  sub write_hostips {
   
 sub clean_nosslverify {  sub clean_nosslverify {
     my ($fh) = @_;      my ($fh) = @_;
     my %unlinked;       my %unlinked;
     if (-d "$perlvar{'lonSockDir'}/nosslverify") {      if (-d "$perlvar{'lonSockDir'}/nosslverify") {
         if (opendir(my $dh,"$perlvar{'lonSockDir'}/nosslverify")) {          if (opendir(my $dh,"$perlvar{'lonSockDir'}/nosslverify")) {
             while (my $fname=readdir($dh)) {              while (my $fname=readdir($dh)) {
Line 1280  sub write_hosttypes { Line 1345  sub write_hosttypes {
                 foreach my $lonid (sort(keys(%hostdom))) {                  foreach my $lonid (sort(keys(%hostdom))) {
                     my $type = 'other';                      my $type = 'other';
                     if ($hostdom{$lonid} eq $dom) {                      if ($hostdom{$lonid} eq $dom) {
                         $type = 'dom';                           $type = 'dom';
                     } elsif ($intdom{$lonid} eq $internetdom) {                      } elsif ($intdom{$lonid} eq $internetdom) {
                         $type = 'intdom';                          $type = 'intdom';
                     }                      }
Line 1427  sub read_serverhomeIDs { Line 1492  sub read_serverhomeIDs {
     return %server;      return %server;
 }  }
   
   sub check_bash_settings {
       my $distro = &LONCAPA::distro();
       my ($check_bracketed_paste,$bracketed_warning);
       if ($distro  =~ /^debian(\d+)$/) {
           if ($1 >= 12) {
               $check_bracketed_paste = 1;
           }
       } elsif ($distro =~ /^ubuntu(\d+)$/) {
           if ($1 >= 22) {
               $check_bracketed_paste = 1;
           }
       } elsif ($distro =~ /^(?:redhat|oracle|alma|rocky|centos-stream)(\d+)$/) {
           if ($1 >= 9) {
               $check_bracketed_paste = 1;
           }
       } elsif ($distro =~ /^fedora(\d+)/) {
           if ($1 >= 34) {
               $check_bracketed_paste = 1;
           }
       }
       if ($check_bracketed_paste) {
           if (open(PIPE,"bind -V 2>&1 | grep enable-bracketed-paste |")) {
               my $info = <PIPE>;
               chomp($info);
               my ($bracketed) = ($info =~ /^\Qenable-bracketed-paste\E\s+is\s+set\s+to\s+\W(on|off)\W$/);
               close(PIPE);
               if ($bracketed eq 'on') {
                   $bracketed_warning = 1;
               }
           } else {
               print "Unable to check if bracketed paste is set to off for www user's shell\n"; 
           }
       }
       return ($bracketed_warning,$check_bracketed_paste);
   }
   
   sub set_bracketed_paste_off {
       my $bash_www_cnf = '/home/www/.inputrc';
       my $result;
       if (!-e $bash_www_cnf) {
           system("touch $bash_www_cnf");
           if (open(my $cfh,'>',$bash_www_cnf)) {
               print $cfh "set enable-bracketed-paste off\n";
               close($cfh);
               $result = "Updated $bash_www_cnf";
           } else {
               $result = "Could not open $bash_www_cnf to add 'set enable-bracketed-paste to off'";
           }
           my $wwwuid = getpwnam('www');
           my $wwwgid = getgrnam('www');
           if ($wwwuid!=$<) {
               chown($wwwuid,$wwwgid,$bash_www_cnf);
           }
       } else {
           my ($bracketed_paste_on,$bracketed_paste_off,@preserve);
           if (open(my $cfh,'<',$bash_www_cnf)) {
               while (my $line=<$cfh>) {
                   chomp($line);
                   if ($line =~ /^\s*set\s+enable\-bracketed\-paste\s+(off|on)\s*$/) {
                       if ($1 eq 'off') {
                           $bracketed_paste_off = 1;
                       } else {
                           $bracketed_paste_on = 1;
                       }
                   } else {
                       push(@preserve,$line);
                   }
               }
               close($cfh);
               if ($bracketed_paste_on || !$bracketed_paste_off) {
                   if (open(my $cfh,'>',$bash_www_cnf)) {
                       print $cfh "set enable-bracketed-paste off\n";
                       if (@preserve) {
                           foreach my $entry (@preserve) {
                               print $cfh "$entry\n";
                           }
                       }
                       close($cfh);
                       $result = "Updated $bash_www_cnf";
                   } else {
                       $result = "Could not open $bash_www_cnf to add 'set enable-bracketed-paste to off'";
                   }
               } else {
                   $result = "No action needed; $bash_www_cnf already includes 'set enable-bracketed-paste to off'";
               }
           } else {
               $result = "Could not open $bash_www_cnf to check if a value is included for 'enable-bracketed-paste'.";
           }
       }
       return $result;
   }
   
 sub send_mail {  sub send_mail {
     my ($sysmail,$reportstatus) = @_;      my ($sysmail,$reportstatus) = @_;
     my $defdom = $perlvar{'lonDefDomain'};      my $defdom = $perlvar{'lonDefDomain'};
Line 1517  sub main () { Line 1674  sub main () {
     if ('{[[[[lonHostID]]]]}' eq $perlvar{'lonHostID'}) {      if ('{[[[[lonHostID]]]]}' eq $perlvar{'lonHostID'}) {
  print("Unconfigured machine.\n");   print("Unconfigured machine.\n");
  my $emailto=$perlvar{'lonSysEMail'};   my $emailto=$perlvar{'lonSysEMail'};
  my $hostname=`/bin/hostname`;   my $hostname = Sys::Hostname::FQDN::fqdn();
  chop $hostname;   $hostname=~s/\.+/./g;
  $hostname=~s/[^\w\.]//g; # make sure is safe to pass through shell   $hostname=~s/\-+/-/g;
    $hostname=~s/[^\w\.-]//g; # make sure is safe to pass through shell
  my $subj="LON: Unconfigured machine $hostname";   my $subj="LON: Unconfigured machine $hostname";
  system("echo 'Unconfigured machine $hostname.' |".   system("echo 'Unconfigured machine $hostname.' |".
                " mail -s '$subj' $emailto > /dev/null");                 " mail -s '$subj' $emailto > /dev/null");
Line 1530  sub main () { Line 1688  sub main () {
     my $wwwid=getpwnam('www');      my $wwwid=getpwnam('www');
     if ($wwwid!=$<) {      if ($wwwid!=$<) {
  print("User ID mismatch. This program must be run as user 'www'.\n");   print("User ID mismatch. This program must be run as user 'www'.\n");
  my $emailto="$perlvar{'lonAdmEMail'},$perlvar{'lonSysEMail'}";   my $emailto="$perlvar{'lonAdmEMail'} $perlvar{'lonSysEMail'}";
  my $subj="LON: $perlvar{'lonHostID'} User ID mismatch";   my $subj="LON: $perlvar{'lonHostID'} User ID mismatch";
  system("echo 'User ID mismatch. loncron must be run as user www.' |".   system("echo 'User ID mismatch. loncron must be run as user www.' |".
                " mail -s '$subj' $emailto > /dev/null");                 " mail -s '$subj' $emailto > /dev/null");
Line 1558  sub main () { Line 1716  sub main () {
         &Apache::lonnet::get_iphost(1,$nomemcache);          &Apache::lonnet::get_iphost(1,$nomemcache);
     }      }
   
 # ----------------------------------------- Force firewall update for lond port    # ----------------------------------------- Force firewall update for lond port
   
     if ((!$justcheckdaemons) && (!$justreload)) {      if ((!$justcheckdaemons) && (!$justreload)) {
         my $now = time;          my $now = time;
Line 1573  sub main () { Line 1731  sub main () {
             if (&LONCAPA::try_to_lock('/tmp/lock_lciptables')) {              if (&LONCAPA::try_to_lock('/tmp/lock_lciptables')) {
                 my $execpath = $perlvar{'lonDaemons'}.'/lciptables';                  my $execpath = $perlvar{'lonDaemons'}.'/lciptables';
                 system("$execpath $tmpfile");                  system("$execpath $tmpfile");
                 unlink('/tmp/lock_lciptables');  # Remove the lock file.                   unlink('/tmp/lock_lciptables');  # Remove the lock file.
             }              }
             unlink($tmpfile);              unlink($tmpfile);
         }          }
Line 1585  sub main () { Line 1743  sub main () {
     $warnings=0;      $warnings=0;
     $notices=0;      $notices=0;
   
   
     my $fh;      my $fh;
     if (!$justcheckdaemons && !$justcheckconnections && !$justreload && !$justiptables) {      if (!$justcheckdaemons && !$justcheckconnections && !$justreload && !$justiptables) {
  $fh=&start_logging();   $fh=&start_logging();
Line 1595  sub main () { Line 1753  sub main () {
  &clean_lonIDs($fh);   &clean_lonIDs($fh);
         &clean_balanceIDs($fh);          &clean_balanceIDs($fh);
         &clean_webDAV_sessionIDs($fh);          &clean_webDAV_sessionIDs($fh);
           &clean_ltiIDs($fh);
  &check_httpd_logs($fh);   &check_httpd_logs($fh);
  &rotate_lonnet_logs($fh);   &rotate_lonnet_logs($fh);
  &rotate_other_logs($fh);   &rotate_other_logs($fh);
Line 1621  sub main () { Line 1780  sub main () {
  &test_connections($fh);   &test_connections($fh);
     }      }
     if (!$justcheckdaemons && !$justcheckconnections && !$justreload && !$justiptables) {      if (!$justcheckdaemons && !$justcheckconnections && !$justreload && !$justiptables) {
           my ($bracketed_warning,$check_bracketed_paste) = &check_bash_settings();
           if ($check_bracketed_paste) {
              &log($fh,'<hr /><a name="bashconf" /><h2>bash readline config</h2><h3>Brackedted Paste</h3>'.
                   '<p>Distros using bash readline library 8.1 or later need bracketed paste disabled for www, so R commands sent to lon daemon will be processed.</p>');
              if ($bracketed_warning) {
                  my $bash_update = &set_bracketed_paste_off();
                  if ($bash_update) {
                      &log($fh,'<p>'.$bash_update.'</p>'."\n");
                  }
              } else {
                  &log($fh,'<p>No action needed; /home/www/.inputrc already set.</p>'."\n");    
              }
           } else {
               &log($fh,'<hr /><a name="bashconf" /><h2>bash readline config</h2><h3>Bracketed Paste</h3>'.
                        '<p>No action needed for distros using pre-8.1 bash readline library</p>'."\n");
           }
         my $domconf = &get_domain_config();          my $domconf = &get_domain_config();
         my ($threshold,$sysmail,$reportstatus,$weightsref,$exclusionsref) =          my ($threshold,$sysmail,$reportstatus,$weightsref,$exclusionsref) =
             &get_permcount_settings($domconf);              &get_permcount_settings($domconf);

Removed from v.1.118  
changed lines
  Added in v.1.130


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