--- loncom/lond 2003/09/29 10:09:18 1.148
+++ loncom/lond 2003/10/03 15:11:03 1.151
@@ -2,7 +2,7 @@
# The LearningOnline Network
# lond "LON Daemon" Server (port "LOND" 5663)
#
-# $Id: lond,v 1.148 2003/09/29 10:09:18 foxr Exp $
+# $Id: lond,v 1.151 2003/10/03 15:11:03 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -60,6 +60,20 @@
# 09/08/2003 Ron Fox: Told lond to take care of change logging so we
# don't have to remember it:
# $Log: lond,v $
+# Revision 1.151 2003/10/03 15:11:03 albertel
+# - if we fail to fetch an update to the file, don't blow away the old one
+# (this was the BUG that blew away that one default.sequence that Matthew
+# ended up restoring from data.)
+#
+# Revision 1.150 2003/09/30 10:16:06 foxr
+# Added invocation of apachereload in ReloadApache sub.
+# This completes the addtion of the reinit functionality.
+#
+# Revision 1.149 2003/09/30 09:44:13 foxr
+# Tested UpdateHosts ability to
+# - Remove live children for hosts that are no longer in the hosts.tab
+# - Remove live children for hosts whose IPs have changed in the hosts.tab
+#
# Revision 1.148 2003/09/29 10:09:18 foxr
# Put in logic to reinit lond itself (except for apache reload). I don't believe
# this logic works correctly yet, however lond still does everything it used to doso I'll do the commit anyway.
@@ -120,7 +134,7 @@ my $DEBUG = 0; # Non zero to ena
my $status='';
my $lastlog='';
-my $VERSION='$Revision: 1.148 $'; #' stupid emacs
+my $VERSION='$Revision: 1.151 $'; #' stupid emacs
my $remoteVERSION;
my $currenthostid;
my $currentdomainid;
@@ -583,8 +597,13 @@ sub ReadHostTable {
}
#
# Reload the Apache daemon's state.
+# This is done by invoking /home/httpd/perl/apachereload
+# a setuid perl script that can be root for us to do this job.
#
sub ReloadApache {
+ my $execdir = $perlvar{'lonDaemons'};
+ my $script = $execdir."/apachereload";
+ system($script);
}
#
@@ -613,7 +632,12 @@ sub UpdateHosts {
foreach my $child (keys %children) {
my $childip = $children{$child};
if(!$hostid{$childip}) {
+ logthis(' UpdateHosts killing child '
+ ." $child for ip $childip ");
kill('INT', $child);
+ } else {
+ logthis(' keeping child for ip '
+ ." $childip (pid=$child) ");
}
}
ReloadApache;
@@ -1391,33 +1415,39 @@ sub make_new_child {
}
# -------------------------------------- fetch a user file from a remote server
} elsif ($userinput =~ /^fetchuserfile/) {
- my ($cmd,$fname)=split(/:/,$userinput);
- my ($udom,$uname,$ufile)=split(/\//,$fname);
- my $udir=propath($udom,$uname).'/userfiles';
- unless (-e $udir) { mkdir($udir,0770); }
+ my ($cmd,$fname)=split(/:/,$userinput);
+ my ($udom,$uname,$ufile)=split(/\//,$fname);
+ my $udir=propath($udom,$uname).'/userfiles';
+ unless (-e $udir) { mkdir($udir,0770); }
if (-e $udir) {
- $ufile=~s/^[\.\~]+//;
- $ufile=~s/\///g;
- my $transname=$udir.'/'.$ufile;
- my $remoteurl='http://'.$clientip.'/userfiles/'.$fname;
- my $response;
- {
- my $ua=new LWP::UserAgent;
- my $request=new HTTP::Request('GET',"$remoteurl");
- $response=$ua->request($request,$transname);
- }
- if ($response->is_error()) {
- unlink($transname);
- my $message=$response->status_line;
- &logthis(
- "LWP GET: $message for $fname ($remoteurl)");
- print $client "failed\n";
- } else {
- print $client "ok\n";
- }
- } else {
- print $client "not_home\n";
- }
+ $ufile=~s/^[\.\~]+//;
+ $ufile=~s/\///g;
+ my $destname=$udir.'/'.$ufile;
+ my $transname=$udir.'/'.$ufile.'.in.transit';
+ my $remoteurl='http://'.$clientip.'/userfiles/'.$fname;
+ my $response;
+ {
+ my $ua=new LWP::UserAgent;
+ my $request=new HTTP::Request('GET',"$remoteurl");
+ $response=$ua->request($request,$transname);
+ }
+ if ($response->is_error()) {
+ unlink($transname);
+ my $message=$response->status_line;
+ &logthis("LWP GET: $message for $fname ($remoteurl)");
+ print $client "failed\n";
+ } else {
+ if (!rename($transname,$destname)) {
+ &logthis("Unable to move $transname to $destname");
+ unlink($transname);
+ print $client "failed\n";
+ } else {
+ print $client "ok\n";
+ }
+ }
+ } else {
+ print $client "not_home\n";
+ }
# ------------------------------------------ authenticate access to a user file
} elsif ($userinput =~ /^tokenauthuserfile/) {
my ($cmd,$fname,$session)=split(/:/,$userinput);