--- loncom/lonnet/perl/lonnet.pm	2005/10/28 21:51:50	1.670
+++ loncom/lonnet/perl/lonnet.pm	2005/10/31 19:32:19	1.673
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # TCP networking package
 #
-# $Id: lonnet.pm,v 1.670 2005/10/28 21:51:50 albertel Exp $
+# $Id: lonnet.pm,v 1.673 2005/10/31 19:32:19 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -166,7 +166,7 @@ sub reply {
     unless (defined($hostname{$server})) { return 'no_such_host'; }
     my $answer=subreply($cmd,$server);
     if (($answer=~/^refused/) || ($answer=~/^rejected/)) {
-       &logthis("<font color=blue>WARNING:".
+       &logthis("<font color=\"blue\">WARNING:".
                 " $cmd to $server returned $answer</font>");
     }
     return $answer;
@@ -190,14 +190,14 @@ sub reconlonc {
             sleep 5;
             if (-e "$peerfile") { return; }
             &logthis(
-  "<font color=blue>WARNING: $peerfile still not there, giving up</font>");
+  "<font color=\"blue\">WARNING: $peerfile still not there, giving up</font>");
         } else {
 	    &logthis(
-               "<font color=blue>WARNING:".
+               "<font color=\"blue\">WARNING:".
                " lonc at pid $loncpid not responding, giving up</font>");
         }
     } else {
-     &logthis('<font color=blue>WARNING: lonc not running, giving up</font>');
+     &logthis('<font color="blue">WARNING: lonc not running, giving up</font>');
     }
 }
 
