version 1.156, 2003/10/13 08:49:54
|
version 1.158, 2003/10/21 09:14:31
|
Line 60
|
Line 60
|
# 09/08/2003 Ron Fox: Told lond to take care of change logging so we |
# 09/08/2003 Ron Fox: Told lond to take care of change logging so we |
# don't have to remember it: |
# don't have to remember it: |
# |
# |
|
# Change Log: |
|
# $Log$ |
|
# Revision 1.158 2003/10/21 09:14:31 foxr |
|
# Re-install $Log$ in comment header to support automatic change logging. |
|
# |
|
# |
|
|
|
|
use strict; |
use strict; |
Line 268 sub CopyFile {
|
Line 274 sub CopyFile {
|
return 0; |
return 0; |
} |
} |
} |
} |
|
# |
|
# Host files are passed out with externally visible host IPs. |
|
# If, for example, we are behind a fire-wall or NAT host, our |
|
# internally visible IP may be different than the externally |
|
# visible IP. Therefore, we always adjust the contents of the |
|
# host file so that the entry for ME is the IP that we believe |
|
# we have. At present, this is defined as the entry that |
|
# DNS has for us. If by some chance we are not able to get a |
|
# DNS translation for us, then we assume that the host.tab file |
|
# is correct. |
|
# BUGBUGBUG - in the future, we really should see if we can |
|
# easily query the interface(s) instead. |
|
# Parameter(s): |
|
# contents - The contents of the host.tab to check. |
|
# Returns: |
|
# newcontents - The adjusted contents. |
|
# |
|
# |
|
sub AdjustHostContents { |
|
my $contents = shift; |
|
my $adjusted; |
|
my $me = $perlvar{'lonHostID'}; |
|
|
|
foreach my $line (split(/\n/,$contents)) { |
|
if(!(($line eq "") || ($line =~ /^ *\#/) || ($line =~ /^ *$/))) { |
|
chomp($line); |
|
my ($id,$domain,$role,$name,$ip,$maxcon,$idleto,$mincon)=split(/:/,$line); |
|
if ($id eq $me) { |
|
open(PIPE, " /usr/bin/host $name |") || die "Cant' make host pipeline"; |
|
my $hostinfo = <PIPE>; |
|
close PIPE; |
|
|
|
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: |
|
|
|
my $newline = "$id:$domain:$role:$name:$ip"; |
|
if($maxcon ne "") { # Not all hosts have loncnew tuning params |
|
$newline .= ":$maxcon:$idleto:$mincon"; |
|
} |
|
$adjusted .= $newline."\n"; |
|
|
|
} else { # Not me, pass unmodified. |
|
$adjusted .= $line."\n"; |
|
} |
|
} else { # Blank or comment never re-written. |
|
$adjusted .= $line."\n"; # Pass blanks and comments as is. |
|
} |
|
} |
|
return $adjusted; |
|
} |
# |
# |
# InstallFile: Called to install an administrative file: |
# InstallFile: Called to install an administrative file: |
# - The file is created with <name>.tmp |
# - The file is created with <name>.tmp |
Line 361 sub PushFile {
|
Line 426 sub PushFile {
|
&logthis('<font color="green"> Pushfile: backed up ' |
&logthis('<font color="green"> Pushfile: backed up ' |
.$tablefile." to $backupfile</font>"); |
.$tablefile." to $backupfile</font>"); |
|
|
|
# If the file being pushed is the host file, we adjust the entry for ourself so that the |
|
# IP will be our current IP as looked up in dns. Note this is only 99% good as it's possible |
|
# to conceive of conditions where we don't have a DNS entry locally. This is possible in a |
|
# network sense but it doesn't make much sense in a LonCAPA sense so we ignore (for now) |
|
# that possibilty. |
|
|
|
if($filename eq "host") { |
|
$contents = AdjustHostContents($contents); |
|
} |
|
|
# Install the new file: |
# Install the new file: |
|
|
if(!InstallFile($tablefile, $contents)) { |
if(!InstallFile($tablefile, $contents)) { |