--- loncom/lonnet/perl/lonnet.pm	2002/05/13 09:26:29	1.218
+++ loncom/lonnet/perl/lonnet.pm	2002/05/16 20:25:12	1.221
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # TCP networking package
 #
-# $Id: lonnet.pm,v 1.218 2002/05/13 09:26:29 albertel Exp $
+# $Id: lonnet.pm,v 1.221 2002/05/16 20:25:12 matthew Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -77,7 +77,7 @@ use Apache::File;
 use LWP::UserAgent();
 use HTTP::Headers;
 use vars 
-qw(%perlvar %hostname %homecache %hostip %spareid %hostdom 
+qw(%perlvar %hostname %homecache %badhomecache %hostip %spareid %hostdom 
    %libserv %pr %prp %metacache %packagetab 
    %courselogs %accesshash $processmarker $dumpcount 
    %coursedombuf %coursehombuf %courseresdatacache);
@@ -482,18 +482,24 @@ sub authenticate {
 
 sub homeserver {
     my ($uname,$udom)=@_;
-
     my $index="$uname:$udom";
-    if ($homecache{$index}) { return "$homecache{$index}"; }
-
+    if ($homecache{$index}) { 
+        return "$homecache{$index}"; 
+    }
     my $tryserver;
     foreach $tryserver (keys %libserv) {
+        next if (exists($badhomecache{$index}->{$tryserver}));
 	if ($hostdom{$tryserver} eq $udom) {
            my $answer=reply("home:$udom:$uname",$tryserver);
+           my @tmp =keys(%{$badhomecache{$index}}); 
            if ($answer eq 'found') { 
-	      $homecache{$index}=$tryserver;
+              $homecache{$index}=$tryserver;
               return $tryserver; 
-	   }
+           } else {
+               $badhomecache{$index}->{$tryserver}=1;
+           }
+       } else {
+           $badhomecache{$index}->{$tryserver}=1;
        }
     }    
     return 'no_host';
@@ -2372,7 +2378,13 @@ sub EXT {
 # ---------------------------------------------------- Any other user namespace
     } elsif ($realm eq 'environment') {
 # ----------------------------------------------------------------- environment
-        return $ENV{'environment.'.$spacequalifierrest};
+	if (($uname eq $ENV{'user.name'})&&($udom eq $ENV{'user.domain'})) {
+	    return $ENV{'environment.'.$spacequalifierrest};
+	} else {
+	    my %returnhash=&userenvironment($udom,$uname,
+					    $spacequalifierrest);
+	    return $returnhash{$spacequalifierrest};
+	}
     } elsif ($realm eq 'system') {
 # ----------------------------------------------------------------- system.time
 	if ($space eq 'time') {
@@ -2813,6 +2825,17 @@ BEGIN {
 
     while (my $configline=<$config>) {
         if ($configline =~ /^[^\#]*PerlSetVar/) {
+	   my ($dummy,$varname,$varvalue)=split(/\s+/,$configline);
+           chomp($varvalue);
+           $perlvar{$varname}=$varvalue;
+        }
+    }
+}
+{
+    my $config=Apache::File->new("/etc/httpd/conf/loncapa_apache.conf");
+
+    while (my $configline=<$config>) {
+        if ($configline =~ /^[^\#]*PerlSetVar/) {
 	   my ($dummy,$varname,$varvalue)=split(/\s+/,$configline);
            chomp($varvalue);
            $perlvar{$varname}=$varvalue;