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

foxr lon-capa-cvs@mail.lon-capa.org
Mon, 18 Aug 2003 09:56:01 -0000


foxr		Mon Aug 18 05:56:01 2003 EDT

  Modified files:              
    /loncom	lonManage 
  Log:
  1. Require to be run as root.
  2. Catch case where no operation switch is supplied and put out usage.
  3. skeleton/comments for PushFile function.
  
  
Index: loncom/lonManage
diff -u loncom/lonManage:1.6 loncom/lonManage:1.7
--- loncom/lonManage:1.6	Tue Aug 12 07:02:59 2003
+++ loncom/lonManage	Mon Aug 18 05:56:01 2003
@@ -3,9 +3,9 @@
 #
 #  lonManage supports remote management of nodes in a LonCAPA cluster.
 #
-#  $Id: lonManage,v 1.6 2003/08/12 11:02:59 foxr Exp $
+#  $Id: lonManage,v 1.7 2003/08/18 09:56:01 foxr Exp $
 #
-# $Id: lonManage,v 1.6 2003/08/12 11:02:59 foxr Exp $
+# $Id: lonManage,v 1.7 2003/08/18 09:56:01 foxr Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -50,6 +50,11 @@
 #    not the IP address of the host.
 #
 #  $Log: lonManage,v $
+#  Revision 1.7  2003/08/18 09:56:01  foxr
+#  1. Require to be run as root.
+#  2. Catch case where no operation switch is supplied and put out usage.
+#  3. skeleton/comments for PushFile function.
+#
 #  Revision 1.6  2003/08/12 11:02:59  foxr
 #  Implement command switch dispatching.
 #
@@ -66,6 +71,8 @@
 #  Add usage and skeleton documentation.
 #
 #
+use strict;			# Because it's good practice.
+use English;			# Cause I like meaningful names.
 use Getopt::Long;
 
 sub Usage  {
@@ -80,7 +87,7 @@
     lonManage  --reinit=lonc host
            Sends a HUP signal to the remote systems's lond.
 
-    lonmanage  --reinit=lond host
+    lonManage  --reinit=lond host
           Requests the remote system's lond perform the same action as if
           it had received a HUP signal.
 
@@ -116,7 +123,7 @@
 
 sub ParseArgs {
     my $pushing   = '';
-    my $reiniting = '';
+    my $reinitting = '';
 
     if(!GetOptions('push=s'    => \$pushing,
 	           'reinit=s'  => \$reinitting)) {
@@ -171,45 +178,70 @@
     
     return @result;
 }
+#
+#   Called to push a file to the remote system.
+#   The only legal files to push are hosts.tab and domain.tab.
+#   Security is somewhat improved by
+#   
+#   - Requiring the user run as root.
+#   - Connecting with lonc rather than lond directly ensuring this is a loncapa
+#     host
+#   - We must appear in the remote host's hosts.tab file.
+#   - The host must appear in our hosts.tab file.
+#
+#  Parameters:
+#     tablename - must be one of hosts or domain.
+#     tablefile - name of the file containing the table to push.
+#     host      - name of the host to push this file to.     
+#
+sub PushFile {
+    my $tablename = shift;
+    my $tablefile = shift;
+    my $host      = shift;
+    
+}
 
+sub ReinitProcess {
+    print "Reinitializing a process\n";
+}
 #--------------------------- Entry point: --------------------------
 
 #  Parse the parameters
 #  If command parsing failed, then print usage:
 
-@params = ParseArgs;
-$nparam   = @params;
+my @params   = ParseArgs;
+my $nparam   = @params;
 
 if($nparam == 0) {
     Usage;
     exit -1;
 }
-
-
-sub PushFile {
-    print "Pushing a file\n";
+#
+#   Next, ensure we are running as EID root.
+#
+if ($EUID != 0) {
+    die "ENOPRIV - No privilege for requested operation"
 }
 
-sub ReinitProcess {
-    print "Reinitializing a process\n";
-}
 
 #   Based on the operation requested invoke the appropriate function:
 
-$operation = shift @params;
+my $operation = shift @params;
 
 if($operation eq "push") {  # push tablename filename host
-    $tablename = shift @params;
-    $tablefile = shift @params;
-    $host      = shift @params;
+    my $tablename = shift @params;
+    my $tablefile = shift @params;
+    my $host      = shift @params;
     PushFile($tablename, $tablefile, $host);
 
-}
-if($operation eq "reinit") {	# reinit processname host.
-    $process   = shift @params;
-    $host      = shift @params;
+} elsif($operation eq "reinit") {	# reinit processname host.
+    my $process   = shift @params;
+    my $host      = shift @params;
     ReinitProcess($process, $host);
 }
+else {
+    Usage;
+}
 exit 0;
 
 =head1 NAME
@@ -240,7 +272,9 @@
 
 =head1 PREREQUISITES
 
+=item strict
 =item Getopt::Long
+=item English
 
 =head1  CATEGORIES
     Command line utility