version 1.11, 2003/08/18 10:45:32
|
version 1.14, 2003/09/08 09:45:20
|
Line 50
|
Line 50
|
# not the IP address of the host. |
# not the IP address of the host. |
# |
# |
# $Log$ |
# $Log$ |
|
# 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 |
# Revision 1.11 2003/08/18 10:45:32 foxr |
# Felt strongly enough about hoisting ReadConfiguration into a separate sub |
# Felt strongly enough about hoisting ReadConfiguration into a separate sub |
# that I did it now before I forgot. |
# that I did it now before I forgot. |
Line 90
|
Line 102
|
# |
# |
# |
# |
|
|
|
|
|
|
# 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; |
Line 124 USAGE
|
Line 142 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 235 sub ValidHost {
|
Line 276 sub ValidHost {
|
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 254 sub Transact {
|
Line 342 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 277 sub PushFile {
|
Line 367 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 295 sub PushFile {
|
Line 385 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 384 Usage:
|
Line 476 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 |