Diff for /loncom/lonnet/perl/lonnet.pm between versions 1.868 and 1.869

version 1.868, 2007/04/11 21:37:20 version 1.869, 2007/04/11 22:52:03
Line 182  sub subreply { Line 182  sub subreply {
  $client=IO::Socket::UNIX->new(Peer    =>"$peerfile",   $client=IO::Socket::UNIX->new(Peer    =>"$peerfile",
       Type    => SOCK_STREAM,        Type    => SOCK_STREAM,
       Timeout => 10);        Timeout => 10);
  if($client) {   if ($client) {
     last; # Connected!      last; # Connected!
  } else {   } else {
     &create_connection(&hostname($server),$server);      &create_connection(&hostname($server),$server);
Line 7682  sub goodbye { Line 7682  sub goodbye {
 }  }
   
 sub get_dns {  sub get_dns {
     my ($url,$func) = @_;      my ($url,$func,$ignore_cache) = @_;
       if (!$ignore_cache) {
    my ($content,$cached)=
       &Apache::lonnet::is_cached_new('dns',$url);
    if ($cached) {
       &$func($content);
       return;
    }
       }
   
       my %alldns;
     open(my $config,"<$perlvar{'lonTabDir'}/hosts.tab");      open(my $config,"<$perlvar{'lonTabDir'}/hosts.tab");
     foreach my $dns (<$config>) {      foreach my $dns (<$config>) {
  next if ($dns !~ /^\^(\S*)/x);   next if ($dns !~ /^\^(\S*)/x);
  $dns = $1;   $alldns{$1} = 1;
       }
       while (%alldns) {
    my ($dns) = keys(%alldns);
    delete($alldns{$dns});
  my $ua=new LWP::UserAgent;   my $ua=new LWP::UserAgent;
  my $request=new HTTP::Request('GET',"http://$dns$url");   my $request=new HTTP::Request('GET',"http://$dns$url");
  my $response=$ua->request($request);   my $response=$ua->request($request);
  next if ($response->is_error());   next if ($response->is_error());
  my @content = split("\n",$response->content);   my @content = split("\n",$response->content);
    &Apache::lonnet::do_cache_new('dns',$url,\@content,30*24*60*60);
  &$func(\@content);   &$func(\@content);
    return;
     }      }
     close($config);      close($config);
       &logthis("unable to contact DNS defaulting to on disk file\n");
       open($config,"<$perlvar{'lonTabDir'}/dns_hosts.tab");
       my @content = <$config>;
       &$func(\@content);
       return;
 }  }
 # ------------------------------------------------------------ Read domain file  # ------------------------------------------------------------ Read domain file
 {  {
Line 7724  sub get_dns { Line 7745  sub get_dns {
     }      }
   
     sub load_domain_tab {      sub load_domain_tab {
  &get_dns('/adm/dns/domain',\&parse_domain_tab);   my ($ignore_cache) = @_;
    &get_dns('/adm/dns/domain',\&parse_domain_tab,$ignore_cache);
  my $fh;   my $fh;
  if (open($fh,"<".$perlvar{'lonTabDir'}.'/domain.tab')) {   if (open($fh,"<".$perlvar{'lonTabDir'}.'/domain.tab')) {
     my @lines = <$fh>;      my @lines = <$fh>;
Line 7781  sub get_dns { Line 7803  sub get_dns {
     }      }
   
     sub load_hosts_tab {      sub load_hosts_tab {
  &get_dns('/adm/dns/hosts',\&parse_hosts_tab);   my ($ignore_cache) = @_;
    &get_dns('/adm/dns/hosts',\&parse_hosts_tab,$ignore_cache);
  open(my $config,"<$perlvar{'lonTabDir'}/hosts.tab");   open(my $config,"<$perlvar{'lonTabDir'}/hosts.tab");
  my @config = <$config>;   my @config = <$config>;
  &parse_hosts_tab(\@config);   &parse_hosts_tab(\@config);
Line 7857  sub get_dns { Line 7880  sub get_dns {
     my %iphost;      my %iphost;
     my %name_to_ip;      my %name_to_ip;
     my %lonid_to_ip;      my %lonid_to_ip;
   
       my %valid_ip;
       sub valid_ip {
    my ($ip) = @_;
    if (exists($iphost{$ip}) || exists($valid_ip{$ip})) {
       return 1;
    }
    my $name = gethostbyip($ip);
    my $lonid = &hostname($name);
    if (defined($lonid)) {
       $valid_ip{$ip} = $lonid;
       return 1;
    }
    my %iphosts = &get_iphost();
    if (ref($iphost{$ip})) {
       return 1;
    }
       }
   
     sub get_hosts_from_ip {      sub get_hosts_from_ip {
  my ($ip) = @_;   my ($ip) = @_;
  my %iphosts = &get_iphost();   my %iphosts = &get_iphost();
Line 7887  sub get_dns { Line 7929  sub get_dns {
     }      }
           
     sub get_iphost {      sub get_iphost {
  if (%iphost) { return %iphost; }   my ($ignore_cache) = @_;
    if (!$ignore_cache) {
       if (%iphost) {
    return %iphost;
       }
       my ($ip_info,$cached)=
    &Apache::lonnet::is_cached_new('iphost','iphost');
       if ($cached) {
    %iphost      = %{$ip_info->[0]};
    %name_to_ip  = %{$ip_info->[1]};
    %lonid_to_ip = %{$ip_info->[2]};
    return %iphost;
       }
    }
  my %hostname = &all_hostnames();   my %hostname = &all_hostnames();
  foreach my $id (keys(%hostname)) {   foreach my $id (keys(%hostname)) {
     my $name=&hostname($id);      my $name=&hostname($id);
Line 7906  sub get_dns { Line 7961  sub get_dns {
     $lonid_to_ip{$id} = $ip;      $lonid_to_ip{$id} = $ip;
     push(@{$iphost{$ip}},$id);      push(@{$iphost{$ip}},$id);
  }   }
    &Apache::lonnet::do_cache_new('iphost','iphost',
         [\%iphost,\%name_to_ip,\%lonid_to_ip],
         24*60*60);
   
  return %iphost;   return %iphost;
     }      }
 }  }

Removed from v.1.868  
changed lines
  Added in v.1.869


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