--- loncom/lonnet/perl/lonnet.pm 2005/10/28 21:51:50 1.670 +++ loncom/lonnet/perl/lonnet.pm 2005/11/01 15:07:29 1.674 @@ -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.674 2005/11/01 15:07:29 www 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("WARNING:". + &logthis("WARNING:". " $cmd to $server returned $answer"); } return $answer; @@ -190,14 +190,14 @@ sub reconlonc { sleep 5; if (-e "$peerfile") { return; } &logthis( - "WARNING: $peerfile still not there, giving up"); + "WARNING: $peerfile still not there, giving up"); } else { &logthis( - "WARNING:". + "WARNING:". " lonc at pid $loncpid not responding, giving up"); } } else { - &logthis('WARNING: lonc not running, giving up'); + &logthis('WARNING: lonc not running, giving up'); } } @@ -206,7 +206,7 @@ sub reconlonc { sub critical { my ($cmd,$server)=@_; unless ($hostname{$server}) { - &logthis("WARNING:". + &logthis("WARNING:". " Critical message to unknown server ($server)"); return 'no_such_host'; } @@ -240,12 +240,12 @@ sub critical { } chomp($wcmd); if ($wcmd eq $cmd) { - &logthis("WARNING: ". + &logthis("WARNING: ". "Connection buffer $dfilename: $cmd"); &logperm("D:$server:$cmd"); return 'con_delayed'; } else { - &logthis("CRITICAL:" + &logthis("CRITICAL:" ." Critical connection failed: $server $cmd"); &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("WARNING: ". + &logthis("WARNING: ". "Attempt to modify environment ".$_." to ".$newenv{$_} .''); delete($newenv{$_}); @@ -304,7 +304,7 @@ sub appenv { return 'error: '.$!; } unless (flock($lockfh,LOCK_EX)) { - &logthis("WARNING: ". + &logthis("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("WARNING: ". + &logthis("WARNING: ". "Attempt to delete from environment ".$delthis); return 'error'; } @@ -360,7 +360,7 @@ sub delenv { return 'error'; } unless (flock($fh,LOCK_SH)) { - &logthis("WARNING: ". + &logthis("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("WARNING: ". + &logthis("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("WARNING:" + &logthis("WARNING:" ." LWP get: $message: $filename"); return 'unavailable'; } else { @@ -1074,7 +1074,7 @@ sub repcopy { if ($mresponse->is_error()) { unlink($filename.'.meta'); &logthis( - "INFO: No metadata: $filename"); + "INFO: No metadata: $filename"); } } rename($transname,$filename); @@ -1542,7 +1542,7 @@ sub flushcourselogs { } else { &logthis('Failed to flush log buffer for '.$crsid); if (length($courselogs{$crsid})>40000) { - &logthis("WARNING: Buffer for ".$crsid. + &logthis("WARNING: Buffer for ".$crsid. " exceeded maximum size, deleting."); delete $courselogs{$crsid}; } @@ -1953,7 +1953,7 @@ sub checkout { $now.'&'.$ENV{'REMOTE_ADDR'}); my $token=&reply('tmpput:'.$infostr,$lonhost); if ($token=~/^error\:/) { - &logthis("WARNING: ". + &logthis("WARNING: ". "Checkout tmpput failed ".$tudom.' - '.$tuname.' - '.$symb. ""); return ''; @@ -1969,7 +1969,7 @@ sub checkout { unless (&cstore(\%infohash,$symb,$tcrsid,$tudom,$tuname) eq 'ok') { return ''; } else { - &logthis("WARNING: ". + &logthis("WARNING: ". "Checkout cstore failed ".$tudom.' - '.$tuname.' - '.$symb. ""); } @@ -1979,7 +1979,7 @@ sub checkout { $token)) ne 'ok') { return ''; } else { - &logthis("WARNING: ". + &logthis("WARNING: ". "Checkout log failed ".$tudom.' - '.$tuname.' - '.$symb. ""); } @@ -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 ''; } } @@ -3968,7 +3974,9 @@ sub createcourse { return 'refused'; } # ------------------------------------------------------------------- Create ID - my $uname=substr($$.time,0,5).unpack("H8",pack("I32",time)). + my $uname=int(1+rand(9)). + ('a'..'z','A'..'Z','0'..'9')[int(rand(62))]. + substr($$.time,0,5).unpack("H8",pack("I32",time)). unpack("H2",pack("I32",int(rand(255)))).$perlvar{'lonHostID'}; # ----------------------------------------------- Make sure that does not exist my $uhome=&homeserver($uname,$udom,'true'); @@ -4476,7 +4484,7 @@ sub get_userresdata { } #error 2 occurs when the .db doesn't exist if ($tmp!~/error: 2 /) { - &logthis("WARNING:". + &logthis("WARNING:". " Trying to get resource data for ". $uname." at ".$udom.": ". $tmp.""); @@ -6120,7 +6128,7 @@ $processmarker='_'.time.'_'.$perlvar{'lo $dumpcount=0; &logtouch(); -&logthis('INFO: Read configuration'); +&logthis('INFO: Read configuration'); $readit=1; { use integer;