[LON-CAPA-cvs] cvs: loncom / lond

foxr lon-capa-cvs@mail.lon-capa.org
Mon, 08 Sep 2003 10:32:08 -0000


foxr		Mon Sep  8 06:32:08 2003 EDT

  Modified files:              
    /loncom	lond 
  Log:
  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)
  
  
Index: loncom/lond
diff -u loncom/lond:1.140 loncom/lond:1.141
--- loncom/lond:1.140	Tue Aug 26 07:15:57 2003
+++ loncom/lond	Mon Sep  8 06:32:07 2003
@@ -2,7 +2,7 @@
 # The LearningOnline Network
 # lond "LON Daemon" Server (port "LOND" 5663)
 #
-# $Id: lond,v 1.140 2003/08/26 11:15:57 foxr Exp $
+# $Id: lond,v 1.141 2003/09/08 10:32:07 foxr Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -57,7 +57,16 @@
 #      Management functions supported include:
 #       - pushing /home/httpd/lonTabs/hosts.tab
 #       - 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.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)
+#
+
 
 use strict;
 use lib '/home/httpd/lib/perl/';
@@ -81,7 +90,7 @@
 my $status='';
 my $lastlog='';
 
-my $VERSION='$Revision: 1.140 $'; #' stupid emacs
+my $VERSION='$Revision: 1.141 $'; #' stupid emacs
 my $remoteVERSION;
 my $currenthostid;
 my $currentdomainid;
@@ -95,6 +104,7 @@
 my %hostid;
 my %hostdom;
 my %hostip;
+my %perlvar;			# Will have the apache conf defined perl vars.
 
 #
 #  The array below are password error strings."
@@ -173,6 +183,63 @@
     }
 }
 #
+#   PushFile:  Called to do an administrative push of a file.
+#              - Ensure the file being pushed is one we support.
+#              - Backup the old file to <filename.saved>
+#              - Separate the contents of the new file out from the
+#                rest of the request.
+#              - Write the new file.
+#  Parameter:
+#     Request - The entire user request.  This consists of a : separated
+#               string pushfile:tablename:contents.
+#     NOTE:  The contents may have :'s in it as well making things a bit
+#            more interesting... but not much.
+#  Returns:
+#     String to send to client ("ok" or "refused" if bad file).
+#
+sub PushFile {
+    my $request = shift;    
+    my ($command, $filename, $contents) = split(":", $request, 3);
+    
+    #  At this point in time, pushes for only the following tables are
+    #  supported:
+    #   hosts.tab  ($filename eq host).
+    #   domain.tab ($filename eq domain).
+    # Construct the destination filename or reject the request.
+    #
+    # lonManage is supposed to ensure this, however this session could be
+    # part of some elaborate spoof that managed somehow to authenticate.
+    #
+
+    my $tablefile = $perlvar{'lonTabDir'}.'/'; # need to precede with dir.
+    if ($filename eq "host") {
+	$tablefile .= "hosts.tab";
+    } elsif ($filename eq "domain") {
+	$tablefile .= "domain.tab";
+    } else {
+	return "refused";
+    }
+    #
+    # >copy< the old table to the backup table
+    #        don't rename in case system crashes/reboots etc. in the time
+    #        window between a rename and write.
+    #
+    my $backupfile = $tablefile;
+    $backupfile    =~ s/\.tab$/.old/;
+    # CopyFile($tablefile, $backupfile);
+    &logthis('<font color="green"> Pushfile: backed up '
+	    .$tablefile." to $backupfile</font>");
+    
+    #  Install the new file:
+
+    # InstallFile($tablefile, $contents);
+
+    #  Indicate success:
+ 
+    return "ok";
+
+}
+#
 #  Convert an error return code from lcpasswd to a string value.
 #
 sub lcpasswdstrerror {
@@ -222,7 +289,7 @@
 # ---------------------------------- Read loncapa_apache.conf and loncapa.conf
 &status("Read loncapa.conf and loncapa_apache.conf");
 my $perlvarref=LONCAPA::Configuration::read_conf('loncapa.conf');
-my %perlvar=%{$perlvarref};
+%perlvar=%{$perlvarref};
 undef $perlvarref;
 
 # ----------------------------- Make sure this process is running from user=www
@@ -745,7 +812,8 @@
 		       if($wasenc == 1) {
 			   my $cert = GetCertificate($userinput);
 			   if(ValidManager($cert)) {
-			       print $client "ok\n";
+			       my $reply = PushFile($userinput);
+			       print $client "$reply\n";
 			   } else {
 			       print $client "refused\n";
 			   }