--- loncom/Attic/lonManage 2003/08/18 10:43:31 1.10 +++ loncom/Attic/lonManage 2003/08/18 11:08:07 1.12 @@ -3,9 +3,9 @@ # # lonManage supports remote management of nodes in a LonCAPA cluster. # -# $Id: lonManage,v 1.10 2003/08/18 10:43:31 foxr Exp $ +# $Id: lonManage,v 1.12 2003/08/18 11:08:07 foxr Exp $ # -# $Id: lonManage,v 1.10 2003/08/18 10:43:31 foxr Exp $ +# $Id: lonManage,v 1.12 2003/08/18 11:08:07 foxr Exp $ # # Copyright Michigan State University Board of Trustees # @@ -50,6 +50,13 @@ # not the IP address of the host. # # $Log: lonManage,v $ +# 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 # 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 @@ -202,6 +209,17 @@ sub ParseArgs { 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. # This is done by reading the current hosts.tab file. # For the host to be valid, it must be inthe file. @@ -214,18 +232,55 @@ sub ParseArgs { # sub ValidHost { my $host = shift; - - my $perlvarref = LONCAPA::Configuration::read_conf('loncapa.conf'); - %perlvar = %{$perlvarref}; - my $hoststab = LONCAPA::Configuration::read_hosts( - "$perlvar{'lonTabDir'}/hosts.tab"); - %hostshash = %{$hoststab}; + + ReadConfig; 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 { + 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.. + print "$request"; } # # Called to push a file to the remote system. @@ -266,7 +321,7 @@ sub PushFile { if( ($tablename eq "host") || ($tablename eq "domain")) { - Transact($host, "pushfile:$tablename:",\@table); + Transact($host, "pushfile:$tablename",\@table); } else { die "EINVAL - Invalid parameter. tablename: $tablename must be host or domain"; }