version 1.155, 2001/08/20 23:28:43
|
version 1.160, 2001/10/02 18:32:56
|
Line 127
|
Line 127
|
# 5/30 H. K. Ng |
# 5/30 H. K. Ng |
# 6/1 Gerd Kortemeyer |
# 6/1 Gerd Kortemeyer |
# July Guy Albertelli |
# July Guy Albertelli |
# 8/4,8/7,8/8,8/9,8/11,8/16,8/17,8/18,8/20 Gerd Kortemeyer |
# 8/4,8/7,8/8,8/9,8/11,8/16,8/17,8/18,8/20,8/23,9/20,9/21,9/26, |
|
# 10/2 Gerd Kortemeyer |
|
|
package Apache::lonnet; |
package Apache::lonnet; |
|
|
Line 136 use Apache::File;
|
Line 137 use Apache::File;
|
use LWP::UserAgent(); |
use LWP::UserAgent(); |
use HTTP::Headers; |
use HTTP::Headers; |
use vars |
use vars |
qw(%perlvar %hostname %homecache %hostip %spareid %hostdom %libserv %pr %prp %fe %fd $readit %metacache %packagetab); |
qw(%perlvar %hostname %homecache %hostip %spareid %hostdom %libserv %pr %prp %fe %fd $readit %metacache %packagetab %courselogs); |
use IO::Socket; |
use IO::Socket; |
use GDBM_File; |
use GDBM_File; |
use Apache::Constants qw(:common :http); |
use Apache::Constants qw(:common :http); |
Line 665 sub log {
|
Line 666 sub log {
|
return critical("log:$dom:$nam:$what",$hom); |
return critical("log:$dom:$nam:$what",$hom); |
} |
} |
|
|
|
# ------------------------------------------------------------------ Course Log |
|
|
|
sub flushcourselogs { |
|
&logthis('Flushing course log buffers'); |
|
map { |
|
my $crsid=$_; |
|
if (&reply('log:'.$ENV{'course.'.$crsid.'.domain'}.':'. |
|
$ENV{'course.'.$crsid.'.num'}.':'. |
|
&escape($courselogs{$crsid}), |
|
$ENV{'course.'.$crsid.'.home'}) eq 'ok') { |
|
delete $courselogs{$crsid}; |
|
} else { |
|
&logthis('Failed to flush log buffer for '.$crsid); |
|
if (length($courselogs{$crsid})>40000) { |
|
&logthis("<font color=blue>WARNING: Buffer for ".$crsid. |
|
" exceeded maximum size, deleting.</font>"); |
|
delete $courselogs{$crsid}; |
|
} |
|
} |
|
} keys %courselogs; |
|
} |
|
|
|
sub courselog { |
|
my $what=shift; |
|
$what=time.':'.$what; |
|
unless ($ENV{'request.course.id'}) { return ''; } |
|
if (defined $courselogs{$ENV{'request.course.id'}}) { |
|
$courselogs{$ENV{'request.course.id'}}.='&'.$what; |
|
} else { |
|
$courselogs{$ENV{'request.course.id'}}.=$what; |
|
} |
|
if (length($courselogs{$ENV{'request.course.id'}})>4048) { |
|
&flushcourselogs(); |
|
} |
|
} |
|
|
|
sub courseacclog { |
|
my $fnsymb=shift; |
|
unless ($ENV{'request.course.id'}) { return ''; } |
|
my $what=$fnsymb.':'.$ENV{'user.name'}.':'.$ENV{'user.domain'}; |
|
if ($what=~/(problem|exam|quiz|assess|survey|form)$/) { |
|
map { |
|
if ($_=~/^form\.(.*)/) { |
|
$what.=':'.$1.'='.$ENV{$_}; |
|
} |
|
} keys %ENV; |
|
} |
|
&courselog($what); |
|
} |
|
|
# ----------------------------------------------------------- Check out an item |
# ----------------------------------------------------------- Check out an item |
|
|
sub checkout { |
sub checkout { |
Line 1137 sub allowed {
|
Line 1188 sub allowed {
|
return 'F'; |
return 'F'; |
} |
} |
|
|
|
# Free bre to public access |
|
|
|
if ($priv eq 'bre') { |
|
if (&metadata($uri,'copyright') eq 'public') { return 'F'; } |
|
} |
|
|
my $thisallowed=''; |
my $thisallowed=''; |
my $statecond=0; |
my $statecond=0; |
my $courseprivid=''; |
my $courseprivid=''; |
Line 1209 sub allowed {
|
Line 1266 sub allowed {
|
map { |
map { |
if ($_=~/^httpref\..*\*/) { |
if ($_=~/^httpref\..*\*/) { |
my $pattern=$_; |
my $pattern=$_; |
|
$pattern=~s/^httpref\.\/res\///; |
$pattern=~s/\*/\[\^\/\]\+/g; |
$pattern=~s/\*/\[\^\/\]\+/g; |
$pattern=~s/\//\\\//g; |
$pattern=~s/\//\\\//g; |
if ($orguri=~/$pattern/) { |
if ($orguri=~/$pattern/) { |
Line 1575 sub modifystudent {
|
Line 1633 sub modifystudent {
|
return 'error: no such user'; |
return 'error: no such user'; |
} |
} |
# -------------------------------------------------- Add student to course list |
# -------------------------------------------------- Add student to course list |
my $reply=critical('put:'.$ENV{'course.'.$cid.'.domain'}.':'. |
$reply=critical('put:'.$ENV{'course.'.$cid.'.domain'}.':'. |
$ENV{'course.'.$cid.'.num'}.':classlist:'. |
$ENV{'course.'.$cid.'.num'}.':classlist:'. |
&escape($uname.':'.$udom).'='. |
&escape($uname.':'.$udom).'='. |
&escape($end.':'.$start), |
&escape($end.':'.$start), |
Line 1640 sub createcourse {
|
Line 1698 sub createcourse {
|
my $reply=&reply('encrypt:makeuser:'.$udom.':'.$uname.':none::', |
my $reply=&reply('encrypt:makeuser:'.$udom.':'.$uname.':none::', |
$ENV{'user.home'}); |
$ENV{'user.home'}); |
unless ($reply eq 'ok') { return 'error: '.$reply; } |
unless ($reply eq 'ok') { return 'error: '.$reply; } |
my $uhome=&homeserver($uname,$udom); |
$uhome=&homeserver($uname,$udom); |
if (($uhome eq '') || ($uhome eq 'no_host')) { |
if (($uhome eq '') || ($uhome eq 'no_host')) { |
return 'error: no such course'; |
return 'error: no such course'; |
} |
} |
Line 2266 sub unescape {
|
Line 2324 sub unescape {
|
# ================================================================ Main Program |
# ================================================================ Main Program |
|
|
sub BEGIN { |
sub BEGIN { |
if ($readit ne 'done') { |
unless ($readit) { |
# ------------------------------------------------------------ Read access.conf |
# ------------------------------------------------------------ Read access.conf |
{ |
{ |
my $config=Apache::File->new("/etc/httpd/conf/access.conf"); |
my $config=Apache::File->new("/etc/httpd/conf/access.conf"); |
Line 2311 if ($readit ne 'done') {
|
Line 2369 if ($readit ne 'done') {
|
|
|
while (my $configline=<$config>) { |
while (my $configline=<$config>) { |
chomp($configline); |
chomp($configline); |
|
if ($configline) { |
my ($role,$perm)=split(/ /,$configline); |
my ($role,$perm)=split(/ /,$configline); |
if ($perm ne '') { $pr{$role}=$perm; } |
if ($perm ne '') { $pr{$role}=$perm; } |
|
} |
} |
} |
} |
} |
|
|
Line 2322 if ($readit ne 'done') {
|
Line 2382 if ($readit ne 'done') {
|
|
|
while (my $configline=<$config>) { |
while (my $configline=<$config>) { |
chomp($configline); |
chomp($configline); |
|
if ($configline) { |
my ($short,$plain)=split(/:/,$configline); |
my ($short,$plain)=split(/:/,$configline); |
if ($plain ne '') { $prp{$short}=$plain; } |
if ($plain ne '') { $prp{$short}=$plain; } |
|
} |
} |
} |
} |
} |
|
|