version 1.165.2.1, 2004/01/14 01:20:40
|
version 1.168, 2003/12/22 12:01:54
|
Line 10
|
Line 10
|
# |
# |
# LON-CAPA is free software; you can redistribute it and/or modify |
# LON-CAPA is free software; you can redistribute it and/or modify |
# it under the terms of the GNU General Public License as published by |
# it under the terms of the GNU General Public License as published by |
# the Free Software Foundation; either version 2 of the License, or |
# the Free Software Foundation; either version 2 of the License, or |
# (at your option) any later version. |
# (at your option) any later version. |
# |
# |
# LON-CAPA is distributed in the hope that it will be useful, |
# LON-CAPA is distributed in the hope that it will be useful, |
Line 162 sub ReadManagerTable {
|
Line 162 sub ReadManagerTable {
|
|
|
# Clean out the old table first.. |
# Clean out the old table first.. |
|
|
foreach my $key (keys %managers) { |
foreach my $key (keys %managers) { |
delete $managers{$key}; |
delete $managers{$key}; |
} |
} |
|
|
my $tablename = $perlvar{'lonTabDir'}."/managers.tab"; |
my $tablename = $perlvar{'lonTabDir'}."/managers.tab"; |
if (!open (MANAGERS, $tablename)) { |
if (!open (MANAGERS, $tablename)) { |
logthis('<font color="red">No manager table. Nobody can manage!!</font>'); |
logthis('<font color="red">No manager table. Nobody can manage!!</font>'); |
return; |
return; |
} |
} |
while(my $host = <MANAGERS>) { |
while(my $host = <MANAGERS>) { |
chomp($host); |
chomp($host); |
if (!defined $hostip{$host}) { # This is a non cluster member |
if ($host =~ "^#") { # Comment line. |
|
logthis('<font color="green"> Skipping line: '. "$host</font>\n"); |
|
next; |
|
} |
|
if (!defined $hostip{$host}) { # This is a non cluster member |
# The entry is of the form: |
# The entry is of the form: |
# cluname:hostname |
# cluname:hostname |
# cluname - A 'cluster hostname' is needed in order to negotiate |
# cluname - A 'cluster hostname' is needed in order to negotiate |
# the host key. |
# the host key. |
# hostname- The dns name of the host. |
# hostname- The dns name of the host. |
# |
# |
|
my($cluname, $dnsname) = split(/:/, $host); |
my($cluname, $dnsname) = split(/:/, $host); |
|
open(MGRPIPE, "/usr/bin/host $dnsname |") || die "Can't make host pipeline"; |
my $ip = gethostbyname($dnsname); |
my $dnsinfo = <MGRPIPE>; |
if(defined($ip)) { # bad names don't deserve entry. |
chomp $dnsinfo; |
my $hostip = inet_ntoa($ip); |
close MGRPIPE; |
$managers{$hostip} = $cluname; |
my($jname, $jhas, $jaddress, $hostip) = split(/ /, $dnsinfo); |
logthis('<font color="green"> registering manager '. |
$managers{$hostip} = $cluname; |
"$dnsname as $cluname with $hostip </font>\n"); |
} else { |
} |
$managers{$hostip{$host}} = $host; # Use info from cluster tab if clumemeber |
} else { |
} |
logthis('<font color="green"> existing host'." $host</font>\n"); |
} |
$managers{$hostip{$host}} = $host; # Use info from cluster tab if clumemeber |
|
} |
|
} |
} |
} |
|
|
# |
# |
Line 279 sub AdjustHostContents {
|
Line 284 sub AdjustHostContents {
|
my $adjusted; |
my $adjusted; |
my $me = $perlvar{'lonHostID'}; |
my $me = $perlvar{'lonHostID'}; |
|
|
foreach my $line (split(/\n/,$contents)) { |
foreach my $line (split(/\n/,$contents)) { |
if(!(($line eq "") || ($line =~ /^ *\#/) || ($line =~ /^ *$/))) { |
if(!(($line eq "") || ($line =~ /^ *\#/) || ($line =~ /^ *$/))) { |
chomp($line); |
chomp($line); |
my ($id,$domain,$role,$name,$ip,$maxcon,$idleto,$mincon)=split(/:/,$line); |
my ($id,$domain,$role,$name,$ip,$maxcon,$idleto,$mincon)=split(/:/,$line); |
if ($id eq $me) { |
if ($id eq $me) { |
open(PIPE, " /usr/bin/host $name |") || die "Cant' make host pipeline"; |
my $ip = gethostbyname($name); |
my $hostinfo = <PIPE>; |
my $ipnew = inet_ntoa($ip); |
close PIPE; |
$ip = $ipnew; |
|
|
my ($hostname, $has, $address, $ipnew) = split(/ /,$hostinfo); |
|
&logthis('<font color="green">'. |
|
"hostname = $hostname me = $me, name = $name actual ip = $ipnew </font>"); |
|
|
|
if ($hostname eq $name) { # Lookup succeeded.. |
|
&logthis('<font color="green"> look up ok <font>'); |
|
$ip = $ipnew; |
|
} else { |
|
&logthis('<font color="green"> Lookup failed: ' |
|
.$hostname." ne $name </font>"); |
|
} |
|
# Reconstruct the host line and append to adjusted: |
# Reconstruct the host line and append to adjusted: |
|
|
my $newline = "$id:$domain:$role:$name:$ip"; |
my $newline = "$id:$domain:$role:$name:$ip"; |
if($maxcon ne "") { # Not all hosts have loncnew tuning params |
if($maxcon ne "") { # Not all hosts have loncnew tuning params |
$newline .= ":$maxcon:$idleto:$mincon"; |
$newline .= ":$maxcon:$idleto:$mincon"; |
} |
} |
$adjusted .= $newline."\n"; |
$adjusted .= $newline."\n"; |
|
|
} else { # Not me, pass unmodified. |
} else { # Not me, pass unmodified. |
$adjusted .= $line."\n"; |
$adjusted .= $line."\n"; |
} |
} |
} else { # Blank or comment never re-written. |
} else { # Blank or comment never re-written. |
$adjusted .= $line."\n"; # Pass blanks and comments as is. |
$adjusted .= $line."\n"; # Pass blanks and comments as is. |
} |
} |
} |
} |
return $adjusted; |
return $adjusted; |
} |
} |
# |
# |
# InstallFile: Called to install an administrative file: |
# InstallFile: Called to install an administrative file: |
Line 483 sub ReinitProcess {
|
Line 476 sub ReinitProcess {
|
} |
} |
return 'ok'; |
return 'ok'; |
} |
} |
|
# Validate a line in a configuration file edit script: |
|
# Validation includes: |
|
# - Ensuring the command is valid. |
|
# - Ensuring the command has sufficient parameters |
|
# Parameters: |
|
# scriptline - A line to validate (\n has been stripped for what it's worth). |
|
# |
|
# Return: |
|
# 0 - Invalid scriptline. |
|
# 1 - Valid scriptline |
|
# NOTE: |
|
# Only the command syntax is checked, not the executability of the |
|
# command. |
|
# |
|
sub isValidEditCommand { |
|
my $scriptline = shift; |
|
|
|
# Line elements are pipe separated: |
|
|
|
my ($command, $key, $newline) = split(/\|/, $scriptline); |
|
&logthis('<font color="green"> isValideditCommand checking: '. |
|
"Command = '$command', Key = '$key', Newline = '$newline' </font>\n"); |
|
|
|
if ($command eq "delete") { |
|
# |
|
# key with no newline. |
|
# |
|
if( ($key eq "") || ($newline ne "")) { |
|
return 0; # Must have key but no newline. |
|
} else { |
|
return 1; # Valid syntax. |
|
} |
|
} elsif (($command eq "append") || ($command eq "replace")) { |
|
# |
|
# key and newline: |
|
# |
|
if (($key eq "") || ($newline eq "")) { |
|
return 0; |
|
} else { |
|
return 1; |
|
} |
|
} else { |
|
return 0; # Invalid command. |
|
} |
|
return 0; # Should not get here!!! |
|
} |
|
|
|
# |
|
# |
|
# Called to edit a configuration table file |
|
# Parameters: |
|
# request - The entire command/request sent by lonc or lonManage |
|
# Return: |
|
# The reply to send to the client. |
|
# |
|
sub EditFile { |
|
my $request = shift; |
|
|
|
# Split the command into it's pieces: edit:filetype:script |
|
|
|
my ($request, $filetype, $script) = split(/:/, $request,3); # : in script |
|
|
|
# Check the pre-coditions for success: |
|
|
|
if($request != "edit") { # Something is amiss afoot alack. |
|
return "error:edit request detected, but request != 'edit'\n"; |
|
} |
|
if( ($filetype ne "hosts") && |
|
($filetype ne "domain")) { |
|
return "error:edit requested with invalid file specifier: $filetype \n"; |
|
} |
|
|
|
# Split the edit script and check it's validity. |
|
|
|
my @scriptlines = split(/\n/, $script); # one line per element. |
|
my $linecount = scalar(@scriptlines); |
|
for(my $i = 0; $i < $linecount; $i++) { |
|
chomp($scriptlines[$i]); |
|
if(!isValidEditCommand($scriptlines[$i])) { |
|
return "error:edit with bad script line: '$scriptlines[$i]' \n"; |
|
} |
|
} |
|
|
|
# Execute the edit operation. |
|
|
|
|
|
return "ok\n"; |
|
} |
# |
# |
# Convert an error return code from lcpasswd to a string value. |
# Convert an error return code from lcpasswd to a string value. |
# |
# |
Line 1224 sub make_new_child {
|
Line 1304 sub make_new_child {
|
} |
} |
#--------------------------------------------------------------------- reinit |
#--------------------------------------------------------------------- reinit |
} elsif($userinput =~ /^reinit/) { # Encoded and manager |
} elsif($userinput =~ /^reinit/) { # Encoded and manager |
if (($wasenc == 1) && isManager) { |
if (($wasenc == 1) && isManager) { |
my $cert = GetCertificate($userinput); |
my $cert = GetCertificate($userinput); |
if(ValidManager($cert)) { |
if(ValidManager($cert)) { |
chomp($userinput); |
chomp($userinput); |
my $reply = ReinitProcess($userinput); |
my $reply = ReinitProcess($userinput); |
print $client "$reply\n"; |
print $client "$reply\n"; |
|
} else { |
|
print $client "refused\n"; |
|
} |
} else { |
} else { |
print $client "refused\n"; |
Reply($client, "refused\n", $userinput); |
} |
} |
} else { |
#------------------------------------------------------------------------- edit |
Reply($client, "refused\n", $userinput); |
} elsif ($userinput =~ /^edit/) { # encoded and manager: |
|
if(($wasenc ==1) && (isManager)) { |
|
my $cert = GetCertificate($userinput); |
} |
if(ValidManager($cert)) { |
|
my($command, $filetype, $script) = split(/:/, $userinput); |
|
if (($filetype eq "hosts") || ($filetype eq "domain")) { |
|
if($script ne "") { |
|
Reply($client, EditFile($userinput)); |
|
} else { |
|
Reply($client,"refused\n",$userinput); |
|
} |
|
} else { |
|
Reply($client,"refused\n",$userinput); |
|
} |
|
} else { |
|
Reply($client,"refused\n",$userinput); |
|
} |
|
} else { |
|
Reply($client,"refused\n",$userinput); |
|
} |
# ------------------------------------------------------------------------ auth |
# ------------------------------------------------------------------------ auth |
} elsif ($userinput =~ /^auth/) { # Encoded and client only. |
} elsif ($userinput =~ /^auth/) { # Encoded and client only. |
if (($wasenc==1) && isClient) { |
if (($wasenc==1) && isClient) { |
my ($cmd,$udom,$uname,$upass)=split(/:/,$userinput); |
my ($cmd,$udom,$uname,$upass)=split(/:/,$userinput); |
chomp($upass); |
chomp($upass); |
Line 1439 sub make_new_child {
|
Line 1538 sub make_new_child {
|
unless (mkdir($fpnow,0777)) { |
unless (mkdir($fpnow,0777)) { |
$fperror="error: ".($!+0) |
$fperror="error: ".($!+0) |
." mkdir failed while attempting " |
." mkdir failed while attempting " |
."makeuser"; |
."makeuser\n"; |
} |
} |
} |
} |
} |
} |
Line 1959 sub make_new_child {
|
Line 2058 sub make_new_child {
|
my %hash; |
my %hash; |
if (tie(%hash,'GDBM_File',"$proname/$namespace.db",&GDBM_WRCREAT(),0640)) { |
if (tie(%hash,'GDBM_File',"$proname/$namespace.db",&GDBM_WRCREAT(),0640)) { |
foreach my $key (@keys) { |
foreach my $key (@keys) { |
delete($hash{&unescape($key)}); |
delete($hash{$key}); |
} |
} |
if (untie(%hash)) { |
if (untie(%hash)) { |
print $client "ok\n"; |
print $client "ok\n"; |