version 1.656, 2005/09/13 19:43:01
|
version 1.675, 2005/11/01 21:34:04
|
Line 37 use HTTP::Date;
|
Line 37 use HTTP::Date;
|
use vars |
use vars |
qw(%perlvar %hostname %badServerCache %iphost %spareid %hostdom |
qw(%perlvar %hostname %badServerCache %iphost %spareid %hostdom |
%libserv %pr %prp $memcache %packagetab |
%libserv %pr %prp $memcache %packagetab |
%courselogs %accesshash %userrolehash $processmarker $dumpcount |
%courselogs %accesshash %userrolehash %domainrolehash $processmarker $dumpcount |
%coursedombuf %coursenumbuf %coursehombuf %coursedescrbuf %courseinstcodebuf %courseownerbuf |
%coursedombuf %coursenumbuf %coursehombuf %coursedescrbuf %courseinstcodebuf %courseownerbuf |
%domaindescription %domain_auth_def %domain_auth_arg_def |
%domaindescription %domain_auth_def %domain_auth_arg_def |
%domain_lang_def %domain_city %domain_longi %domain_lati $tmpdir $_64bit |
%domain_lang_def %domain_city %domain_longi %domain_lati $tmpdir $_64bit |
Line 166 sub reply {
|
Line 166 sub reply {
|
unless (defined($hostname{$server})) { return 'no_such_host'; } |
unless (defined($hostname{$server})) { return 'no_such_host'; } |
my $answer=subreply($cmd,$server); |
my $answer=subreply($cmd,$server); |
if (($answer=~/^refused/) || ($answer=~/^rejected/)) { |
if (($answer=~/^refused/) || ($answer=~/^rejected/)) { |
&logthis("<font color=blue>WARNING:". |
&logthis("<font color=\"blue\">WARNING:". |
" $cmd to $server returned $answer</font>"); |
" $cmd to $server returned $answer</font>"); |
} |
} |
return $answer; |
return $answer; |
Line 190 sub reconlonc {
|
Line 190 sub reconlonc {
|
sleep 5; |
sleep 5; |
if (-e "$peerfile") { return; } |
if (-e "$peerfile") { return; } |
&logthis( |
&logthis( |
"<font color=blue>WARNING: $peerfile still not there, giving up</font>"); |
"<font color=\"blue\">WARNING: $peerfile still not there, giving up</font>"); |
} else { |
} else { |
&logthis( |
&logthis( |
"<font color=blue>WARNING:". |
"<font color=\"blue\">WARNING:". |
" lonc at pid $loncpid not responding, giving up</font>"); |
" lonc at pid $loncpid not responding, giving up</font>"); |
} |
} |
} else { |
} else { |
&logthis('<font color=blue>WARNING: lonc not running, giving up</font>'); |
&logthis('<font color="blue">WARNING: lonc not running, giving up</font>'); |
} |
} |
} |
} |
|
|
Line 206 sub reconlonc {
|
Line 206 sub reconlonc {
|
sub critical { |
sub critical { |
my ($cmd,$server)=@_; |
my ($cmd,$server)=@_; |
unless ($hostname{$server}) { |
unless ($hostname{$server}) { |
&logthis("<font color=blue>WARNING:". |
&logthis("<font color=\"blue\">WARNING:". |
" Critical message to unknown server ($server)</font>"); |
" Critical message to unknown server ($server)</font>"); |
return 'no_such_host'; |
return 'no_such_host'; |
} |
} |
Line 240 sub critical {
|
Line 240 sub critical {
|
} |
} |
chomp($wcmd); |
chomp($wcmd); |
if ($wcmd eq $cmd) { |
if ($wcmd eq $cmd) { |
&logthis("<font color=blue>WARNING: ". |
&logthis("<font color=\"blue\">WARNING: ". |
"Connection buffer $dfilename: $cmd</font>"); |
"Connection buffer $dfilename: $cmd</font>"); |
&logperm("D:$server:$cmd"); |
&logperm("D:$server:$cmd"); |
return 'con_delayed'; |
return 'con_delayed'; |
} else { |
} else { |
&logthis("<font color=red>CRITICAL:" |
&logthis("<font color=\"red\">CRITICAL:" |
." Critical connection failed: $server $cmd</font>"); |
." Critical connection failed: $server $cmd</font>"); |
&logperm("F:$server:$cmd"); |
&logperm("F:$server:$cmd"); |
return 'con_failed'; |
return 'con_failed'; |
Line 290 sub appenv {
|
Line 290 sub appenv {
|
my %newenv=@_; |
my %newenv=@_; |
foreach (keys %newenv) { |
foreach (keys %newenv) { |
if (($newenv{$_}=~/^user\.role/) || ($newenv{$_}=~/^user\.priv/)) { |
if (($newenv{$_}=~/^user\.role/) || ($newenv{$_}=~/^user\.priv/)) { |
&logthis("<font color=blue>WARNING: ". |
&logthis("<font color=\"blue\">WARNING: ". |
"Attempt to modify environment ".$_." to ".$newenv{$_} |
"Attempt to modify environment ".$_." to ".$newenv{$_} |
.'</font>'); |
.'</font>'); |
delete($newenv{$_}); |
delete($newenv{$_}); |
Line 304 sub appenv {
|
Line 304 sub appenv {
|
return 'error: '.$!; |
return 'error: '.$!; |
} |
} |
unless (flock($lockfh,LOCK_EX)) { |
unless (flock($lockfh,LOCK_EX)) { |
&logthis("<font color=blue>WARNING: ". |
&logthis("<font color=\"blue\">WARNING: ". |
'Could not obtain exclusive lock in appenv: '.$!); |
'Could not obtain exclusive lock in appenv: '.$!); |
close($lockfh); |
close($lockfh); |
return 'error: '.$!; |
return 'error: '.$!; |
Line 349 sub delenv {
|
Line 349 sub delenv {
|
my $delthis=shift; |
my $delthis=shift; |
my %newenv=(); |
my %newenv=(); |
if (($delthis=~/user\.role/) || ($delthis=~/user\.priv/)) { |
if (($delthis=~/user\.role/) || ($delthis=~/user\.priv/)) { |
&logthis("<font color=blue>WARNING: ". |
&logthis("<font color=\"blue\">WARNING: ". |
"Attempt to delete from environment ".$delthis); |
"Attempt to delete from environment ".$delthis); |
return 'error'; |
return 'error'; |
} |
} |
Line 360 sub delenv {
|
Line 360 sub delenv {
|
return 'error'; |
return 'error'; |
} |
} |
unless (flock($fh,LOCK_SH)) { |
unless (flock($fh,LOCK_SH)) { |
&logthis("<font color=blue>WARNING: ". |
&logthis("<font color=\"blue\">WARNING: ". |
'Could not obtain shared lock in delenv: '.$!); |
'Could not obtain shared lock in delenv: '.$!); |
close($fh); |
close($fh); |
return 'error: '.$!; |
return 'error: '.$!; |
Line 374 sub delenv {
|
Line 374 sub delenv {
|
return 'error'; |
return 'error'; |
} |
} |
unless (flock($fh,LOCK_EX)) { |
unless (flock($fh,LOCK_EX)) { |
&logthis("<font color=blue>WARNING: ". |
&logthis("<font color=\"blue\">WARNING: ". |
'Could not obtain exclusive lock in delenv: '.$!); |
'Could not obtain exclusive lock in delenv: '.$!); |
close($fh); |
close($fh); |
return 'error: '.$!; |
return 'error: '.$!; |
Line 443 sub overloaderror {
|
Line 443 sub overloaderror {
|
# ------------------------------ Find server with least workload from spare.tab |
# ------------------------------ Find server with least workload from spare.tab |
|
|
sub spareserver { |
sub spareserver { |
my ($loadpercent,$userloadpercent) = @_; |
my ($loadpercent,$userloadpercent,$want_server_name) = @_; |
my $tryserver; |
my $tryserver; |
my $spareserver=''; |
my $spareserver=''; |
if ($userloadpercent !~ /\d/) { $userloadpercent=0; } |
if ($userloadpercent !~ /\d/) { $userloadpercent=0; } |
my $lowestserver=$loadpercent > $userloadpercent? |
my $lowestserver=$loadpercent > $userloadpercent? |
$loadpercent : $userloadpercent; |
$loadpercent : $userloadpercent; |
foreach $tryserver (keys %spareid) { |
foreach $tryserver (keys(%spareid)) { |
my $loadans=reply('load',$tryserver); |
my $loadans=&reply('load',$tryserver); |
my $userloadans=reply('userload',$tryserver); |
my $userloadans=&reply('userload',$tryserver); |
if ($loadans !~ /\d/ && $userloadans !~ /\d/) { |
if ($loadans !~ /\d/ && $userloadans !~ /\d/) { |
next; #didn't get a number from the server |
next; #didn't get a number from the server |
} |
} |
Line 468 sub spareserver {
|
Line 468 sub spareserver {
|
$answer = $userloadans; |
$answer = $userloadans; |
} |
} |
if (($answer =~ /\d/) && ($answer<$lowestserver)) { |
if (($answer =~ /\d/) && ($answer<$lowestserver)) { |
$spareserver="http://$hostname{$tryserver}"; |
if ($want_server_name) { |
|
$spareserver=$tryserver; |
|
} else { |
|
$spareserver="http://$hostname{$tryserver}"; |
|
} |
$lowestserver=$answer; |
$lowestserver=$answer; |
} |
} |
} |
} |
Line 1060 sub repcopy {
|
Line 1064 sub repcopy {
|
if ($response->is_error()) { |
if ($response->is_error()) { |
unlink($transname); |
unlink($transname); |
my $message=$response->status_line; |
my $message=$response->status_line; |
&logthis("<font color=blue>WARNING:" |
&logthis("<font color=\"blue\">WARNING:" |
." LWP get: $message: $filename</font>"); |
." LWP get: $message: $filename</font>"); |
return 'unavailable'; |
return 'unavailable'; |
} else { |
} else { |
Line 1070 sub repcopy {
|
Line 1074 sub repcopy {
|
if ($mresponse->is_error()) { |
if ($mresponse->is_error()) { |
unlink($filename.'.meta'); |
unlink($filename.'.meta'); |
&logthis( |
&logthis( |
"<font color=yellow>INFO: No metadata: $filename</font>"); |
"<font color=\"yellow\">INFO: No metadata: $filename</font>"); |
} |
} |
} |
} |
rename($transname,$filename); |
rename($transname,$filename); |
Line 1176 sub process_coursefile {
|
Line 1180 sub process_coursefile {
|
$fetchresult= &reply('fetchuserfile:'.$docudom.'/'.$docuname.'/'.$file, |
$fetchresult= &reply('fetchuserfile:'.$docudom.'/'.$docuname.'/'.$file, |
$home); |
$home); |
} else { |
} else { |
my $fetchresult = ''; |
|
my $fpath = ''; |
my $fpath = ''; |
my $fname = $file; |
my $fname = $file; |
($fpath,$fname) = ($file =~ m|^(.*)/([^/]+)$|); |
($fpath,$fname) = ($file =~ m|^(.*)/([^/]+)$|); |
Line 1539 sub flushcourselogs {
|
Line 1542 sub flushcourselogs {
|
} else { |
} else { |
&logthis('Failed to flush log buffer for '.$crsid); |
&logthis('Failed to flush log buffer for '.$crsid); |
if (length($courselogs{$crsid})>40000) { |
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>"); |
" exceeded maximum size, deleting.</font>"); |
delete $courselogs{$crsid}; |
delete $courselogs{$crsid}; |
} |
} |
Line 1610 sub flushcourselogs {
|
Line 1613 sub flushcourselogs {
|
delete $userrolehash{$entry}; |
delete $userrolehash{$entry}; |
} |
} |
} |
} |
|
# |
|
# Reverse lookup of domain roles (dc, ad, li, sc, au) |
|
# |
|
my %domrolebuffer = (); |
|
foreach my $entry (keys %domainrolehash) { |
|
my ($role,$uname,$udom,$runame,$rudom,$rsec)=split/:/,$entry; |
|
if ($domrolebuffer{$rudom}) { |
|
$domrolebuffer{$rudom}.='&'.&escape($entry). |
|
'='.&escape($domainrolehash{$entry}); |
|
} else { |
|
$domrolebuffer{$rudom}.=&escape($entry). |
|
'='.&escape($domainrolehash{$entry}); |
|
} |
|
delete $domainrolehash{$entry}; |
|
} |
|
foreach my $dom (keys(%domrolebuffer)) { |
|
foreach my $tryserver (keys %libserv) { |
|
if ($hostdom{$tryserver} eq $dom) { |
|
unless (&reply('domroleput:'.$dom.':'. |
|
$domrolebuffer{$dom},$tryserver) eq 'ok') { |
|
&logthis('Put of domain roles failed for '.$dom.' and '.$tryserver); |
|
} |
|
} |
|
} |
|
} |
$dumpcount++; |
$dumpcount++; |
} |
} |
|
|
Line 1643 sub courseacclog {
|
Line 1671 sub courseacclog {
|
my $fnsymb=shift; |
my $fnsymb=shift; |
unless ($env{'request.course.id'}) { return ''; } |
unless ($env{'request.course.id'}) { return ''; } |
my $what=$fnsymb.':'.$env{'user.name'}.':'.$env{'user.domain'}; |
my $what=$fnsymb.':'.$env{'user.name'}.':'.$env{'user.domain'}; |
if ($fnsymb=~/(problem|exam|quiz|assess|survey|form|page)$/) { |
if ($fnsymb=~/(problem|exam|quiz|assess|survey|form|task|page)$/) { |
$what.=':POST'; |
$what.=':POST'; |
# FIXME: Probably ought to escape things.... |
# FIXME: Probably ought to escape things.... |
foreach (keys %env) { |
foreach (keys %env) { |
Line 1685 sub linklog {
|
Line 1713 sub linklog {
|
|
|
sub userrolelog { |
sub userrolelog { |
my ($trole,$username,$domain,$area,$tstart,$tend)=@_; |
my ($trole,$username,$domain,$area,$tstart,$tend)=@_; |
if (($trole=~/^ca/) || ($trole=~/^in/) || |
if (($trole=~/^ca/) || ($trole=~/^aa/) || |
($trole=~/^cc/) || ($trole=~/^ep/) || |
($trole=~/^in/) || ($trole=~/^cc/) || |
($trole=~/^cr/) || ($trole=~/^ta/)) { |
($trole=~/^ep/) || ($trole=~/^cr/) || |
|
($trole=~/^ta/)) { |
my (undef,$rudom,$runame,$rsec)=split(/\//,$area); |
my (undef,$rudom,$runame,$rsec)=split(/\//,$area); |
$userrolehash |
$userrolehash |
{$trole.':'.$username.':'.$domain.':'.$runame.':'.$rudom.':'.$rsec} |
{$trole.':'.$username.':'.$domain.':'.$runame.':'.$rudom.':'.$rsec} |
=$tend.':'.$tstart; |
=$tend.':'.$tstart; |
} |
} |
|
if (($trole=~/^dc/) || ($trole=~/^ad/) || |
|
($trole=~/^li/) || ($trole=~/^li/) || |
|
($trole=~/^au/) || ($trole=~/^dg/) || |
|
($trole=~/^sc/)) { |
|
my (undef,$rudom,$runame,$rsec)=split(/\//,$area); |
|
$domainrolehash |
|
{$trole.':'.$username.':'.$domain.':'.$runame.':'.$rudom.':'.$rsec} |
|
= $tend.':'.$tstart; |
|
} |
} |
} |
|
|
sub get_course_adv_roles { |
sub get_course_adv_roles { |
Line 1811 sub courseiddump {
|
Line 1849 sub courseiddump {
|
return %returnhash; |
return %returnhash; |
} |
} |
|
|
# |
# ---------------------------------------------------------- DC e-mail |
|
|
|
sub dcmailput { |
|
my ($domain,$msgid,$contents,$server)=@_; |
|
my $status = &Apache::lonnet::critical( |
|
'dcmailput:'.$domain.':'.&Apache::lonnet::escape($msgid).'='. |
|
&Apache::lonnet::escape($$contents{$server}),$server); |
|
return $status; |
|
} |
|
|
|
sub dcmaildump { |
|
my ($dom,$startdate,$enddate,$senders) = @_; |
|
my %returnhash=(); |
|
foreach my $tryserver (keys(%libserv)) { |
|
if ($hostdom{$tryserver} eq $dom) { |
|
%{$returnhash{$tryserver}}=(); |
|
my $cmd='dcmaildump:'.$dom.':'. |
|
&escape($startdate).':'.&escape($enddate).':'; |
|
my @esc_senders=map { &escape($_)} @$senders; |
|
$cmd.=&escape(join('&',@esc_senders)); |
|
foreach (split(/\&/,&reply($cmd,$tryserver))) { |
|
my ($key,$value) = split(/\=/,$_); |
|
if (($key) && ($value)) { |
|
$returnhash{$tryserver}{&unescape($key)} = &unescape($value); |
|
} |
|
} |
|
} |
|
} |
|
return %returnhash; |
|
} |
|
# ---------------------------------------------------------- Domain roles |
|
|
|
sub get_domain_roles { |
|
my ($dom,$roles,$startdate,$enddate)=@_; |
|
if (undef($startdate) || $startdate eq '') { |
|
$startdate = '.'; |
|
} |
|
if (undef($enddate) || $enddate eq '') { |
|
$enddate = '.'; |
|
} |
|
my $rolelist = join(':',@{$roles}); |
|
my %personnel = (); |
|
foreach my $tryserver (keys(%libserv)) { |
|
if ($hostdom{$tryserver} eq $dom) { |
|
%{$personnel{$tryserver}}=(); |
|
foreach ( |
|
split(/\&/,&reply('domrolesdump:'.$dom.':'. |
|
&escape($startdate).':'.&escape($enddate).':'. |
|
&escape($rolelist), $tryserver))) { |
|
my($key,$value) = split(/\=/,$_); |
|
if (($key) && ($value)) { |
|
$personnel{$tryserver}{&unescape($key)} = &unescape($value); |
|
} |
|
} |
|
} |
|
} |
|
return %personnel; |
|
} |
|
|
# ----------------------------------------------------------- Check out an item |
# ----------------------------------------------------------- Check out an item |
|
|
sub get_first_access { |
sub get_first_access { |
Line 1857 sub checkout {
|
Line 1953 sub checkout {
|
$now.'&'.$ENV{'REMOTE_ADDR'}); |
$now.'&'.$ENV{'REMOTE_ADDR'}); |
my $token=&reply('tmpput:'.$infostr,$lonhost); |
my $token=&reply('tmpput:'.$infostr,$lonhost); |
if ($token=~/^error\:/) { |
if ($token=~/^error\:/) { |
&logthis("<font color=blue>WARNING: ". |
&logthis("<font color=\"blue\">WARNING: ". |
"Checkout tmpput failed ".$tudom.' - '.$tuname.' - '.$symb. |
"Checkout tmpput failed ".$tudom.' - '.$tuname.' - '.$symb. |
"</font>"); |
"</font>"); |
return ''; |
return ''; |
Line 1873 sub checkout {
|
Line 1969 sub checkout {
|
unless (&cstore(\%infohash,$symb,$tcrsid,$tudom,$tuname) eq 'ok') { |
unless (&cstore(\%infohash,$symb,$tcrsid,$tudom,$tuname) eq 'ok') { |
return ''; |
return ''; |
} else { |
} else { |
&logthis("<font color=blue>WARNING: ". |
&logthis("<font color=\"blue\">WARNING: ". |
"Checkout cstore failed ".$tudom.' - '.$tuname.' - '.$symb. |
"Checkout cstore failed ".$tudom.' - '.$tuname.' - '.$symb. |
"</font>"); |
"</font>"); |
} |
} |
Line 1883 sub checkout {
|
Line 1979 sub checkout {
|
$token)) ne 'ok') { |
$token)) ne 'ok') { |
return ''; |
return ''; |
} else { |
} else { |
&logthis("<font color=blue>WARNING: ". |
&logthis("<font color=\"blue\">WARNING: ". |
"Checkout log failed ".$tudom.' - '.$tuname.' - '.$symb. |
"Checkout log failed ".$tudom.' - '.$tuname.' - '.$symb. |
"</font>"); |
"</font>"); |
} |
} |
Line 2486 sub rolesinit {
|
Line 2582 sub rolesinit {
|
if ($_!~/^rolesdef_/) { |
if ($_!~/^rolesdef_/) { |
my ($area,$role)=split(/=/,$_); |
my ($area,$role)=split(/=/,$_); |
$area=~s/\_\w\w$//; |
$area=~s/\_\w\w$//; |
|
|
my ($trole,$tend,$tstart); |
my ($trole,$tend,$tstart); |
if ($role=~/^cr/) { |
if ($role=~/^cr/) { |
if ($role=~m|^(cr/\w+/\w+/[a-zA-Z0-9]+)_(.*)$|) { |
if ($role=~m|^(cr/\w+/\w+/[a-zA-Z0-9]+)_(.*)$|) { |
Line 2510 sub rolesinit {
|
Line 2605 sub rolesinit {
|
&standard_roleprivs(\%allroles,$trole,$tdomain,$spec,$trest,$area); |
&standard_roleprivs(\%allroles,$trole,$tdomain,$spec,$trest,$area); |
} |
} |
} |
} |
} |
} |
} |
} |
my ($author,$adv) = &set_userprivs(\$userroles,\%allroles); |
my ($author,$adv) = &set_userprivs(\$userroles,\%allroles); |
$userroles.='user.adv='.$adv."\n". |
$userroles.='user.adv='.$adv."\n". |
Line 2863 sub eget {
|
Line 2958 sub eget {
|
return %returnhash; |
return %returnhash; |
} |
} |
|
|
|
# ------------------------------------------------------------ tmpput interface |
|
sub tmpput { |
|
my ($storehash,$server)=@_; |
|
my $items=''; |
|
foreach (keys(%$storehash)) { |
|
$items.=&escape($_).'='.&freeze_escape($$storehash{$_}).'&'; |
|
} |
|
$items=~s/\&$//; |
|
return &reply("tmpput:$items",$server); |
|
} |
|
|
|
# ------------------------------------------------------------ tmpget interface |
|
sub tmpget { |
|
my ($token)=@_; |
|
my $rep=&reply("tmpget:$token",$perlvar{'lonHostID'}); |
|
my %returnhash; |
|
foreach my $item (split(/\&/,$rep)) { |
|
my ($key,$value)=split(/=/,$item); |
|
$returnhash{&unescape($key)}=&thaw_unescape($value); |
|
} |
|
return %returnhash; |
|
} |
|
|
# ---------------------------------------------- Custom access rule evaluation |
# ---------------------------------------------- Custom access rule evaluation |
|
|
sub customaccess { |
sub customaccess { |
Line 2984 sub allowed {
|
Line 3102 sub allowed {
|
$thisallowed.=$1; |
$thisallowed.=$1; |
} |
} |
|
|
# URI is an uploaded document for this course |
# URI is an uploaded document for this course, default permissions don't matter |
# not allowing 'edit' access (editupload) to uploaded course docs |
# not allowing 'edit' access (editupload) to uploaded course docs |
if (($priv eq 'bre') && ($uri=~m|^uploaded/|)) { |
if (($priv eq 'bre') && ($uri=~m|^uploaded/|)) { |
my $refuri=$env{'httpref.'.$orguri}; |
$thisallowed=''; |
if ($refuri) { |
my ($match)=&is_on_map($uri); |
if ($refuri =~ m|^/adm/|) { |
if ($match) { |
$thisallowed='F'; |
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'; |
|
} |
|
} |
|
} |
|
} |
} |
} |
|
|
# Full access at system, domain or course-wide level? Exit. |
# Full access at system, domain or course-wide level? Exit. |
Line 3160 sub allowed {
|
Line 3293 sub allowed {
|
my $unamedom=$env{'user.name'}.':'.$env{'user.domain'}; |
my $unamedom=$env{'user.name'}.':'.$env{'user.domain'}; |
if ($env{'course.'.$env{'request.course.id'}.'.'.$priv.'.roles.denied'} |
if ($env{'course.'.$env{'request.course.id'}.'.'.$priv.'.roles.denied'} |
=~/\Q$rolecode\E/) { |
=~/\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 '. |
'Denied by role: '.$priv.' for '.$uri.' as '.$rolecode.' in '. |
$env{'request.course.id'}); |
$env{'request.course.id'}); |
return ''; |
return ''; |
Line 3168 sub allowed {
|
Line 3301 sub allowed {
|
|
|
if ($env{'course.'.$env{'request.course.id'}.'.'.$priv.'.users.denied'} |
if ($env{'course.'.$env{'request.course.id'}.'.'.$priv.'.users.denied'} |
=~/\Q$unamedom\E/) { |
=~/\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 '. |
'Denied by user: '.$priv.' for '.$uri.' as '.$unamedom.' in '. |
$env{'request.course.id'}); |
$env{'request.course.id'}); |
return ''; |
return ''; |
Line 3180 sub allowed {
|
Line 3313 sub allowed {
|
if ($thisallowed=~/R/) { |
if ($thisallowed=~/R/) { |
my $rolecode=(split(/\./,$env{'request.role'}))[0]; |
my $rolecode=(split(/\./,$env{'request.role'}))[0]; |
if (&metadata($uri,'roledeny')=~/\Q$rolecode\E/) { |
if (&metadata($uri,'roledeny')=~/\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); |
'Denied by role: '.$priv.' for '.$uri.' as '.$rolecode); |
return ''; |
return ''; |
} |
} |
} |
} |
Line 3208 sub allowed {
|
Line 3341 sub allowed {
|
# --------------------------------------------------- Is a resource on the map? |
# --------------------------------------------------- Is a resource on the map? |
|
|
sub is_on_map { |
sub is_on_map { |
my $uri=&declutter(shift); |
my $uri=&deversion(&declutter(shift)); |
$uri=~s/\.\d+\.(\w+)$/\.$1/; |
|
my @uriparts=split(/\//,$uri); |
my @uriparts=split(/\//,$uri); |
my $filename=$uriparts[$#uriparts]; |
my $filename=$uriparts[$#uriparts]; |
my $pathname=$uri; |
my $pathname=$uri; |
Line 3579 sub assignrole {
|
Line 3711 sub assignrole {
|
my $answer=&reply($command,&homeserver($uname,$udom)); |
my $answer=&reply($command,&homeserver($uname,$udom)); |
# log new user role if status is ok |
# log new user role if status is ok |
if ($answer eq 'ok') { |
if ($answer eq 'ok') { |
&userrolelog($mrole,$uname,$udom,$url,$start,$end); |
&userrolelog($role,$uname,$udom,$url,$start,$end); |
} |
} |
return $answer; |
return $answer; |
} |
} |
Line 3842 sub createcourse {
|
Line 3974 sub createcourse {
|
return 'refused'; |
return 'refused'; |
} |
} |
# ------------------------------------------------------------------- Create ID |
# ------------------------------------------------------------------- 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'}; |
unpack("H2",pack("I32",int(rand(255)))).$perlvar{'lonHostID'}; |
# ----------------------------------------------- Make sure that does not exist |
# ----------------------------------------------- Make sure that does not exist |
my $uhome=&homeserver($uname,$udom,'true'); |
my $uhome=&homeserver($uname,$udom,'true'); |
Line 4350 sub get_userresdata {
|
Line 4484 sub get_userresdata {
|
} |
} |
#error 2 occurs when the .db doesn't exist |
#error 2 occurs when the .db doesn't exist |
if ($tmp!~/error: 2 /) { |
if ($tmp!~/error: 2 /) { |
&logthis("<font color=blue>WARNING:". |
&logthis("<font color=\"blue\">WARNING:". |
" Trying to get resource data for ". |
" Trying to get resource data for ". |
$uname." at ".$udom.": ". |
$uname." at ".$udom.": ". |
$tmp."</font>"); |
$tmp."</font>"); |
Line 5245 sub numval3 {
|
Line 5379 sub numval3 {
|
return $total; |
return $total; |
} |
} |
|
|
|
sub digest { |
|
my ($data)=@_; |
|
my $digest=&Digest::MD5::md5($data); |
|
my ($a,$b,$c,$d)=unpack("iiii",$digest); |
|
my ($e,$f); |
|
{ |
|
use integer; |
|
$e=($a+$b); |
|
$f=($c+$d); |
|
if ($_64bit) { |
|
$e=(($e<<32)>>32); |
|
$f=(($f<<32)>>32); |
|
} |
|
} |
|
if (wantarray) { |
|
return ($e,$f); |
|
} else { |
|
my $g; |
|
{ |
|
use integer; |
|
$g=($e+$f); |
|
if ($_64bit) { |
|
$g=(($g<<32)>>32); |
|
} |
|
} |
|
return $g; |
|
} |
|
} |
|
|
sub latest_rnd_algorithm_id { |
sub latest_rnd_algorithm_id { |
return '64bit4'; |
return '64bit5'; |
} |
} |
|
|
sub get_rand_alg { |
sub get_rand_alg { |
Line 5286 sub rndseed {
|
Line 5449 sub rndseed {
|
if (!$username) { $username=$wusername } |
if (!$username) { $username=$wusername } |
my $which=&get_rand_alg(); |
my $which=&get_rand_alg(); |
if (defined(&getCODE())) { |
if (defined(&getCODE())) { |
if ($which eq '64bit4') { |
if ($which eq '64bit5') { |
|
return &rndseed_CODE_64bit5($symb,$courseid,$domain,$username); |
|
} elsif ($which eq '64bit4') { |
return &rndseed_CODE_64bit4($symb,$courseid,$domain,$username); |
return &rndseed_CODE_64bit4($symb,$courseid,$domain,$username); |
} else { |
} else { |
return &rndseed_CODE_64bit($symb,$courseid,$domain,$username); |
return &rndseed_CODE_64bit($symb,$courseid,$domain,$username); |
} |
} |
|
} elsif ($which eq '64bit5') { |
|
return &rndseed_64bit5($symb,$courseid,$domain,$username); |
} elsif ($which eq '64bit4') { |
} elsif ($which eq '64bit4') { |
return &rndseed_64bit4($symb,$courseid,$domain,$username); |
return &rndseed_64bit4($symb,$courseid,$domain,$username); |
} elsif ($which eq '64bit3') { |
} elsif ($which eq '64bit3') { |
Line 5413 sub rndseed_64bit4 {
|
Line 5580 sub rndseed_64bit4 {
|
} |
} |
} |
} |
|
|
|
sub rndseed_64bit5 { |
|
my ($symb,$courseid,$domain,$username)=@_; |
|
my ($num1,$num2)=&digest("$symb,$courseid,$domain,$username"); |
|
return "$num1:$num2"; |
|
} |
|
|
sub rndseed_CODE_64bit { |
sub rndseed_CODE_64bit { |
my ($symb,$courseid,$domain,$username)=@_; |
my ($symb,$courseid,$domain,$username)=@_; |
{ |
{ |
Line 5451 sub rndseed_CODE_64bit4 {
|
Line 5624 sub rndseed_CODE_64bit4 {
|
} |
} |
} |
} |
|
|
|
sub rndseed_CODE_64bit5 { |
|
my ($symb,$courseid,$domain,$username)=@_; |
|
my $code = &getCODE(); |
|
my ($num1,$num2)=&digest("$symb,$courseid,$code"); |
|
return "$num1:$num2"; |
|
} |
|
|
sub setup_random_from_rndseed { |
sub setup_random_from_rndseed { |
my ($rndseed)=@_; |
my ($rndseed)=@_; |
if ($rndseed =~/([,:])/) { |
if ($rndseed =~/([,:])/) { |
Line 5695 sub filelocation {
|
Line 5875 sub filelocation {
|
sub hreflocation { |
sub hreflocation { |
my ($dir,$file)=@_; |
my ($dir,$file)=@_; |
unless (($file=~m-^http://-i) || ($file=~m-^/-)) { |
unless (($file=~m-^http://-i) || ($file=~m-^/-)) { |
my $finalpath=filelocation($dir,$file); |
$file=filelocation($dir,$file); |
$finalpath=~s-^/home/httpd/html--; |
} |
$finalpath=~s-^/home/(\w+)/public_html/-/~$1/-; |
if ($file=~m-^\Q$perlvar{'lonDocRoot'}\E-) { |
return $finalpath; |
$file=~s-^\Q$perlvar{'lonDocRoot'}\E--; |
} elsif ($file=~m-^/home-) { |
} elsif ($file=~m-/home/(\w+)/public_html/-) { |
$file=~s-^/home/httpd/html--; |
|
$file=~s-^/home/(\w+)/public_html/-/~$1/-; |
$file=~s-^/home/(\w+)/public_html/-/~$1/-; |
return $file; |
} elsif ($file=~m-^\Q$perlvar{'lonUsersDir'}\E-) { |
|
$file=~s-^/home/httpd/lonUsers/([^/]*)/./././([^/]*)/userfiles/ |
|
-/uploaded/$1/$2/-x; |
} |
} |
return $file; |
return $file; |
} |
} |
Line 5993 $processmarker='_'.time.'_'.$perlvar{'lo
|
Line 6174 $processmarker='_'.time.'_'.$perlvar{'lo
|
$dumpcount=0; |
$dumpcount=0; |
|
|
&logtouch(); |
&logtouch(); |
&logthis('<font color=yellow>INFO: Read configuration</font>'); |
&logthis('<font color="yellow">INFO: Read configuration</font>'); |
$readit=1; |
$readit=1; |
{ |
{ |
use integer; |
use integer; |