@@ -206,7 +206,7 @@ sub reconlonc {
 sub critical {
     my ($cmd,$server)=@_;
     unless ($hostname{$server}) {
-        &logthis("<font color=blue>WARNING:".
+        &logthis("<font color=\"blue\">WARNING:".
                " Critical message to unknown server ($server)</font>");
         return 'no_such_host';
     }
@@ -240,12 +240,12 @@ sub critical {
             }
             chomp($wcmd);
             if ($wcmd eq $cmd) {
-		&logthis("<font color=blue>WARNING: ".
+		&logthis("<font color=\"blue\">WARNING: ".
                          "Connection buffer $dfilename: $cmd</font>");
                 &logperm("D:$server:$cmd");
 	        return 'con_delayed';
             } else {
-                &logthis("<font color=red>CRITICAL:"
+                &logthis("<font color=\"red\">CRITICAL:"
                         ." Critical connection failed: $server $cmd</font>");
                 &logperm("F:$server:$cmd");
                 return 'con_failed';
@@ -290,7 +290,7 @@ sub appenv {
     my %newenv=@_;
     foreach (keys %newenv) {
 	if (($newenv{$_}=~/^user\.role/) || ($newenv{$_}=~/^user\.priv/)) {
-            &logthis("<font color=blue>WARNING: ".
+            &logthis("<font color=\"blue\">WARNING: ".
                 "Attempt to modify environment ".$_." to ".$newenv{$_}
                 .'</font>');
 	    delete($newenv{$_});
@@ -304,7 +304,7 @@ sub appenv {
 	return 'error: '.$!;
     }
     unless (flock($lockfh,LOCK_EX)) {
-         &logthis("<font color=blue>WARNING: ".
+         &logthis("<font color=\"blue\">WARNING: ".
                   'Could not obtain exclusive lock in appenv: '.$!);
          close($lockfh);
          return 'error: '.$!;
@@ -349,7 +349,7 @@ sub delenv {
     my $delthis=shift;
     my %newenv=();
     if (($delthis=~/user\.role/) || ($delthis=~/user\.priv/)) {
-        &logthis("<font color=blue>WARNING: ".
+        &logthis("<font color=\"blue\">WARNING: ".
                 "Attempt to delete from environment ".$delthis);
         return 'error';
     }
@@ -360,7 +360,7 @@ sub delenv {
 	    return 'error';
 	}
 	unless (flock($fh,LOCK_SH)) {
-	    &logthis("<font color=blue>WARNING: ".
+	    &logthis("<font color=\"blue\">WARNING: ".
 		     'Could not obtain shared lock in delenv: '.$!);
 	    close($fh);
 	    return 'error: '.$!;
@@ -374,7 +374,7 @@ sub delenv {
 	    return 'error';
 	}
 	unless (flock($fh,LOCK_EX)) {
-	    &logthis("<font color=blue>WARNING: ".
+	    &logthis("<font color=\"blue\">WARNING: ".
 		     'Could not obtain exclusive lock in delenv: '.$!);
 	    close($fh);
 	    return 'error: '.$!;
@@ -1064,7 +1064,7 @@ sub repcopy {
            if ($response->is_error()) {
 	       unlink($transname);
                my $message=$response->status_line;
-               &logthis("<font color=blue>WARNING:"
+               &logthis("<font color=\"blue\">WARNING:"
                        ." LWP get: $message: $filename</font>");
                return 'unavailable';
            } else {
@@ -1074,7 +1074,7 @@ sub repcopy {
                   if ($mresponse->is_error()) {
 		      unlink($filename.'.meta');
                       &logthis(
-                     "<font color=yellow>INFO: No metadata: $filename</font>");
+                     "<font color=\"yellow\">INFO: No metadata: $filename</font>");
                   }
 	       }
                rename($transname,$filename);
@@ -1542,7 +1542,7 @@ sub flushcourselogs {
         } else {
             &logthis('Failed to flush log buffer for '.$crsid);
             if (length($courselogs{$crsid})>40000) {
-               &logthis("<font color=blue>WARNING: Buffer for ".$crsid.
+               &logthis("<font color=\"blue\">WARNING: Buffer for ".$crsid.
                         " exceeded maximum size, deleting.</font>");
                delete $courselogs{$crsid};
             }
@@ -1953,7 +1953,7 @@ sub checkout {
 		 $now.'&'.$ENV{'REMOTE_ADDR'});
     my $token=&reply('tmpput:'.$infostr,$lonhost);
     if ($token=~/^error\:/) { 
-        &logthis("<font color=blue>WARNING: ".
+        &logthis("<font color=\"blue\">WARNING: ".
                 "Checkout tmpput failed ".$tudom.' - '.$tuname.' - '.$symb.
                  "</font>");
         return ''; 
@@ -1969,7 +1969,7 @@ sub checkout {
     unless (&cstore(\%infohash,$symb,$tcrsid,$tudom,$tuname) eq 'ok') {
        return '';
     } else {
-        &logthis("<font color=blue>WARNING: ".
+        &logthis("<font color=\"blue\">WARNING: ".
                 "Checkout cstore failed ".$tudom.' - '.$tuname.' - '.$symb.
                  "</font>");
     }    
@@ -1979,7 +1979,7 @@ sub checkout {
                                                  $token)) ne 'ok') {
 	return '';
     } else {
-        &logthis("<font color=blue>WARNING: ".
+        &logthis("<font color=\"blue\">WARNING: ".
                 "Checkout log failed ".$tudom.' - '.$tuname.' - '.$symb.
                  "</font>");
     }
@@ -3106,20 +3106,26 @@ sub allowed {
 # not allowing 'edit' access (editupload) to uploaded course docs
     if (($priv eq 'bre') && ($uri=~m|^uploaded/|)) {
 	$thisallowed='';
-	my $refuri=$env{'httpref.'.$orguri};
-	if ($refuri) {
-	    if ($refuri =~ m|^/adm/|) {
-		$thisallowed='F';
-	    } else {
-                $refuri=&declutter($refuri);
-                my ($match) = &is_on_map($refuri);
-                if ($match) {
+        my ($match)=&is_on_map($uri);
+        if ($match) {
+            if ($env{'user.priv.'.$env{'request.role'}.'./'}
+                  =~/\Q$priv\E\&([^\:]*)/) {
+                $thisallowed.=$1;
+            }
+        } else {
+            my $refuri=$env{'httpref.'.$orguri};
+            if ($refuri) {
+                if ($refuri =~ m|^/adm/|) {
                     $thisallowed='F';
+                } else {
+                    $refuri=&declutter($refuri);
+                    my ($match) = &is_on_map($refuri);
+                    if ($match) {
+                        $thisallowed='F';
+                    }
                 }
-	    }
-	} else {
-	    $thisallowed='';
-	}
+            }
+        }
     }
 
 # Full access at system, domain or course-wide level? Exit.
@@ -3287,7 +3293,7 @@ sub allowed {
        my $unamedom=$env{'user.name'}.':'.$env{'user.domain'};
        if ($env{'course.'.$env{'request.course.id'}.'.'.$priv.'.roles.denied'}
 	   =~/\Q$rolecode\E/) {
-           &log($env{'user.domain'},$env{'user.name'},$env{'user.host'},
+           &logthis($env{'user.domain'}.':'.$env{'user.name'}.':'.$env{'user.home'}.':'.
                 'Denied by role: '.$priv.' for '.$uri.' as '.$rolecode.' in '.
                 $env{'request.course.id'});
            return '';
@@ -3295,7 +3301,7 @@ sub allowed {
 
        if ($env{'course.'.$env{'request.course.id'}.'.'.$priv.'.users.denied'}
 	   =~/\Q$unamedom\E/) {
-           &log($env{'user.domain'},$env{'user.name'},$env{'user.host'},
+           &logthis($env{'user.domain'}.':'.$env{'user.name'}.':'.$env{'user.home'}.
                 'Denied by user: '.$priv.' for '.$uri.' as '.$unamedom.' in '.
                 $env{'request.course.id'});
            return '';
@@ -3307,8 +3313,8 @@ sub allowed {
    if ($thisallowed=~/R/) {
        my $rolecode=(split(/\./,$env{'request.role'}))[0];
        if (&metadata($uri,'roledeny')=~/\Q$rolecode\E/) {
-	  &log($env{'user.domain'},$env{'user.name'},$env{'user.host'},
-                    'Denied by role: '.$priv.' for '.$uri.' as '.$rolecode);
+	   &logthis($env{'user.domain'}.':'.$env{'user.name'}.':'.$env{'user.home'}.':'.
+		'Denied by role: '.$priv.' for '.$uri.' as '.$rolecode);
           return '';
        }
    }
@@ -4476,7 +4482,7 @@ sub get_userresdata {
     }
     #error 2 occurs when the .db doesn't exist
     if ($tmp!~/error: 2 /) {
-	&logthis("<font color=blue>WARNING:".
+	&logthis("<font color=\"blue\">WARNING:".
 		 " Trying to get resource data for ".
 		 $uname." at ".$udom.": ".
 		 $tmp."</font>");
@@ -6120,7 +6126,7 @@ $processmarker='_'.time.'_'.$perlvar{'lo
 $dumpcount=0;
 
 &logtouch();
-&logthis('<font color=yellow>INFO: Read configuration</font>');
+&logthis('<font color="yellow">INFO: Read configuration</font>');
 $readit=1;
     {
 	use integer;