--- loncom/lond 2014/06/09 16:58:22 1.467.2.8 +++ loncom/lond 2011/01/11 10:32:00 1.468 @@ -2,7 +2,7 @@ # The LearningOnline Network # lond "LON Daemon" Server (port "LOND" 5663) # -# $Id: lond,v 1.467.2.8 2014/06/09 16:58:22 raeburn Exp $ +# $Id: lond,v 1.468 2011/01/11 10:32:00 foxr Exp $ # # Copyright Michigan State University Board of Trustees # @@ -52,14 +52,13 @@ use LONCAPA::lonlocal; use LONCAPA::lonssl; use Fcntl qw(:flock); use Apache::lonnet; -use Mail::Send; my $DEBUG = 0; # Non zero to enable debug log entries. my $status=''; my $lastlog=''; -my $VERSION='$Revision: 1.467.2.8 $'; #' stupid emacs +my $VERSION='$Revision: 1.468 $'; #' stupid emacs my $remoteVERSION; my $currenthostid="default"; my $currentdomainid; @@ -420,11 +419,8 @@ 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)) { - &logthis('No manager table. Nobody can manage!!'); - } - return; + logthis('No manager table. Nobody can manage!!'); + return; } while(my $host = ) { chomp($host); @@ -449,7 +445,7 @@ sub ReadManagerTable { } } else { logthis(' existing host'." $host\n"); - $managers{&Apache::lonnet::get_host_ip($host)} = $host; # Use info from cluster tab if cluster memeber + $managers{&Apache::lonnet::get_host_ip($host)} = $host; # Use info from cluster tab if clumemeber } } } @@ -511,8 +507,7 @@ sub AdjustHostContents { my $me = $perlvar{'lonHostID'}; foreach my $line (split(/\n/,$contents)) { - if(!(($line eq "") || ($line =~ /^ *\#/) || ($line =~ /^ *$/) || - ($line =~ /^\s*\^/))) { + if(!(($line eq "") || ($line =~ /^ *\#/) || ($line =~ /^ *$/))) { chomp($line); my ($id,$domain,$role,$name,$ip,$maxcon,$idleto,$mincon)=split(/:/,$line); if ($id eq $me) { @@ -600,8 +595,11 @@ sub InstallFile { # # ConfigFileFromSelector: converts a configuration file selector # into a configuration file pathname. -# Supports the following file selectors: -# hosts, domain, dns_hosts, dns_domain +# It's probably no longer necessary to preserve +# special handling of hosts or domain as those +# files have been superceded by dns_hosts, dns_domain. +# The default action is just to prepend the directory +# and append .tab # # # Parameters: @@ -614,9 +612,12 @@ sub ConfigFileFromSelector { my $tablefile; my $tabledir = $perlvar{'lonTabDir'}.'/'; - if (($selector eq "hosts") || ($selector eq "domain") || - ($selector eq "dns_hosts") || ($selector eq "dns_domain")) { - $tablefile = $tabledir.$selector.'.tab'; + if ($selector eq "hosts") { + $tablefile = $tabledir."hosts.tab"; + } elsif ($selector eq "domain") { + $tablefile = $tabledir."domain.tab"; + } else { + $tablefile = $tabledir.$selector.'.tab'; } return $tablefile; @@ -637,7 +638,7 @@ sub ConfigFileFromSelector { # String to send to client ("ok" or "refused" if bad file). # sub PushFile { - my $request = shift; + my $request = shift; my ($command, $filename, $contents) = split(":", $request, 3); &Debug("PushFile"); @@ -645,8 +646,6 @@ sub PushFile { # supported: # hosts.tab ($filename eq host). # domain.tab ($filename eq domain). - # dns_hosts.tab ($filename eq dns_host). - # 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 @@ -667,44 +666,6 @@ sub PushFile { if($filename eq "host") { $contents = AdjustHostContents($contents); - } elsif ($filename eq 'dns_host' || $filename eq 'dns_domain') { - if ($contents eq '') { - &logthis(' Pushfile: unable to install ' - .$tablefile." - no data received from push. "); - return 'error: push had no data'; - } - if (&Apache::lonnet::get_host_ip($clientname)) { - my $clienthost = &Apache::lonnet::hostname($clientname); - if ($managers{$clientip} eq $clientname) { - my $clientprotocol = $Apache::lonnet::protocol{$clientname}; - $clientprotocol = 'http' if ($clientprotocol ne 'https'); - my $url = '/adm/'.$filename; - $url =~ s{_}{/}; - my $ua=new LWP::UserAgent; - $ua->timeout(60); - my $request=new HTTP::Request('GET',"$clientprotocol://$clienthost$url"); - my $response=$ua->request($request); - if ($response->is_error()) { - &logthis(' Pushfile: unable to install ' - .$tablefile." - error attempting to pull data. "); - return 'error: pull failed'; - } else { - my $result = $response->content; - chomp($result); - unless ($result eq $contents) { - &logthis(' Pushfile: unable to install ' - .$tablefile." - pushed data and pulled data differ. "); - my $pushleng = length($contents); - my $pullleng = length($result); - if ($pushleng != $pullleng) { - return "error: $pushleng vs $pullleng bytes"; - } else { - return "error: mismatch push and pull"; - } - } - } - } - } } # Install the new file: @@ -715,32 +676,12 @@ sub PushFile { .$tablefile." $! "); return "error:$!"; } else { - &logthis(' Installed new '.$tablefile - ." - transaction by: $clientname ($clientip)"); - my $adminmail = $perlvar{'lonAdmEMail'}; - my $admindom = &Apache::lonnet::host_domain($perlvar{'lonHostID'}); - if ($admindom ne '') { - my %domconfig = - &Apache::lonnet::get_dom('configuration',['contacts'],$admindom); - if (ref($domconfig{'contacts'}) eq 'HASH') { - if ($domconfig{'contacts'}{'adminemail'} ne '') { - $adminmail = $domconfig{'contacts'}{'adminemail'}; - } - } - } - if ($adminmail =~ /^[^\@]+\@[^\@]+$/) { - my $msg = new Mail::Send; - $msg->to($adminmail); - $msg->subject('LON-CAPA DNS update on '.$perlvar{'lonHostID'}); - $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"; - $fh->close; - } - } + &logthis(' Installed new '.$tablefile + .""); + } + # Indicate success: return "ok"; @@ -1727,15 +1668,6 @@ sub server_homeID_handler { } ®ister_handler("serverhomeID", \&server_homeID_handler, 0, 1, 0); -sub server_distarch_handler { - my ($cmd,$tail,$client) = @_; - my $userinput = "$cmd:$tail"; - my $reply = &distro_and_arch(); - &Reply($client,\$reply,$userinput); - return 1; -} -®ister_handler("serverdistarch", \&server_distarch_handler, 0, 1, 0); - # Process a reinit request. Reinit requests that either # lonc or lond be reinitialized so that an updated # host.tab or domain.tab can be processed. @@ -2316,10 +2248,7 @@ sub fetch_user_file_handler { my $destname=$udir.'/'.$ufile; my $transname=$udir.'/'.$ufile.'.in.transit'; - my $clientprotocol=$Apache::lonnet::protocol{$clientname}; - $clientprotocol = 'http' if ($clientprotocol ne 'https'); - my $clienthost = &Apache::lonnet::hostname($clientname); - my $remoteurl=$clientprotocol.'://'.$clienthost.'/userfiles/'.$fname; + my $remoteurl='http://'.$clientip.'/userfiles/'.$fname; my $response; Debug("Remote URL : $remoteurl Transfername $transname Destname: $destname"); alarm(120); @@ -3966,7 +3895,7 @@ sub dump_course_id_handler { $creationcontext = '.'; } my $unpack = 1; - if ($description eq '.' && $instcodefilter eq '.' && $ownerfilter eq '.' && + if ($description eq '.' && $instcodefilter eq '.' && $coursefilter eq '.' && $typefilter eq '.') { $unpack = 0; } @@ -5078,11 +5007,10 @@ sub get_sections_handler { sub validate_course_owner_handler { my ($cmd, $tail, $client) = @_; my $userinput = "$cmd:$tail"; - my ($inst_course_id, $owner, $cdom, $coowners) = split(/:/, $tail); + my ($inst_course_id, $owner, $cdom) = split(/:/, $tail); $owner = &unescape($owner); - $coowners = &unescape($coowners); - my $outcome = &localenroll::new_course($inst_course_id,$owner,$cdom,$coowners); + my $outcome = &localenroll::new_course($inst_course_id,$owner,$cdom); &Reply($client, \$outcome, $userinput); @@ -6070,7 +5998,7 @@ if (-e $pidfile) { $server = IO::Socket::INET->new(LocalPort => $perlvar{'londPort'}, Type => SOCK_STREAM, Proto => 'tcp', - ReuseAddr => 1, + Reuse => 1, Listen => 10 ) or die "making socket: $@\n"; @@ -6133,12 +6061,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); } # @@ -6404,13 +6329,6 @@ 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); -} - # -------------------------------------------------------------- # Accept connections. When a connection comes in, it is validated # and if good, a child process is created to process transactions @@ -6477,13 +6395,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'; @@ -7208,9 +7125,7 @@ sub subscribe { # the metadata unless ($fname=~/\.meta$/) { &unsub("$fname.meta",$clientip); } $fname=~s/\/home\/httpd\/html\/res/raw/; - my $protocol = $Apache::lonnet::protocol{$perlvar{'lonHostID'}}; - $protocol = 'http' if ($protocol ne 'https'); - $fname=$protocol.'://'.&Apache::lonnet::hostname($perlvar{'lonHostID'})."/".$fname; + $fname="http://".&Apache::lonnet::hostname($perlvar{'lonHostID'})."/".$fname; $result="$fname\n"; } } else { @@ -7560,10 +7475,6 @@ sub useable_role { return 1; } -sub distro_and_arch { - return $dist.':'.$arch; -} - # ----------------------------------- POD (plain old documentation, CPAN style) =head1 NAME