version 1.10, 2003/08/18 10:43:31
|
version 1.15, 2003/09/16 09:49:54
|
Line 36
|
Line 36
|
# lonManage -push <tablename> newfile host |
# lonManage -push <tablename> newfile host |
# Push <tablename> to the lonTabs directory. Note that |
# Push <tablename> to the lonTabs directory. Note that |
# <tablename> must be one of: |
# <tablename> must be one of: |
# hosts (hosts.tab) |
# host (hosts.tab) |
# domain (domain.tab) |
# domain (domain.tab) |
# |
# |
# lonManage -reinit lonc host |
# lonManage -reinit lonc host |
Line 50
|
Line 50
|
# not the IP address of the host. |
# not the IP address of the host. |
# |
# |
# $Log$ |
# $Log$ |
|
# Revision 1.15 2003/09/16 09:49:54 foxr |
|
# Adjust the usage message to reflect what actually will happen on |
|
# --reinit={lond|lonc} |
|
# |
|
# Revision 1.14 2003/09/08 09:45:20 foxr |
|
# Remove BUGBUG about comment about authentication as we'll be doing |
|
# host based authentication initially (no need for lonManage to do anything), |
|
# and certificate based later (need at that time). |
|
# |
|
# Revision 1.13 2003/08/19 10:26:24 foxr |
|
# Initial working version... tested against an unmodified lond this |
|
# produces an unknown_cmd response which is about what I'd expect. |
|
# |
|
# Revision 1.12 2003/08/18 11:08:07 foxr |
|
# Debug request building in Transact. |
|
# |
|
# Revision 1.11 2003/08/18 10:45:32 foxr |
|
# Felt strongly enough about hoisting ReadConfiguration into a separate sub |
|
# that I did it now before I forgot. |
|
# |
# Revision 1.10 2003/08/18 10:43:31 foxr |
# Revision 1.10 2003/08/18 10:43:31 foxr |
# Code/test ValidHost. The hosts.tab and the perl variables are read in as |
# Code/test ValidHost. The hosts.tab and the perl variables are read in as |
# global hashes as a side effect. May later want to clean this up by making |
# global hashes as a side effect. May later want to clean this up by making |
Line 86
|
Line 106
|
# |
# |
# |
# |
|
|
|
|
|
|
# Modules required: |
# Modules required: |
|
|
use strict; # Because it's good practice. |
use strict; # Because it's good practice. |
use English; # Cause I like meaningful names. |
use English; # Cause I like meaningful names. |
use Getopt::Long; |
use Getopt::Long; |
use LONCAPA::Configuration; # To handle configuration I/O. |
use LONCAPA::Configuration; # To handle configuration I/O. |
|
use IO::Socket::UNIX; # To communicate with lonc. |
|
|
# File scoped variables: |
# File scoped variables: |
|
|
my %perlvar; # Perl variable defs from apache config. |
my %perlvar; # Perl variable defs from apache config. |
my %hostshash; # Host table as a host indexed hash. |
my %hostshash; # Host table as a host indexed hash. |
|
|
|
# |
|
# prints out utility's command usage info. |
|
# |
sub Usage { |
sub Usage { |
print "Usage:"; |
print "Usage:"; |
print <<USAGE; |
print <<USAGE; |
lonManage --push=<tablename> newfile host |
lonManage --push=<tablename> newfile host |
Push <tablename> to the lonTabs directory. Note that |
Push <tablename> to the lonTabs directory. Note that |
<tablename> must be one of: |
<tablename> must be one of: |
hosts (hosts.tab) |
host (hosts.tab) |
domain (domain.tab) |
domain (domain.tab) |
|
|
lonManage --reinit=lonc host |
lonManage --reinit=lonc host |
Sends a HUP signal to the remote systems's lond. |
Causes lonc in the remote system to reread hosts.tab and |
|
adjust the set of clients that are being maintained to match |
|
the new file. |
|
|
|
|
lonManage --reinit=lond host |
lonManage --reinit=lond host |
Requests the remote system's lond perform the same action as if |
Causes lond in the remote system to reread the hosts.tab file |
it had received a HUP signal. |
and adjust the set of servers to match changes in that file. |
|
|
In the above syntax, the host above is the hosts.tab name of a host, |
In the above syntax, the host above is the hosts.tab name of a host, |
not the IP address of the host. |
not the IP address of the host. |
Line 120 USAGE
|
Line 149 USAGE
|
|
|
|
|
} |
} |
|
# |
|
# Lifted from lonnet.pm - and we need to figure out a way to get it back in. |
|
# Performas a transaction with lond via the lonc proxy server. |
|
# Parameter: |
|
# cmd - The text of the request. |
|
# host - The host to which the request ultimately goes. |
|
# Returns: |
|
# The text of the reply from the lond or con_lost if not able to contact |
|
# lond/lonc etc. |
|
# |
|
sub subreply { |
|
my ($cmd,$server)=@_; |
|
my $peerfile="$perlvar{'lonSockDir'}/$server"; |
|
my $client=IO::Socket::UNIX->new(Peer =>"$peerfile", |
|
Type => SOCK_STREAM, |
|
Timeout => 10) |
|
or return "con_lost"; |
|
print $client "$cmd\n"; |
|
my $answer=<$client>; |
|
if (!$answer) { $answer="con_lost"; } |
|
chomp($answer); |
|
return $answer; |
|
} |
|
# >>> BUGBUG <<< |
# |
# |
# Use Getopt::Long to parse the parameters of the program. |
# Use Getopt::Long to parse the parameters of the program. |
# |
# |
Line 202 sub ParseArgs {
|
Line 254 sub ParseArgs {
|
return @result; |
return @result; |
} |
} |
# |
# |
|
# Read the loncapa configuration stuff. |
|
# |
|
sub ReadConfig { |
|
my $perlvarref = LONCAPA::Configuration::read_conf('loncapa.conf'); |
|
%perlvar = %{$perlvarref}; |
|
my $hoststab = LONCAPA::Configuration::read_hosts( |
|
"$perlvar{'lonTabDir'}/hosts.tab"); |
|
%hostshash = %{$hoststab}; |
|
|
|
} |
|
# |
# Determine if the target host is valid. |
# Determine if the target host is valid. |
# This is done by reading the current hosts.tab file. |
# This is done by reading the current hosts.tab file. |
# For the host to be valid, it must be inthe file. |
# For the host to be valid, it must be inthe file. |
Line 214 sub ParseArgs {
|
Line 277 sub ParseArgs {
|
# |
# |
sub ValidHost { |
sub ValidHost { |
my $host = shift; |
my $host = shift; |
|
|
my $perlvarref = LONCAPA::Configuration::read_conf('loncapa.conf'); |
ReadConfig; |
%perlvar = %{$perlvarref}; |
|
my $hoststab = LONCAPA::Configuration::read_hosts( |
|
"$perlvar{'lonTabDir'}/hosts.tab"); |
|
%hostshash = %{$hoststab}; |
|
|
|
return defined $hostshash{$host}; |
return defined $hostshash{$host}; |
|
|
} |
} |
|
|
|
|
|
|
|
# |
|
# Performs a transaction with lonc. |
|
# By the time this is called, the transaction has already been |
|
# validated by the caller. |
|
# |
|
# Parameters: |
|
# |
|
# host - hosts.tab name of the host whose lonc we'll be talking to. |
|
# command - The base command we'll be asking lond to execute. |
|
# body - [optional] If supplied, this is a command body that is a ref. |
|
# to an array of lines that will be appended to the |
|
# command. |
|
# |
|
# NOTE: |
|
# The command will be done as an encrypted operation. |
|
# |
sub Transact { |
sub Transact { |
|
my $host = shift; |
|
my $command = shift; |
|
my $haveBody= 0; |
|
my $body; |
|
my $i; |
|
|
|
if(scalar @ARG) { |
|
$body = shift; |
|
$haveBody = 1; |
|
} |
|
# Construct the command to send to the server: |
|
|
|
my $request = "encrypt\:"; # All requests are encrypted. |
|
$request .= $command; |
|
if($haveBody) { |
|
$request .= "\:"; |
|
my $bodylines = scalar @$body; |
|
for($i = 0; $i < $bodylines; $i++) { |
|
$request .= $$body[$i]; |
|
} |
|
} else { |
|
$request .= "\n"; |
|
} |
|
# Body is now built... transact with lond.. |
|
|
|
my $answer = subreply($request, $host); |
|
|
|
print "$answer\n"; |
|
|
} |
} |
# |
# |
Line 243 sub Transact {
|
Line 349 sub Transact {
|
# tablefile - name of the file containing the table to push. |
# tablefile - name of the file containing the table to push. |
# host - name of the host to push this file to. |
# host - name of the host to push this file to. |
# |
# |
|
# >>>BUGBUG<<< This belongs in lonnet.pm. |
|
# |
sub PushFile { |
sub PushFile { |
my $tablename = shift; |
my $tablename = shift; |
my $tablefile = shift; |
my $tablefile = shift; |
Line 266 sub PushFile {
|
Line 374 sub PushFile {
|
|
|
if( ($tablename eq "host") || |
if( ($tablename eq "host") || |
($tablename eq "domain")) { |
($tablename eq "domain")) { |
Transact($host, "pushfile:$tablename:",\@table); |
Transact($host, "pushfile:$tablename",\@table); |
} else { |
} else { |
die "EINVAL - Invalid parameter. tablename: $tablename must be host or domain"; |
die "EINVAL - Invalid parameter. tablename: $tablename must be host or domain"; |
} |
} |
Line 284 sub PushFile {
|
Line 392 sub PushFile {
|
# process - The name of the process to reinit (lonc or lond). |
# process - The name of the process to reinit (lonc or lond). |
# host - The host in which this reinit will happen. |
# host - The host in which this reinit will happen. |
# |
# |
|
# >>>BUGBUG<<<< This belongs in lonnet.pm |
|
# |
sub ReinitProcess { |
sub ReinitProcess { |
my $process = shift; |
my $process = shift; |
my $host = shift; |
my $host = shift; |
Line 373 Usage:
|
Line 483 Usage:
|
=item strict |
=item strict |
=item Getopt::Long |
=item Getopt::Long |
=item English |
=item English |
|
=item IO::Socket::UNIX |
|
|
|
=head1 KEY Subroutines. |
|
|
=head1 CATEGORIES |
=head1 CATEGORIES |
Command line utility |
Command line utility |