--- loncom/lonnet/perl/lonnet.pm	2007/06/07 22:09:59	1.885
+++ loncom/lonnet/perl/lonnet.pm	2007/06/18 22:52:33	1.892
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # TCP networking package
 #
-# $Id: lonnet.pm,v 1.885 2007/06/07 22:09:59 albertel Exp $
+# $Id: lonnet.pm,v 1.892 2007/06/18 22:52:33 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -149,7 +149,7 @@ sub create_connection {
 				     Type    => SOCK_STREAM,
 				     Timeout => 10);
     return 0 if (!$client);
-    print $client (join(':',$hostname,$lonid,&machine_ids($lonid))."\n");
+    print $client (join(':',$hostname,$lonid,&machine_ids($hostname))."\n");
     my $result = <$client>;
     chomp($result);
     return 1 if ($result eq 'done');
@@ -214,6 +214,24 @@ sub reply {
 # ----------------------------------------------------------- Send USR1 to lonc
 
 sub reconlonc {
+    my ($lonid) = @_;
+    my $hostname = &hostname($lonid);
+    if ($lonid) {
+	my $peerfile="$perlvar{'lonSockDir'}/$hostname";
+	if ($hostname && -e $peerfile) {
+	    &logthis("Trying to reconnect lonc for $lonid ($hostname)");
+	    my $client=IO::Socket::UNIX->new(Peer    => $peerfile,
+					     Type    => SOCK_STREAM,
+					     Timeout => 10);
+	    if ($client) {
+		print $client ("reset_retries\n");
+		my $answer=<$client>;
+		#reset just this one.
+	    }
+	}
+	return;
+    }
+
     &logthis("Trying to reconnect lonc");
     my $loncfile="$perlvar{'lonDaemons'}/logs/lonc.pid";
     if (open(my $fh,"<$loncfile")) {
@@ -1739,13 +1757,16 @@ sub extract_embedded_items {
     while (my $t=$p->get_token()) {
 	if ($t->[0] eq 'S') {
 	    my ($tagname, $attr) = ($t->[1],$t->[2]);
-	    push (@state, $tagname);
+	    push(@state, $tagname);
             if (lc($tagname) eq 'allow') {
                 &add_filetype($allfiles,$attr->{'src'},'src');
             }
 	    if (lc($tagname) eq 'img') {
 		&add_filetype($allfiles,$attr->{'src'},'src');
 	    }
+	    if (lc($tagname) eq 'a') {
+		&add_filetype($allfiles,$attr->{'href'},'href');
+	    }
             if (lc($tagname) eq 'script') {
                 if ($attr->{'archive'} =~ /\.jar$/i) {
                     &add_filetype($allfiles,$attr->{'archive'},'archive');
@@ -7597,14 +7618,11 @@ sub machine_ids {
     my ($hostname) = @_;
     $hostname ||= &hostname($perlvar{'lonHostID'});
     my @ids;
-    my %hostname = &all_hostnames();
-    while( my($id, $name) = each(%hostname)) {
-#	&logthis("-$id-$name-$hostname-");
-	if ($hostname eq $name) {
-	    push(@ids,$id);
-	}
+    my %name_to_host = &all_names();
+    if (ref($name_to_host{$hostname}) eq 'ARRAY') {
+	return @{ $name_to_host{$hostname} };
     }
-    return @ids;
+    return;
 }
 
 sub additional_machine_domains {
@@ -7648,7 +7666,7 @@ sub declutter {
 
 sub clutter {
     my $thisfn='/'.&declutter(shift);
-    if ($thisfn !~ m{^/(uploaded|editupload|userfiles|ext|raw|priv|public)/}
+    if ($thisfn !~ m{^/(uploaded|editupload|adm|userfiles|ext|raw|priv|public)/}
 	|| $thisfn =~ m{^/adm/(includes|pages)} ) { 
        $thisfn='/res'.$thisfn; 
     }
@@ -7832,6 +7850,7 @@ sub get_dns {
     my %hostdom;
     my %libserv;
     my $loaded;
+    my %name_to_host;
 
     sub parse_hosts_tab {
 	my ($file) = @_;
@@ -7843,6 +7862,7 @@ sub get_dns {
 	    $name=~s/\s//g;
 	    if ($id && $domain && $role && $name) {
 		$hostname{$id}=$name;
+		push(@{$name_to_host{$name}}, $id);
 		$hostdom{$id}=$domain;
 		if ($role eq 'library') { $libserv{$id}=$name; }
 	    }
@@ -7852,6 +7872,7 @@ sub get_dns {
     sub reset_hosts_info {
 	&reset_domain_info();
 	&reset_hosts_ip_info();
+	undef(%name_to_host);
 	undef(%hostname);
 	undef(%hostdom);
 	undef(%libserv);
@@ -7881,6 +7902,12 @@ sub get_dns {
 	return %hostname;
     }
 
+    sub all_names {
+	&load_hosts_tab() if (!$loaded);
+
+	return %name_to_host;
+    }
+
     sub is_library {
 	&load_hosts_tab() if (!$loaded);
 
@@ -7937,24 +7964,6 @@ sub get_dns {
     my %name_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 {
 	my ($ip) = @_;
 	my %iphosts = &get_iphost();
@@ -7999,14 +8008,13 @@ sub get_dns {
 		return %iphost;
 	    }
 	}
-	my %hostname = &all_hostnames();
-	foreach my $id (keys(%hostname)) {
-	    my $name=&hostname($id);
+	my %name_to_host = &all_names();
+	foreach my $name (keys(%name_to_host)) {
 	    my $ip;
 	    if (!exists($name_to_ip{$name})) {
 		$ip = gethostbyname($name);
 		if (!$ip || length($ip) ne 4) {
-		    &logthis("Skipping host $id name $name no IP found");
+		    &logthis("Skipping name $name no IP found");
 		    next;
 		}
 		$ip=inet_ntoa($ip);
@@ -8014,8 +8022,10 @@ sub get_dns {
 	    } else {
 		$ip = $name_to_ip{$name};
 	    }
-	    $lonid_to_ip{$id} = $ip;
-	    push(@{$iphost{$ip}},$id);
+	    foreach my $id (@{ $name_to_host{$name} }) {
+		$lonid_to_ip{$id} = $ip;
+	    }
+	    push(@{$iphost{$ip}},@{$name_to_host{$name}});
 	}
 	&Apache::lonnet::do_cache_new('iphost','iphost',
 				      [\%iphost,\%name_to_ip,\%lonid_to_ip],