Diff for /loncom/auth/lonacc.pm between versions 1.92 and 1.95

version 1.92, 2006/08/08 17:20:15 version 1.95, 2006/08/30 21:48:51
Line 137  sub get_posted_cgi { Line 137  sub get_posted_cgi {
     $r->headers_in->unset('Content-length');      $r->headers_in->unset('Content-length');
 }  }
   
   # 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
   # balance them
   # returns OK if it was a SSO and user was handled
   #         undef if not SSO or no means to hanle the user
   sub sso_login {
       my ($r,$lonid,$handle) = @_;
   
       my $lonidsdir=$r->dir_config('lonIDsDir');
       if (!($r->user 
     && (!defined($env{'user.name'}) && !defined($env{'user.domain'}))
     && (!$lonid || !-e "$lonidsdir/$handle.id" || $handle eq ''))) {
    # not an SSO case or already logged in
    return undef;
       }
   
       my $domain = $r->dir_config('lonDefDomain');
       my $home=&Apache::lonnet::homeserver($r->user,$domain);
       if ($home !~ /(con_lost|no_host|no_such_host)/) {
    if ($r->dir_config("lonBalancer") eq 'yes') {
       # login but immeaditly go to switch server to find us a new 
       # machine
       &Apache::lonauth::success($r,$r->user,$domain,$home,'noredirect');
       $r->internal_redirect('/adm/switchserver');
    } else {
       # need to login them in, so generate the need data that
       # migrate expects to do login
       my %info=('ip'        => $r->connection->remote_ip(),
         'domain'    => $domain,
         'username'  => $r->user,
         'server'    => $r->dir_config('lonHostID'),
         'sso.login' => 1
         );
       my $token = 
    &Apache::lonnet::tmpput(\%info,
    $r->dir_config('lonHostID'));
       $env{'form.token'} = $token;
       $r->internal_redirect('/adm/migrateuser');
    }
    return OK;
       } elsif (defined($r->dir_config('lonSSOUserUnkownRedirect'))) {
    $r->internal_redirect($r->dir_config('lonSSOUserUnkownRedirect'));
    return OK;
       }
       return undef;
   }
   
 sub handler {  sub handler {
     my $r = shift;      my $r = shift;
     my $requrl=$r->uri;      my $requrl=$r->uri;
Line 150  sub handler { Line 197  sub handler {
  $handle=$lonid->value;   $handle=$lonid->value;
         $handle=~s/\W//g;          $handle=~s/\W//g;
     }      }
         
     my ($sso_login);  
     if ($r->user   
  && (!$lonid || !-e "$lonidsdir/$handle.id" || $handle eq '') ) {  
  $sso_login = 1;  
  my $domain = $r->dir_config('lonDefDomain');  
  my $home=&Apache::lonnet::homeserver($r->user,$domain);  
  if ($home !~ /(con_lost|no_such_host)/) {  
     $handle=&Apache::lonauth::success($r,$r->user,$domain,  
      $home,'noredirect');  
     $r->header_out('Set-cookie',"lonID=$handle; path=/");  
  }  
     }  
   
     if ($sso_login) {      if (my $result = &sso_login($r,$lonid,$handle)) {
  &Apache::lonnet::appenv('request.sso.login' => 1);   return $result
     }      }
   
   
     if ($r->dir_config("lonBalancer") eq 'yes') {      if ($r->dir_config("lonBalancer") eq 'yes') {
  $r->set_handlers('PerlResponseHandler'=>   $r->set_handlers('PerlResponseHandler'=>
  [\&Apache::switchserver::handler]);   [\&Apache::switchserver::handler]);
Line 204  sub handler { Line 239  sub handler {
   
 # ---------------------------------------------------------------- Check access  # ---------------------------------------------------------------- Check access
  my $now = time;   my $now = time;
  if ($requrl!~/^\/adm|public|prtspool\//) {   if ($requrl !~ m{^/(?:adm|public|prtspool)/}
       || $requrl =~ /^\/adm\/.*\/(smppg|bulletinboard)(\?|$ )/x) {
     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";

Removed from v.1.92  
changed lines
  Added in v.1.95


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