Diff for /loncom/auth/lonacc.pm between versions 1.145 and 1.153

version 1.145, 2013/09/29 00:49:24 version 1.153, 2014/01/30 12:15:12
Line 89  store attempted access Line 89  store attempted access
   
 =head1 NOTABLE SUBROUTINES  =head1 NOTABLE SUBROUTINES
   
 =over  
   
 =cut  =cut
   
   
Line 103  use Apache::lonnet; Line 101  use Apache::lonnet;
 use Apache::loncommon();  use Apache::loncommon();
 use Apache::lonlocal;  use Apache::lonlocal;
 use Apache::restrictedaccess();  use Apache::restrictedaccess();
 use Apache::blockedaccess();   use Apache::blockedaccess();
 use Fcntl qw(:flock);  use Fcntl qw(:flock);
 use LONCAPA qw(:DEFAULT :match);  use LONCAPA qw(:DEFAULT :match);
   
Line 230  sub get_posted_cgi { Line 228  sub get_posted_cgi {
   
 =pod  =pod
   
   =over
   
 =item upload_size_allowed()  =item upload_size_allowed()
   
  Perform size checks for file uploads to essayresponse items in course context.   Perform size checks for file uploads to essayresponse items in course context.
Line 264  sub upload_size_allowed { Line 264  sub upload_size_allowed {
 =item sso_login()  =item sso_login()
   
  handle the case of the single sign on user, at this point $r->user    handle the case of the single sign on user, at this point $r->user 
  will be set and valid now need to find the loncapa user info and possibly   will be set and valid; now need to find the loncapa user info, and possibly
  balance them   balance them. If $r->user() is set this means either it was either set by
  returns OK if it was a SSO and user was handled          SSO or by checkauthen.pm, if a valid cookie was found. The latter case can
         undef if not SSO or no means to hanle the user          be identified by the third arg ($usename), except when lonacc is called in 
           an internal redirect to /adm/switchserver (e.g., load-balancing following
           successful authentication) -- no cookie set yet.  For that particular case
           simply skip the call to sso_login(). 
   
    returns OK if it was SSO and user was handled.
           returns undef if not SSO or no means to handle the user.
                   
 =cut  =cut
   
 sub sso_login {  sub sso_login {
     my ($r,$handle) = @_;      my ($r,$handle,$username) = @_;
   
     my $lonidsdir=$r->dir_config('lonIDsDir');      my $lonidsdir=$r->dir_config('lonIDsDir');
     if (($r->user eq '') ||      if (($r->user eq '') || ($username ne '') ||
         (defined($env{'user.name'}) && (defined($env{'user.domain'}))          (defined($env{'user.name'}) && (defined($env{'user.domain'}))
   && ($handle ne ''))) {    && ($handle ne ''))) {
  # not an SSO case or already logged in   # not an SSO case or already logged in
Line 339  sub sso_login { Line 345  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 %info=('ip'        => $r->connection->remote_ip(),      my $ip;
       my $c = $r->connection;
       eval {
           $ip = $c->remote_ip();
       };
       if ($@) {
           $ip = $c->client_ip();
       }
       my %info=('ip'        => $ip,
       'domain'    => $domain,        'domain'    => $domain,
       'username'  => $user,        'username'  => $user,
       'server'    => $r->dir_config('lonHostID'),        'server'    => $r->dir_config('lonHostID'),
Line 350  sub sso_login { Line 364  sub sso_login {
                     $info{$item} = $form{$item};                      $info{$item} = $form{$item};
                 }                  }
             }              }
               unless ($info{'symb'}) {
                   unless (($r->uri eq '/adm/roles') || ($r->uri eq '/adm/sso')) {
                       $info{'origurl'} = $r->uri; 
                   }
               }
             if ($r->dir_config("ssodirecturl") == 1) {              if ($r->dir_config("ssodirecturl") == 1) {
                 $info{'origurl'} = $r->uri;                  $info{'origurl'} = $r->uri;
             }              }
Line 383  sub sso_login { Line 402  sub sso_login {
             }              }
         }          }
         if (grep(/^sso$/,@cancreate)) {          if (grep(/^sso$/,@cancreate)) {
             $r->internal_redirect('/adm/createaccount');              $r->set_handlers('PerlHandler'=>
                        [\&Apache::createaccount::handler]);
               $r->handler('perl-script');
         } else {          } else {
     $r->internal_redirect($r->dir_config('lonSSOUserUnknownRedirect'));      $r->internal_redirect($r->dir_config('lonSSOUserUnknownRedirect'));
               $r->set_handlers('PerlHandler'=> undef);
         }          }
  $r->set_handlers('PerlHandler'=> undef);  
  return OK;   return OK;
     }      }
     return undef;      return undef;
Line 396  sub sso_login { Line 417  sub sso_login {
 sub handler {  sub handler {
     my $r = shift;      my $r = shift;
     my $requrl=$r->uri;      my $requrl=$r->uri;
     if (&Apache::lonnet::is_domainimage($requrl)) {  
       if ($requrl =~ m{^/res/adm/pages/[^/]+\.(gif|png)$}) {
         return OK;          return OK;
     }      }
   
     if ($requrl =~ m{^/res/adm/pages/[^/]+\.(gif|png)$}) {      if (&Apache::lonnet::is_domainimage($requrl)) {
         return OK;          return OK;
     }      }
   
     my $handle = &Apache::lonnet::check_for_valid_session($r);      my %user;
       my $handle = &Apache::lonnet::check_for_valid_session($r,undef,\%user);
   
     my $result = &sso_login($r,$handle);      unless (($requrl eq '/adm/switchserver') && (!$r->is_initial_req())) {
     if (defined($result)) {          my $result = &sso_login($r,$handle,$user{'name'});
  return $result;          if (defined($result)) {
       return $result;
           }
     }      }
   
     my ($is_balancer,$otherserver);      my ($is_balancer,$otherserver);
   
     if ($handle eq '') {      if ($handle eq '') {
         unless (($requrl eq '/adm/switchserver') && (!$r->is_initial_req())) {          unless (($requrl eq '/adm/switchserver') && (!$r->is_initial_req())) {
     $r->log_reason("Cookie $handle not valid", $r->filename);      $r->log_reason("Cookie not valid", $r->filename);
         }          }
     } elsif ($handle ne '') {      } elsif ($handle ne '') {
   
Line 507  sub handler { Line 532  sub handler {
             if ($otherserver ne '') {              if ($otherserver ne '') {
                 $env{'form.otherserver'} = $otherserver;                  $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;
               }
         }          }
   
 # ---------------------------------------------------------------- Check access  # ---------------------------------------------------------------- Check access

Removed from v.1.145  
changed lines
  Added in v.1.153


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