[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