Diff for /loncom/auth/lonacc.pm between versions 1.79 and 1.90

version 1.79, 2006/06/16 22:37:29 version 1.90, 2006/07/21 19:42:12
Line 35  use Apache::File; Line 35  use Apache::File;
 use Apache::lonnet;  use Apache::lonnet;
 use Apache::loncommon();  use Apache::loncommon();
 use Apache::lonlocal;  use Apache::lonlocal;
   use Apache::restrictedaccess();
 use CGI::Cookie();  use CGI::Cookie();
 use Fcntl qw(:flock);  use Fcntl qw(:flock);
   use LONCAPA;
   
 sub cleanup {  sub cleanup {
     my ($r)=@_;      my ($r)=@_;
Line 135  sub get_posted_cgi { Line 137  sub get_posted_cgi {
     $r->headers_in->unset('Content-length');      $r->headers_in->unset('Content-length');
 }  }
   
 sub portfolio_access {  
     my ($udom,$unum,$file_name,$group) = @_;  
     my $current_perms = &Apache::lonnet::get_portfile_permissions($udom,$unum);  
     my %access_controls = &Apache::lonnet::get_access_controls(  
                                              $current_perms,$group,$file_name);  
     my ($public);  
     my $now = time;  
     my $access_hash = $access_controls{$file_name};  
     if (ref($access_hash) eq 'HASH') {  
         foreach my $key (keys(%{$access_hash})) {  
             my ($num,$scope,$end,$start) = ($key =~ /^([^:]+):([a-z]+)_(\d*)_?(\d*)$/);  
             if ($start > $now) {  
                 next;  
             }  
             if ($end && $end<$now) {  
                 next;  
             }  
             if ($scope eq 'public') {  
                 $public = $key;  
                 last;  
             }  
         }  
         if ($public) {  
             return 'ok';  
         }  
     }  
     return;  
 }  
   
 sub handler {  sub handler {
     my $r = shift;      my $r = shift;
     my $requrl=$r->uri;      my $requrl=$r->uri;
Line 226  sub handler { Line 199  sub handler {
   
 # ---------------------------------------------------------------- Check access  # ---------------------------------------------------------------- Check access
             my $now = time;              my $now = time;
             if ($requrl =~ m#/+uploaded/([^/]+)/([^/]+)/portfolio(/.+)$#) {  
                 my $result = &portfolio_access($1,$2,$3);  
                 if ($result eq 'ok') {  
                     return OK;  
                 }  
             } elsif ($requrl =~ m#/+uploaded/([^/]+)/([^/]+)/groups/([^/]+)/portfolio/(.+)$#) {  
                 my $result = &portfolio_access($1,$2,$4.'/'.$3,$3);  
                 if ($result eq 'ok') {  
                     return OK;  
                 }  
             }  
             if ($requrl!~/^\/adm|public|prtspool\//) {              if ($requrl!~/^\/adm|public|prtspool\//) {
  my $access=&Apache::lonnet::allowed('bre',$requrl);   my $access=&Apache::lonnet::allowed('bre',$requrl);
                 if ($access eq '1') {                  if ($access eq '1') {
    $env{'user.error.msg'}="$requrl:bre:0:0:Choose Course";     $env{'user.error.msg'}="$requrl:bre:0:0:Choose Course";
            return HTTP_NOT_ACCEPTABLE;              return HTTP_NOT_ACCEPTABLE; 
                 }                  }
    if ($access eq 'A') {
       &Apache::restrictedaccess::setup_handler($r);
       return OK;
                   }
                 if (($access ne '2') && ($access ne 'F')) {                  if (($access ne '2') && ($access ne 'F')) {
    $env{'user.error.msg'}="$requrl:bre:1:1:Access Denied";     $env{'user.error.msg'}="$requrl:bre:1:1:Access Denied";
            return HTTP_NOT_ACCEPTABLE;              return HTTP_NOT_ACCEPTABLE; 
Line 258  sub handler { Line 224  sub handler {
     }      }
     if ($env{'user.name'} eq 'public' &&       if ($env{'user.name'} eq 'public' && 
  $env{'user.domain'} eq 'public' &&   $env{'user.domain'} eq 'public' &&
  $requrl !~ m{^/+(res|public)/} &&   $requrl !~ m{^/+(res|public|uploaded)/} &&
  $requrl !~ m{^/+adm/(help|logout|randomlabel\.png)}) {   $requrl !~ m{^/+adm/(help|logout|restrictedaccess|randomlabel\.png)}) {
  $env{'request.querystring'}=$r->args;   $env{'request.querystring'}=$r->args;
  $env{'request.firsturl'}=$requrl;   $env{'request.firsturl'}=$requrl;
  return FORBIDDEN;   return FORBIDDEN;
Line 327  sub handler { Line 293  sub handler {
         } else {           } else { 
             $r->log_reason("Cookie $handle not valid", $r->filename);               $r->log_reason("Cookie $handle not valid", $r->filename); 
         }          }
     }   }
   
 # -------------------------------------------- See if this is a public resource  # -------------------------------------------- See if this is a public resource
     if ($requrl=~m|^/public/|      if ($requrl=~m|^/public/|
Line 347  sub handler { Line 313  sub handler {
         return OK;          return OK;
     }      }
     if ($requrl=~m|^/+adm/+help/+|) {      if ($requrl=~m|^/+adm/+help/+|) {
  return OK;    return OK;
     }      }
 # ------------------------------------- See if this is a viewable portfolio file  # ------------------------------------ See if this is a viewable portfolio file
     if ($requrl =~ m#/+uploaded/([^/]+)/([^/]+)/portfolio(/.+)$#) {      if (&Apache::lonnet::is_portfolio_url($requrl)) {
         my $result = &portfolio_access($1,$2,$3);   my $access=&Apache::lonnet::allowed('bre',$requrl);
         if ($result eq 'ok') {   if ($access eq 'A') {
             return OK;      &Apache::restrictedaccess::setup_handler($r);
         }      return OK;
     } elsif ($requrl =~ m#/+uploaded/([^/]+)/([^/]+)/groups/([^/]+)/portfolio/(.+)$#) {   }
         my $result = &portfolio_access($1,$2,$4.'/'.$3,$3);   if (($access ne '2') && ($access ne 'F')) {
         if ($result eq 'ok') {      $env{'user.error.msg'}="$requrl:bre:1:1:Access Denied";
             return OK;      return HTTP_NOT_ACCEPTABLE;
         }   }
     }      }
   
 # -------------------------------------------------------------- Not authorized  # -------------------------------------------------------------- Not authorized
     $requrl=~/\.(\w+)$/;      $requrl=~/\.(\w+)$/;
 #    if ((&Apache::loncommon::fileembstyle($1) eq 'ssi') ||  #    if ((&Apache::loncommon::fileembstyle($1) eq 'ssi') ||

Removed from v.1.79  
changed lines
  Added in v.1.90


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>