Diff for /loncom/auth/lonacc.pm between versions 1.159.2.8.2.11 and 1.166

version 1.159.2.8.2.11, 2021/02/10 11:37:49 version 1.166, 2017/04/04 02:59:40
Line 159  sub get_posted_cgi { Line 159  sub get_posted_cgi {
                         if (length($value) == 1) {                          if (length($value) == 1) {
                             $value=~s/[\r\n]$//;                              $value=~s/[\r\n]$//;
                         }                          }
                     } elsif ($fname =~ /\.(xls|doc|ppt)(x|m)$/i) {                      } elsif ($fname =~ /\.(xls|doc|ppt)x$/i) {
                         $value=~s/[\r\n]$//;                          $value=~s/[\r\n]$//;
                     }                      }
                     if (ref($fields) eq 'ARRAY') {                      if (ref($fields) eq 'ARRAY') {
Line 202  sub get_posted_cgi { Line 202  sub get_posted_cgi {
  $fname='';   $fname='';
  $fmime='';   $fmime='';
     }      }
                       if ($i<$#lines && $lines[$i+1]=~/^Content\-Type\:\s*([\w\-\/]+)/i) {
                           # TODO: something with $1 !
                           $i++;
                       }
                       if ($i<$#lines && $lines[$i+1]=~/^Content\-transfer\-encoding\:\s*([\w\-\/]+)/i) {
                           # TODO: something with $1 !
                           $i++;
                       }
     $i++;      $i++;
  }   }
     } else {      } else {
Line 281  sub upload_size_allowed { Line 289  sub upload_size_allowed {
 sub sso_login {  sub sso_login {
     my ($r,$handle,$username) = @_;      my ($r,$handle,$username) = @_;
   
       my $lonidsdir=$r->dir_config('lonIDsDir');
     if (($r->user eq '') || ($username ne '') || ($r->user eq 'public:public') ||      if (($r->user eq '') || ($username ne '') || ($r->user eq 'public:public') ||
         (defined($env{'user.name'}) && (defined($env{'user.domain'}))          (defined($env{'user.name'}) && (defined($env{'user.domain'}))
   && ($handle ne ''))) {    && ($handle ne ''))) {
Line 332  sub sso_login { Line 341  sub sso_login {
             ($is_balancer,$otherserver) =              ($is_balancer,$otherserver) =
                 &Apache::lonnet::check_loadbalancing($user,$domain,'login');                  &Apache::lonnet::check_loadbalancing($user,$domain,'login');
             if ($is_balancer) {              if ($is_balancer) {
                 # Check if browser sent a LON-CAPA load balancer cookie (and this is a balancer)                  if ($otherserver eq '') {
                 my ($found_server,$balancer_cookie) = &Apache::lonnet::check_for_balancer_cookie($r);  
                 if (($found_server) && ($balancer_cookie =~ /^\Q$domain\E_\Q$user\E_/)) {  
                     $otherserver = $found_server;  
                 } elsif ($otherserver eq '') {  
                     my $lowest_load;                      my $lowest_load;
                     ($otherserver,undef,undef,undef,$lowest_load) = &Apache::lonnet::choose_server($domain);                      ($otherserver,undef,undef,undef,$lowest_load) = &Apache::lonnet::choose_server($domain);
                     if ($lowest_load > 100) {                      if ($lowest_load > 100) {
                         $otherserver = &Apache::lonnet::spareserver($lowest_load,$lowest_load,1,$domain);                          $otherserver = &Apache::lonnet::spareserver($lowest_load,$lowest_load,1,$domain);
                     }                      }
                     if ($otherserver ne '') {                  }
                         my @hosts = &Apache::lonnet::current_machine_ids();                  if ($otherserver ne '') {
                         if (grep(/^\Q$otherserver\E$/,@hosts)) {                      my @hosts = &Apache::lonnet::current_machine_ids();
                             $hosthere = $otherserver;                      if (grep(/^\Q$otherserver\E$/,@hosts)) {
                         }                          $hosthere = $otherserver;
                     }                      }
                 }                  }
             }              }
Line 355  sub sso_login { Line 360  sub sso_login {
     # login but immediately go to switch server to find us a new       # login but immediately go to switch server to find us a new 
     # machine      # machine
     &Apache::lonauth::success($r,$user,$domain,$home,'noredirect');      &Apache::lonauth::success($r,$user,$domain,$home,'noredirect');
             foreach my $item (keys(%form)) {  
                 $env{'form.'.$item} = $form{$item};  
             }  
             unless ($form{'symb'}) {  
                 unless (($r->uri eq '/adm/roles') || ($r->uri eq '/adm/sso')) {  
                     $env{'form.origurl'} = $r->uri;  
                 }  
             }  
             $env{'request.sso.login'} = 1;              $env{'request.sso.login'} = 1;
             if (defined($r->dir_config("lonSSOReloginServer"))) {              if (defined($r->dir_config("lonSSOReloginServer"))) {
                 $env{'request.sso.reloginserver'} =                  $env{'request.sso.reloginserver'} =
Line 377  sub sso_login { Line 374  sub sso_login {
  } else {   } else {
     # need to login them in, so generate the need data that      # need to login them in, so generate the need data that
     # migrate expects to do login      # migrate expects to do login
             my $ip = &Apache::lonnet::get_requestor_ip($r);      my $ip = $r->get_remote_host();
     my %info=('ip'        => $ip,      my %info=('ip'        => $ip,
       'domain'    => $domain,        'domain'    => $domain,
       'username'  => $user,        'username'  => $user,
Line 509  sub handler { Line 506  sub handler {
                 my $preserved;                  my $preserved;
                 foreach my $pair (split(/&/,$query)) {                  foreach my $pair (split(/&/,$query)) {
                     my ($name, $value) = split(/=/,$pair);                      my ($name, $value) = split(/=/,$pair);
                     unless (($name eq 'symb') || ($name eq 'usehttp')) {                      unless ($name eq 'symb') {
                         $preserved .= $pair.'&';                          $preserved .= $pair.'&';
                     }                      }
                     if (($env{'request.course.id'}) && ($name eq 'folderpath')) {                      if (($env{'request.course.id'}) && ($name eq 'folderpath')) {
Line 528  sub handler { Line 525  sub handler {
             }              }
         } elsif ($env{'request.course.id'} &&          } elsif ($env{'request.course.id'} &&
                  (($requrl =~ m{^/adm/$match_domain/$match_username/aboutme$}) ||                   (($requrl =~ m{^/adm/$match_domain/$match_username/aboutme$}) ||
                   ($requrl =~ m{^/public/$cdom/$cnum/syllabus$}))) {                    ($requrl eq "/public/$cdom/$cnum/syllabus") ||
                     ($requrl =~ m{^/adm/$cdom/$cnum/\d+/exttools?$}))) {
             my $query = $r->args;              my $query = $r->args;
             if ($query) {              if ($query) {
                 foreach my $pair (split(/&/,$query)) {                  foreach my $pair (split(/&/,$query)) {
Line 537  sub handler { Line 535  sub handler {
                         if ($value =~ /^supplemental/) {                          if ($value =~ /^supplemental/) {
                             $suppext = 1;                              $suppext = 1;
                         }                          }
                         last;  
                     }                      }
                 }                  }
             }              }
Line 550  sub handler { Line 547  sub handler {
             my $lonhost = &Apache::lonnet::host_from_dns($hostname);              my $lonhost = &Apache::lonnet::host_from_dns($hostname);
             if ($lonhost) {              if ($lonhost) {
                 my $actual = &Apache::lonnet::absolute_url($hostname);                  my $actual = &Apache::lonnet::absolute_url($hostname);
                 my $exphostname = &Apache::lonnet::hostname($lonhost);  
                 my $expected = $Apache::lonnet::protocol{$lonhost}.'://'.$hostname;                  my $expected = $Apache::lonnet::protocol{$lonhost}.'://'.$hostname;
                 unless ($actual eq $expected) {                  unless ($actual eq $expected) {
                     $env{'request.use_absolute'} = $expected;                      $env{'request.use_absolute'} = $expected;
Line 566  sub handler { Line 562  sub handler {
         my $checkexempt;          my $checkexempt;
         if ($env{'user.loadbalexempt'} eq $r->dir_config('lonHostID')) {          if ($env{'user.loadbalexempt'} eq $r->dir_config('lonHostID')) {
             if ($env{'user.loadbalcheck.time'} + 600 > time) {              if ($env{'user.loadbalcheck.time'} + 600 > time) {
                 $checkexempt = 1;                  $checkexempt = 1;    
             }              }
         }          }
         if ($env{'user.noloadbalance'} eq $r->dir_config('lonHostID')) {          if ($env{'user.noloadbalance'} eq $r->dir_config('lonHostID')) {
             $checkexempt = 1;              $checkexempt = 1;
         }          }
         unless (($checkexempt) || (($requrl eq '/adm/switchserver') && (!$r->is_initial_req()))) {          unless ($checkexempt) {
             ($is_balancer,$otherserver) =              ($is_balancer,$otherserver) =
                 &Apache::lonnet::check_loadbalancing($env{'user.name'},                  &Apache::lonnet::check_loadbalancing($env{'user.name'},
                                                      $env{'user.domain'});                                                       $env{'user.domain'});
             if ($is_balancer) {  
                 # Check if browser sent a LON-CAPA load balancer cookie (and this is a balancer)  
                 my ($found_server,$balancer_cookie) = &Apache::lonnet::check_for_balancer_cookie($r);  
                 if (($found_server) && ($balancer_cookie =~ /^\Q$env{'user.domain'}\E_\Q$env{'user.name'}\E_/)) {  
                     $otherserver = $found_server;  
                 }  
                 unless ($requrl eq '/adm/switchserver') {  
                     $r->set_handlers('PerlResponseHandler'=>  
                                      [\&Apache::switchserver::handler]);  
                 }  
                 if ($otherserver ne '') {  
                     $env{'form.otherserver'} = $otherserver;  
                 }  
                 unless (($env{'form.origurl'}) || ($r->uri eq '/adm/roles') ||  
                         ($r->uri eq '/adm/switchserver') || ($r->uri eq '/adm/sso')) {  
                     $env{'form.origurl'} = $r->uri;  
                 }  
             }  
         }          }
         if ($requrl=~m{^/+tiny/+$match_domain/+\w+$}) {          if ($is_balancer) {
             if ($env{'user.name'} eq 'public' &&              $r->set_handlers('PerlResponseHandler'=>
                 $env{'user.domain'} eq 'public') {                               [\&Apache::switchserver::handler]);
                 $env{'request.firsturl'}=$requrl;              if ($otherserver ne '') {
                 return FORBIDDEN;                  $env{'form.otherserver'} = $otherserver;
             } else {              }
                 return OK;              unless (($env{'form.origurl'}) || ($r->uri eq '/adm/roles') ||
                       ($r->uri eq '/adm/switchserver') || ($r->uri eq '/adm/sso')) {
                   $env{'form.origurl'} = $r->uri;
             }              }
         }          }
   
 # ---------------------------------------------------------------- Check access  # ---------------------------------------------------------------- Check access
  my $now = time;   my $now = time;
         my ($check_symb,$check_access,$check_block,$access,$poss_symb);   if ($requrl !~ m{^/(?:adm|public|prtspool)/}
  if ($requrl !~ m{^/(?:adm|public|(?:prt|zip)spool)/}  
     || $requrl =~ /^\/adm\/.*\/(smppg|bulletinboard)(\?|$ )/x) {      || $requrl =~ /^\/adm\/.*\/(smppg|bulletinboard)(\?|$ )/x) {
             $check_access = 1;      my $access=&Apache::lonnet::allowed('bre',$requrl);
         }  
         if ((!$check_access) && ($env{'request.course.id'})) {  
             if (($requrl eq '/adm/viewclasslist') ||  
                 ($requrl =~ m{^(/adm/wrapper|)\Q/uploaded/$cdom/$cnum/docs/\E}) ||  
                 ($requrl =~ m{^/adm/.*/aboutme$}) ||  
                 ($requrl=~m{^/adm/coursedocs/showdoc/}) ||  
                 ($requrl=~m{^(/adm/wrapper|)/adm/$cdom/$cnum/\d+/ext\.tool$})) {  
                 $check_block = 1;  
             }  
         }  
         if (($env{'request.course.id'}) && (!$suppext)) {  
             $requrl=~/\.(\w+)$/;  
             if ((&Apache::loncommon::fileembstyle($1) eq 'ssi') ||  
                 ($requrl=~/^\/adm\/.*\/(aboutme|smppg|bulletinboard)(\?|$ )/x) ||  
                 ($requrl=~/^\/adm\/wrapper\//) ||  
                 ($requrl=~m|^/adm/coursedocs/showdoc/|) ||  
                 ($requrl=~m|\.problem/smpedit$|) ||  
                 ($requrl=~/^\/public\/.*\/syllabus$/) ||  
                 ($requrl=~/^\/adm\/(viewclasslist|navmaps)$/) ||  
                 ($requrl=~/^\/adm\/.*\/aboutme\/portfolio(\?|$)/) ||  
                 ($requrl=~m{^/adm/$cdom/$cnum/\d+/ext\.tool$})) {  
                 $check_symb = 1;  
             }  
         }  
         if (($check_access) || ($check_block)) {  
             if ($check_symb) {  
                 if ($env{'form.symb'}) {  
                     $poss_symb=&Apache::lonnet::symbclean($env{'form.symb'});  
                 } elsif (($env{'request.course.id'}) && ($r->args ne '')) {  
                     my $query = $r->args;  
                     foreach my $pair (split(/&/,$query)) {  
                         my ($name, $value) = split(/=/,$pair);  
                         $name = &unescape($name);  
                         $value =~ tr/+/ /;  
                         $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;  
                         if ($name eq 'symb') {  
                             $poss_symb = &Apache::lonnet::symbclean($value);  
                             last;  
                         }  
                     }  
                 }  
                 if ($poss_symb) {  
                     my ($possmap,$resid,$url)=&Apache::lonnet::decode_symb($poss_symb);  
                     $url = &Apache::lonnet::clutter($url);  
                     my $toplevelmap = $env{'course.'.$env{'request.course.id'}.'.url'};  
                     unless (($url eq $requrl) && (($possmap eq $toplevelmap) ||  
                                                   (&Apache::lonnet::is_on_map($possmap)))) {  
                         undef($poss_symb);  
                     }  
                     if ($poss_symb) {  
                         if ((!$env{'request.role.adv'}) && ($env{'acc.randomout'}) &&  
                             ($env{'acc.randomout'}=~/\&\Q$poss_symb\E\&/)) {  
                             undef($poss_symb);  
                         }  
                     }  
                 }  
                 if ($poss_symb) {  
                     $access=&Apache::lonnet::allowed('bre',$requrl,$poss_symb);  
                 } else {  
                     $access=&Apache::lonnet::allowed('bre',$requrl,'','','','',1);  
                 }  
             } else {  
                 $access=&Apache::lonnet::allowed('bre',$requrl);  
             }  
         }  
         if ($check_block) {  
             if ($access eq 'B') {  
                 if ($poss_symb) {  
                     if (&Apache::lonnet::symbverify($poss_symb,$requrl)) {  
                         $env{'request.symb'} = $poss_symb;  
                     }  
                 }  
                 &Apache::blockedaccess::setup_handler($r);  
                 return OK;  
             }  
         } elsif ($check_access) {  
             if ($handle eq '') {              if ($handle eq '') {
                 unless ($access eq 'F') {                  unless ($access eq 'F') {
                     if ($requrl =~ m{^/res/$match_domain/$match_username/}) {                      if ($requrl =~ m{^/res/$match_domain/$match_username/}) {
Line 703  sub handler { Line 606  sub handler {
  return OK;   return OK;
     }      }
             if ($access eq 'B') {              if ($access eq 'B') {
                 if ($poss_symb) {  
                     if (&Apache::lonnet::symbverify($poss_symb,$requrl)) {  
                         $env{'request.symb'} = $poss_symb;  
                     }  
                 }  
                 &Apache::blockedaccess::setup_handler($r);                  &Apache::blockedaccess::setup_handler($r);
                 return OK;                  return OK;
             }              }
Line 727  sub handler { Line 625  sub handler {
                         }                          }
                     }                      }
                 } elsif (($handle =~ /^publicuser_\d+$/) && (&Apache::lonnet::is_portfolio_url($requrl))) {                  } elsif (($handle =~ /^publicuser_\d+$/) && (&Apache::lonnet::is_portfolio_url($requrl))) {
                     my $clientip = &Apache::lonnet::get_requestor_ip($r);                      my $clientip = $r->get_remote_host();
                     if (&Apache::lonnet::allowed('bre',$requrl,undef,undef,$clientip) ne 'F') {                      if (&Apache::lonnet::allowed('bre',$requrl,undef,undef,$clientip) 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 758  sub handler { Line 656  sub handler {
     $env{'user.domain'} eq 'public' &&      $env{'user.domain'} eq 'public' &&
     $requrl !~ m{^/+(res|public|uploaded)/} &&      $requrl !~ m{^/+(res|public|uploaded)/} &&
     $requrl !~ m{^/adm/[^/]+/[^/]+/aboutme/portfolio$ }x &&      $requrl !~ m{^/adm/[^/]+/[^/]+/aboutme/portfolio$ }x &&
             $requrl !~ m{^/adm/blockingstatus/.*$} &&          $requrl !~ m{^/adm/blockingstatus/.*$} &&
     $requrl !~ m{^/+adm/(help|logout|restrictedaccess|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;
Line 767  sub handler { Line 665  sub handler {
 # ------------------------------------------------------------- This is allowed  # ------------------------------------------------------------- This is allowed
  if ($env{'request.course.id'}) {   if ($env{'request.course.id'}) {
     &Apache::lonnet::countacc($requrl);      &Apache::lonnet::countacc($requrl);
       $requrl=~/\.(\w+)$/;
             my $query=$r->args;              my $query=$r->args;
             if ($check_symb) {      if ((&Apache::loncommon::fileembstyle($1) eq 'ssi') ||
    ($requrl=~/^\/adm\/.*\/(aboutme|smppg|bulletinboard)(\?|$ )/x) ||
    ($requrl=~/^\/adm\/wrapper\//) ||
    ($requrl=~m|^/adm/coursedocs/showdoc/|) ||
    ($requrl=~m|\.problem/smpedit$|) ||
    ($requrl=~/^\/public\/.*\/syllabus$/) ||
                   ($requrl=~/^\/adm\/(viewclasslist|navmaps)$/) ||
                   ($requrl=~/^\/adm\/.*\/aboutme\/portfolio(\?|$)/) ||
                   ($requrl=~m{^/adm/$cdom/$cnum/\d+/exttools?$})) {
 # ------------------------------------- This is serious stuff, get symb and log  # ------------------------------------- This is serious stuff, get symb and log
  my $symb;   my $symb;
  if ($query) {   if ($query) {
Line 776  sub handler { Line 683  sub handler {
  }   }
  if ($env{'form.symb'}) {   if ($env{'form.symb'}) {
     $symb=&Apache::lonnet::symbclean($env{'form.symb'});      $symb=&Apache::lonnet::symbclean($env{'form.symb'});
                     if (($requrl eq '/adm/navmaps') ||      if ($requrl =~ m|^/adm/wrapper/|
                         ($requrl =~ m{^/adm/wrapper/}) ||   || $requrl =~ m|^/adm/coursedocs/showdoc/|) {
                         ($requrl =~ m{^/adm/coursedocs/showdoc/})) {   my ($map,$mid,$murl)=&Apache::lonnet::decode_symb($symb);
                         unless (&Apache::lonnet::symbverify($symb,$requrl)) {   &Apache::lonnet::symblist($map,$murl => [$murl,$mid],
                             if (&Apache::lonnet::is_on_map($requrl)) {    'last_known' =>[$murl,$mid]);
                                 $symb = &Apache::lonnet::symbread($requrl);  
                                 unless (&Apache::lonnet::symbverify($symb,$requrl)) {  
                                     undef($symb);  
                                 }  
                             }  
                         }  
                         if ($symb) {  
                             if ($requrl eq '/adm/navmaps') {  
                                 my ($map,$mid,$murl)=&Apache::lonnet::decode_symb($symb);  
                                 &Apache::lonnet::symblist($map,$murl => [$murl,$mid]);  
                             } elsif (($requrl =~ m{^/adm/wrapper/}) ||  
                                      ($requrl =~ m{^/adm/coursedocs/showdoc/})) {  
                                 my ($map,$mid,$murl)=&Apache::lonnet::decode_symb($symb);  
                                 if ($map =~ /\.page$/) {  
                                     my $mapsymb = &Apache::lonnet::symbread($map);  
                                     ($map,$mid,$murl)=&Apache::lonnet::decode_symb($mapsymb);  
                                 }  
                                 &Apache::lonnet::symblist($map,$murl => [$murl,$mid],  
                                                           'last_known' =>[$murl,$mid]);  
                             }  
                         }  
     } elsif ((&Apache::lonnet::symbverify($symb,$requrl)) ||      } elsif ((&Apache::lonnet::symbverify($symb,$requrl)) ||
      (($requrl=~m|(.*)/smpedit$|) &&       (($requrl=~m|(.*)/smpedit$|) &&
       &Apache::lonnet::symbverify($symb,$1)) ||        &Apache::lonnet::symbverify($symb,$1)) ||
                              (($requrl=~m|(.*/aboutme)/portfolio$|) &&                               (($requrl=~m|(.*/aboutme)/portfolio$|) &&
                               &Apache::lonnet::symbverify($symb,$1))) {                                &Apache::lonnet::symbverify($symb,$1))) {
  my ($map,$mid,$murl)=&Apache::lonnet::decode_symb($symb);   my ($map,$mid,$murl)=&Apache::lonnet::decode_symb($symb);
                         if (($map =~ /\.page$/) && ($requrl !~ /\.page$/)) {  
                             my $mapsymb = &Apache::lonnet::symbread($map);  
                             ($map,$mid,$murl)=&Apache::lonnet::decode_symb($mapsymb);  
                         }  
  &Apache::lonnet::symblist($map,$murl => [$murl,$mid],   &Apache::lonnet::symblist($map,$murl => [$murl,$mid],
   'last_known' =>[$murl,$mid]);    'last_known' =>[$murl,$mid]);
     } else {      } else {
Line 825  sub handler { Line 707  sub handler {
                     if ($requrl=~m{^(/adm/.*/aboutme)/portfolio$}) {                      if ($requrl=~m{^(/adm/.*/aboutme)/portfolio$}) {
                         $requrl = $1;                          $requrl = $1;
                     }                      }
     $symb=&Apache::lonnet::symbread($requrl);                      unless ($suppext) {
                     if (&Apache::lonnet::is_on_map($requrl) && $symb) {          $symb=&Apache::lonnet::symbread($requrl);
                         my ($encstate,$invalidsymb);          if (&Apache::lonnet::is_on_map($requrl) && $symb &&
                         unless (&Apache::lonnet::symbverify($symb,$requrl,\$encstate)) {      !&Apache::lonnet::symbverify($symb,$requrl)) {
                             $invalidsymb = 1;      $r->log_reason('Invalid symb for '.$requrl.': '.$symb);
                             #      $env{'user.error.msg'}=
                             # If $env{'request.enc'} inconsistent with encryption expected for $symb          "$requrl:bre:1:1:Invalid Access";
                             # retrieved by lonnet::symbread(), call again to check for an instance of      return HTTP_NOT_ACCEPTABLE; 
                             # $requrl in the course for which expected encryption matches request.enc.          }
                             # If symb for different instance passes lonnet::symbverify(), use that as          if ($symb) {
                             # the symb for $requrl and call &Apache::lonnet::allowed() for that symb.      my ($map,$mid,$murl)=
                             # Report invalid symb if there is no other symb. Redirect to /adm/ambiguous          &Apache::lonnet::decode_symb($symb);
                             # if multiple possible symbs consistent with request.enc available for $requrl.      &Apache::lonnet::symblist($map,$murl =>[$murl,$mid],
                             #        'last_known' =>[$murl,$mid]);
                             if (($env{'request.enc'} && !$encstate) || (!$env{'request.enc'} && $encstate)) {          }
                                 my %possibles;  
                                 my $nocache = 1;  
                                 my $oldsymb = $symb;  
                                 $symb = &Apache::lonnet::symbread($requrl,'','','',\%possibles,$nocache);  
                                 if (($symb) && ($symb ne $oldsymb)) {  
                                     if (&Apache::lonnet::symbverify($symb,$requrl)) {  
                                         my $access=&Apache::lonnet::allowed('bre',$requrl,$symb);  
                                         if ($access eq 'B') {  
                                             $env{'request.symb'} = $symb;  
                                             &Apache::blockedaccess::setup_handler($r);  
                                             return OK;  
                                         } elsif (($access eq '2') || ($access eq 'F')) {  
                                             $invalidsymb = '';  
                                         }  
                                     }  
                                 } elsif (keys(%possibles) > 1) {  
                                     $r->internal_redirect('/adm/ambiguous');  
                                     return OK;  
                                 }  
                             }  
                             if ($invalidsymb) {  
                                 if ($requrl eq '/adm/navmaps') {  
                                     undef($symb);  
                                 } else {  
                                     $r->log_reason('Invalid symb for '.$requrl.': '.$symb);  
                                     $env{'user.error.msg'}=  
                                         "$requrl:bre:1:1:Invalid Access";  
                                     return HTTP_NOT_ACCEPTABLE;  
                                 }  
                             }  
                         }  
                     }  
     if ($symb) {  
  my ($map,$mid,$murl)=  
     &Apache::lonnet::decode_symb($symb);  
                         if ($requrl eq '/adm/navmaps') {  
                             &Apache::lonnet::symblist($map,$murl =>[$murl,$mid]);  
                         } else {  
                             if (($map =~ /\.page$/) && ($requrl !~ /\.page$/)) {  
                                 my $mapsymb = &Apache::lonnet::symbread($map);  
                                 ($map,$mid,$murl)=&Apache::lonnet::decode_symb($mapsymb);  
                             }  
                             &Apache::lonnet::symblist($map,$murl =>[$murl,$mid],  
                                                       'last_known' =>[$murl,$mid]);  
                         }  
     }      }
  }   }
  $env{'request.symb'}=$symb;   $env{'request.symb'}=$symb;
                 if (($env{'request.symbread.cached.'}) && ($env{'request.symbread.cached.'} ne $symb)) {  
                     $env{'request.symbread.cached.'} = $symb;  
                 }  
  &Apache::lonnet::courseacclog($symb);   &Apache::lonnet::courseacclog($symb);
     } else {      } else {
 # ------------------------------------------------------- This is other content  # ------------------------------------------------------- This is other content
Line 935  sub handler { Line 769  sub handler {
     }      }
 # ------------------------------------ See if this is a viewable portfolio file  # ------------------------------------ See if this is a viewable portfolio file
     if (&Apache::lonnet::is_portfolio_url($requrl)) {      if (&Apache::lonnet::is_portfolio_url($requrl)) {
         my $clientip = &Apache::lonnet::get_requestor_ip($r);          my $clientip = $r->get_remote_host();
  my $access=&Apache::lonnet::allowed('bre',$requrl,undef,undef,$clientip);          my $access=&Apache::lonnet::allowed('bre',$requrl,undef,undef,$clientip);
  if ($access eq 'A') {   if ($access eq 'A') {
     &Apache::restrictedaccess::setup_handler($r);      &Apache::restrictedaccess::setup_handler($r);
     return OK;      return OK;

Removed from v.1.159.2.8.2.11  
changed lines
  Added in v.1.166


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>
500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.