Diff for /loncom/Attic/lonManage between versions 1.10 and 1.15

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

Removed from v.1.10  
changed lines
  Added in v.1.15


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>