Diff for /loncom/auth/lonacc.pm between versions 1.148 and 1.154

version 1.148, 2013/12/13 01:41:08 version 1.154, 2014/03/10 02:07:01
Line 160  sub get_posted_cgi { Line 160  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$/i) {
                           $value=~s/[\r\n]$//;
                     }                      }
                     if (ref($fields) eq 'ARRAY') {                      if (ref($fields) eq 'ARRAY') {
                         next if (!grep(/^\Q$name\E$/,@{$fields}));                          next if (!grep(/^\Q$name\E$/,@{$fields}));
Line 264  sub upload_size_allowed { Line 266  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 valia;d 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. If Apache >= 2.4, $r->user() will also have been set so    balance them. If $r->user() is set this means either it was either set by
         $curruser is checked, and if null, this is an SSO case.          SSO or by checkauthen.pm, if a valid cookie was found. The latter case can
  returns OK if it was a SSO and user was handled          be identified by the third arg ($usename), except when lonacc is called in 
         undef if not SSO or no means to hanle the user          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,$curruser) = @_;      my ($r,$handle,$username) = @_;
   
     my $lonidsdir=$r->dir_config('lonIDsDir');      my $lonidsdir=$r->dir_config('lonIDsDir');
     if (($r->user eq '') || ($curruser ne '') ||      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 359  sub sso_login { Line 366  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 392  sub sso_login { Line 404  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 405  sub sso_login { Line 419  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 $curruser;      my %user;
     my $handle = &Apache::lonnet::check_for_valid_session($r,undef,\$curruser);      my $handle = &Apache::lonnet::check_for_valid_session($r,undef,\%user);
   
     my $result = &sso_login($r,$handle,$curruser);      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 517  sub handler { Line 534  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.148  
changed lines
  Added in v.1.154


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