--- loncom/lond 2011/06/12 00:08:01 1.467.2.4 +++ loncom/lond 2011/05/13 02:58:02 1.472 @@ -2,7 +2,7 @@ # The LearningOnline Network # lond "LON Daemon" Server (port "LOND" 5663) # -# $Id: lond,v 1.467.2.4 2011/06/12 00:08:01 raeburn Exp $ +# $Id: lond,v 1.472 2011/05/13 02:58:02 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -15,6 +15,7 @@ # # LON-CAPA is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of + # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # @@ -59,7 +60,7 @@ my $DEBUG = 0; # Non zero to ena my $status=''; my $lastlog=''; -my $VERSION='$Revision: 1.467.2.4 $'; #' stupid emacs +my $VERSION='$Revision: 1.472 $'; #' stupid emacs my $remoteVERSION; my $currenthostid="default"; my $currentdomainid; @@ -420,8 +421,7 @@ sub ReadManagerTable { my $tablename = $perlvar{'lonTabDir'}."/managers.tab"; if (!open (MANAGERS, $tablename)) { - my $hostname = &Apache::lonnet::hostname($perlvar{'lonHostID'}); - if (&Apache::lonnet::is_LC_dns($hostname)) { + if (&loncapa_dns_server()) { &logthis('No manager table. Nobody can manage!!'); } return; @@ -600,8 +600,8 @@ sub InstallFile { # # ConfigFileFromSelector: converts a configuration file selector # into a configuration file pathname. -# Supports the following file selectors: -# hosts, domain, dns_hosts, dns_domain +# Supports the following file selectors: +# hosts, domain, dns_hosts, dns_domain # # # Parameters: @@ -614,12 +614,11 @@ sub ConfigFileFromSelector { my $tablefile; my $tabledir = $perlvar{'lonTabDir'}.'/'; - if (($selector eq "hosts") || ($selector eq "domain") || + if (($selector eq "hosts") || ($selector eq "domain") || ($selector eq "dns_hosts") || ($selector eq "dns_domain")) { - $tablefile = $tabledir.$selector.'.tab'; + $tablefile = $tabledir.$selector.'.tab'; } return $tablefile; - } # # PushFile: Called to do an administrative push of a file. @@ -646,7 +645,7 @@ sub PushFile { # hosts.tab ($filename eq host). # domain.tab ($filename eq domain). # dns_hosts.tab ($filename eq dns_host). - # dns_domain.tab ($filename eq dns_domain). + # dns_domain.tab ($filename eq dns_domain). # Construct the destination filename or reject the request. # # lonManage is supposed to ensure this, however this session could be @@ -677,8 +676,8 @@ sub PushFile { .$tablefile." $! "); return "error:$!"; } else { - &logthis(' Installed new '.$tablefile - ." - transaction by: $clientname ($clientip)"); + &logthis(' Installed new '.$tablefile + .""); my $adminmail = $perlvar{'lonAdmEMail'}; my $admindom = &Apache::lonnet::host_domain($perlvar{'lonHostID'}); if ($admindom ne '') { @@ -692,12 +691,16 @@ sub PushFile { } if ($adminmail =~ /^[^\@]+\@[^\@]+$/) { my $msg = new Mail::Send; + my $senderaddress = $perlvar{'lonSysEMail'}; $msg->to($adminmail); $msg->subject('LON-CAPA DNS update on '.$perlvar{'lonHostID'}); + if ($senderaddress) { + $msg->add('From',$senderaddress); + } $msg->add('Content-type','text/plain; charset=UTF-8'); if (my $fh = $msg->open()) { print $fh 'Update to '.$tablefile.' from Cluster Manager '. - "$clientname ($clientip)\n"; + $client."\n"; $fh->close; } } @@ -709,6 +712,25 @@ sub PushFile { } +sub loncapa_dns_server { + my $lonhost = &Apache::lonnet::get_host_ip($perlvar{'lonHostID'}); + my $hoststable = "$perlvar{'lonTabDir'}/hosts.tab"; + my $is_dns_server; + if (!open(HOSTS,"<$hoststable")) { + &logthis('Could not open hosts.tab to check for LON-CAPA DNS servers.'); + while (my $host = ) { + chomp($host); + $host =~ s/(^\s+|\s+$)//g; + if ($host =~ /^\Q^$lonhost\E/) { + $is_dns_server = 1; + last; + } + } + close(HOSTS); + } + return $is_dns_server; +} + # # Called to re-init either lonc or lond. # @@ -5038,7 +5060,7 @@ sub validate_course_owner_handler { my ($cmd, $tail, $client) = @_; my $userinput = "$cmd:$tail"; my ($inst_course_id, $owner, $cdom, $coowners) = split(/:/, $tail); - + $owner = &unescape($owner); $coowners = &unescape($coowners); my $outcome = &localenroll::new_course($inst_course_id,$owner,$cdom,$coowners); @@ -6029,7 +6051,7 @@ if (-e $pidfile) { $server = IO::Socket::INET->new(LocalPort => $perlvar{'londPort'}, Type => SOCK_STREAM, Proto => 'tcp', - ReuseAddr => 1, + ReuseAddr => 1, Listen => 10 ) or die "making socket: $@\n"; @@ -6092,12 +6114,9 @@ sub HUPSMAN { # sig # a setuid perl script that can be root for us to do this job. # sub ReloadApache { - if (&LONCAPA::try_to_lock('/tmp/lock_apachereload')) { - my $execdir = $perlvar{'lonDaemons'}; - my $script = $execdir."/apachereload"; - system($script); - unlink('/tmp/lock_apachereload'); # Remove the lock file. - } + my $execdir = $perlvar{'lonDaemons'}; + my $script = $execdir."/apachereload"; + system($script); } # @@ -6364,10 +6383,8 @@ my %iphost = &Apache::lonnet::get_iphost my $dist=`$perlvar{'lonDaemons'}/distprobe`; my $arch = `uname -i`; -chomp($arch); if ($arch eq 'unknown') { $arch = `uname -m`; - chomp($arch); } # -------------------------------------------------------------- @@ -6436,13 +6453,12 @@ sub make_new_child { #don't get intercepted $SIG{USR1}= \&logstatus; $SIG{ALRM}= \&timeout; - - # - # Block sigpipe as it gets thrownon socket disconnect and we want to - # deal with that as a read faiure instead. - # - my $blockset = POSIX::SigSet->new(SIGPIPE); - sigprocmask(SIG_BLOCK, $blockset); + # + # Block sigpipe as it gets thrownon socket disconnect and we want to + # deal with that as a read faiure instead. + # + my $blockset = POSIX::SigSet->new(SIGPIPE); + sigprocmask(SIG_BLOCK, $blockset); $lastlog='Forked '; $status='Forked';