--- loncom/lond	2003/09/30 10:16:06	1.150
+++ loncom/lond	2003/10/08 20:37:48	1.155
@@ -2,7 +2,7 @@
 # The LearningOnline Network
 # lond "LON Daemon" Server (port "LOND" 5663)
 #
-# $Id: lond,v 1.150 2003/09/30 10:16:06 foxr Exp $
+# $Id: lond,v 1.155 2003/10/08 20:37:48 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -59,50 +59,6 @@
 #       - pushing /home/httpd/lonTabs/domain.tab
 # 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.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.
-#
-# Revision 1.147  2003/09/23 11:23:31  foxr
-# Comlplete implementation of reinit functionality.  Must still implement
-# the actual initialization functionality, but the process can now
-# receive the request and either invoke the appropriate internal function or
-# signal the correct lonc.
-#
-# Revision 1.146  2003/09/16 10:28:14  foxr
-# ReinitProcess - decode the process selector and produce the associated pid
-# filename.  Note: While it is possible to test that valid process selectors are
-# handled properly I am not able to test that invalid process selectors produce
-# the appropriate error as lonManage also blocks the use of invalid process selectors.
-#
-# Revision 1.145  2003/09/16 10:13:20  foxr
-# Added ReinitProcess function to oversee the parsing and processing of the
-# reinit:<process> client request.
-#
-# Revision 1.144  2003/09/16 09:47:01  foxr
-# Added skeletal support for SIGUSR2 (update hosts.tab)
-#
-# Revision 1.143  2003/09/15 10:03:52  foxr
-# Completed and tested code for pushfile.
-#
-# Revision 1.142  2003/09/09 20:47:46  www
-# Permanently store chatroom entries in chatroom.log
-#
-# Revision 1.141  2003/09/08 10:32:07  foxr
-# Added PushFile sub This sub oversees the push of a new configuration table file
-# Currently supported files are:
-# - hosts.tab   (transaction pushfile:hosts:contents)
-# - domain.tab  (transaction pushfile:domain:contents)
 #
 
 
@@ -129,7 +85,7 @@ my $DEBUG = 0;		       # Non zero to ena
 my $status='';
 my $lastlog='';
 
-my $VERSION='$Revision: 1.150 $'; #' stupid emacs
+my $VERSION='$Revision: 1.155 $'; #' stupid emacs
 my $remoteVERSION;
 my $currenthostid;
 my $currentdomainid;
@@ -173,10 +129,10 @@ my @adderrors    = ("ok",
 		    "lcuseradd Incorrect number of stdinput lines, must be 3",
 		    "lcuseradd Too many other simultaneous pwd changes in progress",
 		    "lcuseradd User does not exist",
-		    "lcuseradd Unabel to mak ewww member of users's group",
+		    "lcuseradd Unable to make www member of users's group",
 		    "lcuseradd Unable to su to root",
 		    "lcuseradd Unable to set password",
-		    "lcuseradd Usrname has invbalid charcters",
+		    "lcuseradd Usrname has invalid characters",
 		    "lcuseradd Password has an invalid character",
 		    "lcuseradd User already exists",
 		    "lcuseradd Could not add user.",
@@ -670,7 +626,7 @@ sub checkchildren {
         }
     }
     $SIG{ALRM} = 'DEFAULT';
-    $SIG{__DIE__} = \&cathcexception;
+    $SIG{__DIE__} = \&catchexception;
 }
 
 # --------------------------------------------------------------------- Logging
@@ -1410,33 +1366,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);