[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";
}