--- loncom/auth/lonacc.pm 2003/09/16 18:15:43 1.47 +++ loncom/auth/lonacc.pm 2004/12/28 20:18:38 1.57 @@ -1,7 +1,7 @@ # The LearningOnline Network # Cookie Based Access Handler # -# $Id: lonacc.pm,v 1.47 2003/09/16 18:15:43 www Exp $ +# $Id: lonacc.pm,v 1.57 2004/12/28 20:18:38 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -66,17 +66,17 @@ sub handler { # --------------------------------------------------------- Initialize Language - &Apache::lonlocal::get_language_handle(); + &Apache::lonlocal::get_language_handle($r); # -------------------------------------------------------------- Resource State - if ($requrl=~/^\/res\//) { + if ($requrl=~/^\/+(res|uploaded)\//) { $ENV{'request.state'} = "published"; } else { $ENV{'request.state'} = 'unknown'; } $ENV{'request.filename'} = $r->filename; - + $ENV{'request.noversionuri'} = &Apache::lonnet::deversion($requrl); # -------------------------------------------------------- Load POST parameters &Apache::loncommon::get_posted_cgi($r); @@ -109,6 +109,7 @@ sub handler { if ((&Apache::loncommon::fileembstyle($1) eq 'ssi') || ($requrl=~/^\/adm\/.*\/(aboutme|navmaps|smppg|bulletinboard)(\?|$)/) || ($requrl=~/^\/adm\/wrapper\//) || + ($requrl=~m|\.problem/smpedit$|) || ($requrl=~/^\/public\/.*\/syllabus$/)) { # ------------------------------------- This is serious stuff, get symb and log my $query=$r->args; @@ -118,8 +119,14 @@ sub handler { } if ($ENV{'form.symb'}) { $symb=&Apache::lonnet::symbclean($ENV{'form.symb'}); - if (&Apache::lonnet::symbverify($symb,$requrl)) { - my ($map,$mid,$murl)=split(/\_\_\_/,$symb); + if ($requrl =~ m|^/adm/wrapper/|) { + my ($map,$mid,$murl)=&Apache::lonnet::decode_symb($symb); + &Apache::lonnet::symblist($map,$murl => $mid, + 'last_known' => $murl); + } elsif ((&Apache::lonnet::symbverify($symb,$requrl)) || + (($requrl=~m|(.*)/smpedit$|) && + &Apache::lonnet::symbverify($symb,$1))) { + my ($map,$mid,$murl)=&Apache::lonnet::decode_symb($symb); &Apache::lonnet::symblist($map,$murl => $mid, 'last_known' => $murl); } else { @@ -131,6 +138,14 @@ sub handler { } } else { $symb=&Apache::lonnet::symbread($requrl); + if (&Apache::lonnet::is_on_map($requrl) && + !&Apache::lonnet::symbverify($symb,$requrl)) { + $r->log_reason('Invalid symb for '.$requrl.': '. + $symb); + $ENV{'user.error.msg'}= + "$requrl:bre:1:1:Invalid Access"; + return HTTP_NOT_ACCEPTABLE; + } my ($map,$mid,$murl)=split(/\_\_\_/,$symb); &Apache::lonnet::symblist($map,$murl => $mid, 'last_known' => $murl);