Diff for /loncom/lond between versions 1.66 and 1.73

version 1.66, 2002/02/05 18:05:47 version 1.73, 2002/02/25 20:43:15
Line 48 Line 48
 # 12/22 Gerd Kortemeyer  # 12/22 Gerd Kortemeyer
 # YEAR=2002  # YEAR=2002
 # 01/20/02,02/05 Gerd Kortemeyer  # 01/20/02,02/05 Gerd Kortemeyer
   # 02/05 Guy Albertelli
   # 02/07 Scott Harrison
   # 02/12 Gerd Kortemeyer
   # 02/19 Matthew Hall
   # 02/25 Gerd Kortemeyer
 ###  ###
   
 # based on "Perl Cookbook" ISBN 1-56592-243-3  # based on "Perl Cookbook" ISBN 1-56592-243-3
Line 136  open (CONFIG,"$perlvar{'lonTabDir'}/host Line 141  open (CONFIG,"$perlvar{'lonTabDir'}/host
   
 while ($configline=<CONFIG>) {  while ($configline=<CONFIG>) {
     my ($id,$domain,$role,$name,$ip)=split(/:/,$configline);      my ($id,$domain,$role,$name,$ip)=split(/:/,$configline);
     chomp($ip);      chomp($ip); $ip=~s/\D+$//;
     $hostid{$ip}=$id;      $hostid{$ip}=$id;
     if ($id eq $perlvar{'lonHostID'}) { $thisserver=$name; }      if ($id eq $perlvar{'lonHostID'}) { $thisserver=$name; }
     $PREFORK++;      $PREFORK++;
Line 163  $children               = 0;        # cu Line 168  $children               = 0;        # cu
 sub REAPER {                        # takes care of dead children  sub REAPER {                        # takes care of dead children
     $SIG{CHLD} = \&REAPER;      $SIG{CHLD} = \&REAPER;
     my $pid = wait;      my $pid = wait;
     $children --;      if (defined($children{$pid})) {
     &logthis("Child $pid died");   &logthis("Child $pid died");
     delete $children{$pid};   $children --;
    delete $children{$pid};
       } else {
    &logthis("Unknown Child $pid died");
       }
 }  }
   
 sub HUNTSMAN {                      # signal handler for SIGINT  sub HUNTSMAN {                      # signal handler for SIGINT
Line 204  sub checkchildren { Line 213  sub checkchildren {
     foreach (sort keys %children) {      foreach (sort keys %children) {
         unless (-e "$docdir/lon-status/londchld/$_.txt") {          unless (-e "$docdir/lon-status/londchld/$_.txt") {
     &logthis('Child '.$_.' did not respond');      &logthis('Child '.$_.' did not respond');
             kill 9 => $_;      kill 9 => $_;
    $emailto="$perlvar{'lonAdmEMail'},$perlvar{'lonSysEMail'}";      $emailto="$perlvar{'lonAdmEMail'},$perlvar{'lonSysEMail'}";
    $subj="LON: $perlvar{'lonHostID'} killed lond process $_";      $subj="LON: $perlvar{'lonHostID'} killed lond process $_";
    system("echo 'Killed lond process $_.' |\      my $result=`echo 'Killed lond process $_.' | mailto $emailto -s '$subj' > /dev/null`;
  mailto $emailto -s '$subj' > /dev/null");  
     $execdir=$perlvar{'lonDaemons'};      $execdir=$perlvar{'lonDaemons'};
             system("cp $execdir/logs/lond.log $execdir/logs/lond.log.".$_);      $result=`/bin/cp $execdir/logs/lond.log $execdir/logs/lond.log.$_`
         }          }
     }      }
 }  }
Line 634  sub make_new_child { Line 642  sub make_new_child {
   $pwdcorrect=!$?;    $pwdcorrect=!$?;
       }        }
                           } elsif ($howpwd eq 'krb4') {                            } elsif ($howpwd eq 'krb4') {
                                $null=pack("C",0);
        unless ($upass=~/$null/) {
                               $pwdcorrect=(                                $pwdcorrect=(
                                  Authen::Krb4::get_pw_in_tkt($uname,"",                                   Authen::Krb4::get_pw_in_tkt($uname,"",
                                         $contentpwd,'krbtgt',$contentpwd,1,                                          $contentpwd,'krbtgt',$contentpwd,1,
      $upass) == 0);       $upass) == 0);
        } else { $pwdcorrect=0; }
                           } elsif ($howpwd eq 'localauth') {                            } elsif ($howpwd eq 'localauth') {
     $pwdcorrect=&localauth::localauth($uname,$upass,      $pwdcorrect=&localauth::localauth($uname,$upass,
       $contentpwd);        $contentpwd);
Line 661  sub make_new_child { Line 672  sub make_new_child {
                        chomp($npass);                         chomp($npass);
                        $upass=&unescape($upass);                         $upass=&unescape($upass);
                        $npass=&unescape($npass);                         $npass=&unescape($npass);
                        my $proname=propath($udom,$uname);         &logthis("Trying to change password for $uname");
          my $proname=propath($udom,$uname);
                        my $passfilename="$proname/passwd";                         my $passfilename="$proname/passwd";
                        if (-e $passfilename) {                         if (-e $passfilename) {
    my $realpasswd;     my $realpasswd;
Line 676  sub make_new_child { Line 688  sub make_new_child {
      my $ncpass=crypt($npass,$salt);       my $ncpass=crypt($npass,$salt);
                              { my $pf = IO::File->new(">$passfilename");                               { my $pf = IO::File->new(">$passfilename");
           print $pf "internal:$ncpass\n"; }                         print $pf "internal:$ncpass\n"; }             
        &logthis("Result of password change for $uname: pwchange_success");
                              print $client "ok\n";                               print $client "ok\n";
                            } else {                             } else {
                              print $client "non_authorized\n";                               print $client "non_authorized\n";
                            }                             }
                           } else {                            } elsif ($howpwd eq 'unix') {
         # Unix means we have to access /etc/password
         # one way or another.
         # First: Make sure the current password is
         #        correct
         $contentpwd=(getpwnam($uname))[1];
         my $pwdcorrect = "0";
         my $pwauth_path="/usr/local/sbin/pwauth";
         unless ($contentpwd eq 'x') {
     $pwdcorrect=
                                       (crypt($upass,$contentpwd) eq $contentpwd);
         } elsif (-e $pwauth_path) {
     open PWAUTH, "|$pwauth_path" or
         die "Cannot invoke authentication";
     print PWAUTH "$uname\n$upass\n";
     close PWAUTH;
     $pwdcorrect=!$?;
         }
        if ($pwdcorrect) {
    my $execdir=$perlvar{'lonDaemons'};
    my $pf = IO::File->new("|$execdir/lcpasswd");
    print $pf "$uname\n$npass\n$npass\n";
    close $pf;
    my $result = ($?>0 ? 'pwchange_failure' 
          : 'ok');
    &logthis("Result of password change for $uname: $result");
    print $client "$result\n";
        } else {
    print $client "non_authorized\n";
        }
     } else {
                             print $client "auth_mode_error\n";                              print $client "auth_mode_error\n";
                           }                              }  
        } else {         } else {
Line 1386  sub make_new_child { Line 1429  sub make_new_child {
           
         # tidy up gracefully and finish          # tidy up gracefully and finish
           
         $client->close();  
         $server->close();          $server->close();
   
         # this exit is VERY important, otherwise the child will become          # this exit is VERY important, otherwise the child will become
Line 1441  Server/Process Line 1483  Server/Process
   
   
   
   
   
   
   
   

Removed from v.1.66  
changed lines
  Added in v.1.73


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