--- loncom/Attic/lonManage 2003/08/12 11:02:59 1.6 +++ loncom/Attic/lonManage 2003/08/18 09:56:01 1.7 @@ -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 @@ sub Usage { 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 @@ USAGE sub ParseArgs { my $pushing = ''; - my $reiniting = ''; + my $reinitting = ''; if(!GetOptions('push=s' => \$pushing, 'reinit=s' => \$reinitting)) { @@ -171,45 +178,70 @@ sub ParseArgs { 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 @@ Usage: =head1 PREREQUISITES +=item strict =item Getopt::Long +=item English =head1 CATEGORIES Command line utility