Diff for /loncom/auth/lonlogin.pm between versions 1.197 and 1.200

version 1.197, 2022/05/27 01:36:08 version 1.200, 2022/06/26 04:03:47
Line 68  sub handler { Line 68  sub handler {
             $env{'form.ltoken'} = $info{'ltoken'};              $env{'form.ltoken'} = $info{'ltoken'};
         } elsif ($info{'linkprot'}) {          } elsif ($info{'linkprot'}) {
             $env{'form.linkprot'} = $info{'linkprot'};              $env{'form.linkprot'} = $info{'linkprot'};
               if ($info{'linkprotuser'} ne '') {
                   $env{'form.linkprotuser'} = $info{'linkprotuser'};
               }
         } elsif ($info{'linkkey'} ne '') {          } elsif ($info{'linkkey'} ne '') {
             $env{'form.linkkey'} = $info{'linkkey'};              $env{'form.linkkey'} = $info{'linkkey'};
         }          }
Line 181  sub handler { Line 184  sub handler {
                     $link_info{'ltoken'} = $env{'form.ltoken'};                      $link_info{'ltoken'} = $env{'form.ltoken'};
                 } elsif ($env{'form.linkprot'}) {                  } elsif ($env{'form.linkprot'}) {
                     $link_info{'linkprot'} = $env{'form.linkprot'};                      $link_info{'linkprot'} = $env{'form.linkprot'};
                       if ($env{'form.linkprotuser'} ne '') {
                           $link_info{'linkprotuser'} = $env{'form.linkprotuser'};
                       }
                 } elsif ($env{'form.linkkey'} ne '') {                  } elsif ($env{'form.linkkey'} ne '') {
                     $link_info{'linkkey'} = $env{'form.linkkey'};                      $link_info{'linkkey'} = $env{'form.linkkey'};
                 }                  }
Line 249  sub handler { Line 255  sub handler {
             $dest = &HTML::Entities::encode($env{'form.firsturl'},'\'"<>&');              $dest = &HTML::Entities::encode($env{'form.firsturl'},'\'"<>&');
         }          }
         if (($env{'form.ltoken'}) || ($env{'form.linkprot'})) {          if (($env{'form.ltoken'}) || ($env{'form.linkprot'})) {
             my $linkprot;              my ($linkprot,$linkprotuser);
             if ($env{'form.ltoken'}) {              if ($env{'form.ltoken'}) {
                 my %info = &Apache::lonnet::tmpget($env{'form.ltoken'});                  my %info = &Apache::lonnet::tmpget($env{'form.ltoken'});
                 $linkprot = $info{'linkprot'};                  $linkprot = $info{'linkprot'};
                 my $delete = &Apache::lonnet::tmpdel($env{'form.ltoken'});                  if ($info{'linkprotuser'} ne '') {
                       $linkprotuser = $info{'linkprotuser'};
                   }
             } else {              } else {
                 $linkprot = $env{'form.linkprot'};                  $linkprot = $env{'form.linkprot'};
                   $linkprotuser = $env{'form.linkprotuser'};
             }              }
             if ($linkprot) {              if ($linkprot) {
                 my ($linkprotector,$deeplink) = split(/:/,$linkprot,2);                  my ($linkprotector,$deeplink) = split(/:/,$linkprot,2);
                   if (($deeplink =~ m{^/tiny/$match_domain/\w+$}) &&
                       ($linkprotuser ne '') && ($linkprotuser ne $env{'user.name'}.':'.$env{'user.domain'})) {
                       my $ip = &Apache::lonnet::get_requestor_ip();
                       my %linkprotinfo = (
                                             origurl => $deeplink,
                                             linkprot => $linkprot,
                                             linkprotuser => $linkprotuser,
                                          );    
                       if ($env{'form.ltoken'}) {
                           my $delete = &Apache::lonnet::tmpdel($env{'form.ltoken'});
                       }
                       &Apache::migrateuser::logout($r,$ip,$handle,undef,undef,\%linkprotinfo);
                       return OK;
                   }
                 if ($env{'user.linkprotector'}) {                  if ($env{'user.linkprotector'}) {
                     my @protectors = split(/,/,$env{'user.linkprotector'});                      my @protectors = split(/,/,$env{'user.linkprotector'});
                     unless (grep(/^\Q$linkprotector\E$/,@protectors)) {                      unless (grep(/^\Q$linkprotector\E$/,@protectors)) {
Line 304  sub handler { Line 327  sub handler {
                 }                  }
             }              }
         }          }
           if ($env{'form.ltoken'}) {
               my $delete = &Apache::lonnet::tmpdel($env{'form.ltoken'});
           }
  $r->print(   $r->print(
                   $start_page                    $start_page
                  .'<p class="LC_warning">'.&mt('You are already logged in!').'</p>'                   .'<p class="LC_warning">'.&mt('You are already logged in!').'</p>'
Line 429  sub handler { Line 455  sub handler {
   
 # -------------------------------------------------------- Store away log token  # -------------------------------------------------------- Store away log token
     my ($tokenextras,$tokentype,$linkprot_for_login);      my ($tokenextras,$tokentype,$linkprot_for_login);
     my @names = ('role','symb','iptoken','ltoken','linkprot','linkkey');      my @names = ('role','symb','iptoken','ltoken','linkprotuser','linkprot','linkkey');
     foreach my $name (@names) {      foreach my $name (@names) {
         if ($env{'form.'.$name} ne '') {          if ($env{'form.'.$name} ne '') {
             if ($name eq 'ltoken') {              if ($name eq 'ltoken') {
Line 437  sub handler { Line 463  sub handler {
                 if ($info{'linkprot'}) {                  if ($info{'linkprot'}) {
                     $linkprot_for_login = $info{'linkprot'};                      $linkprot_for_login = $info{'linkprot'};
                     $tokenextras .= '&linkprot='.&escape($info{'linkprot'});                      $tokenextras .= '&linkprot='.&escape($info{'linkprot'});
                       if ($info{'linkprotuser'}) {
                           $tokenextras .= '&linkprotuser='.&escape($info{'linkprotuser'});
                       }
                     $tokentype = 'link';                      $tokentype = 'link';
                     last;                      last;
                 }                  }
             } else {              } else {
                 $tokenextras .= '&'.$name.'='.&escape($env{'form.'.$name});                  $tokenextras .= '&'.$name.'='.&escape($env{'form.'.$name});
                 if (($name eq 'linkkey') || ($name eq 'linkprot')) {                  if (($name eq 'linkkey') || ($name eq 'linkprot')) {
                     if (($env{'form.retry'}) && (!$env{'form.ltoken'}) && ($name eq 'linkprot')) {                      if ((($env{'form.retry'}) || ($env{'form.sso'})) &&
                           (!$env{'form.ltoken'}) && ($name eq 'linkprot')) {
                         $linkprot_for_login = $env{'form.linkprot'};                          $linkprot_for_login = $env{'form.linkprot'};
                     }                      }
                     $tokentype = 'link';                      $tokentype = 'link';
Line 907  ENDSAML Line 937  ENDSAML
         my ($linkprotector,$linkproturi) = split(/:/,$linkprot_for_login,2);          my ($linkprotector,$linkproturi) = split(/:/,$linkprot_for_login,2);
         if (($linkprotector =~ /^\d+(c|d)$/) && ($linkproturi =~ m{^/+tiny/+$LONCAPA::match_domain/+\w+$})) {          if (($linkprotector =~ /^\d+(c|d)$/) && ($linkproturi =~ m{^/+tiny/+$LONCAPA::match_domain/+\w+$})) {
             my $set_target;              my $set_target;
             if ($env{'form.retry'}) {              if (($env{'form.retry'}) || ($env{'form.sso'})) {
                 if ($linkproturi eq $env{'form.firsturl'}) {                  if ($linkproturi eq $env{'form.firsturl'}) {
                     $set_target = "    document.server.target = '_self';";                      $set_target = "    document.server.target = '_self';";
                 }                  }
Line 1124  sub redirect_page { Line 1154  sub redirect_page {
         $path = '/'.$path;          $path = '/'.$path;
     }      }
     my $url = $protocol.'://'.$hostname.$path;      my $url = $protocol.'://'.$hostname.$path;
     if ($env{'form.firsturl'} ne '') {      my $args = {};
       if ($env{'form.firsturl'} =~ m{^/tiny/$match_domain/\w+$}) {
           $url = $protocol.'://'.$hostname.$env{'form.firsturl'};
           if (($env{'form.ltoken'}) || ($env{'form.linkprot'} ne '') ||
               ($env{'form.linkkey'} ne '')) {
               my %link_info;
               if ($env{'form.ltoken'}) {
                   %link_info = &Apache::lonnet::tmpget($env{'form.ltoken'});
                   &Apache::lonnet::tmpdel($env{'form.ltoken'});
                   $args->{'only_body'} = 1;
               } elsif ($env{'form.linkprot'}) {
                   $link_info{'linkprot'} = $env{'form.linkprot'};
                   if ($env{'form.linkprotuser'}) {
                       $link_info{'linkprotuser'} = $env{'form.linkprotuser'};
                   }
                   $args->{'only_body'} = 1;
               } elsif ($env{'form.linkkey'} ne '') {
                   $link_info{'linkkey'} = $env{'form.linkkey'};
               }
               my $token = &Apache::lonnet::tmpput(\%link_info,$desthost,'link');
               unless (($token eq 'con_lost') || ($token eq 'refused') ||
                       ($token eq 'unknown_cmd') || ($token eq 'no_such_host')) {
                   $url .= '?ltoken='.$token;
               }
           }
       } else {
         my $querystring;          my $querystring;
         if ($env{'form.firsturl'} =~ /[^\x00-\xFF]/) {          if ($env{'form.firsturl'} ne '') {
             $querystring = &uri_escape_utf8($env{'form.firsturl'});              if ($env{'form.firsturl'} =~ /[^\x00-\xFF]/) {
         } else {                  $querystring = &uri_escape_utf8($env{'form.firsturl'});
             $querystring = &uri_escape($env{'form.firsturl'});              } else {
                   $querystring = &uri_escape($env{'form.firsturl'});
               }
               $querystring = &HTML::Entities::encode($querystring,"'");
               $querystring = '?firsturl='.$querystring;
         }          }
         $querystring = &HTML::Entities::encode($querystring,"'");  
         $url .='?firsturl='.$querystring;  
     }  
     if (($env{'form.ltoken'}) || ($env{'form.linkkey'} ne '')) {  
         my %link_info;  
         if ($env{'form.ltoken'}) {          if ($env{'form.ltoken'}) {
             $link_info{'ltoken'} = $env{'form.ltoken'};              my %link_info = &Apache::lonnet::tmpget($env{'form.ltoken'});
         } elsif ($env{'form.linkkey'} ne '') {              &Apache::lonnet::tmpdel($env{'form.ltoken'});
             $link_info{'linkkey'} = $env{'form.linkkey'};              my $token = &Apache::lonnet::tmpput(\%link_info,$desthost,'link');
         }              unless (($token eq 'con_lost') || ($token eq 'refused') || ($token =~ /^error:/) ||
         my $token = &Apache::lonnet::tmpput(\%link_info,$desthost,'link');                      ($token eq 'unknown_cmd') || ($token eq 'no_such_host')) {
         unless (($token eq 'con_lost') || ($token eq 'refused') ||                  unless (($path eq '/adm/roles') || ($path eq '/adm/login')) {
                 ($token eq 'unknown_cmd') || ($token eq 'no_such_host')) {                      $url = $protocol.'://'.$hostname.'/adm/roles';
             $url .= (($url=~/\?/)?'&amp;':'?') . 'ttoken='.$token;                  }
                   $querystring .= (($querystring =~/^\?/)?'&amp;':'?') . 'ttoken='.$token;
               }
         }          }
           $url .= $querystring;
     }      }
     my $start_page = &Apache::loncommon::start_page('Switching Server ...',undef,      $args->{'redirect'} = [0,$url];
                                                     {'redirect' => [0,$url],});      my $start_page = &Apache::loncommon::start_page('Switching Server ...',undef,$args);
     my $end_page   = &Apache::loncommon::end_page();      my $end_page   = &Apache::loncommon::end_page();
     return $start_page.$end_page;      return $start_page.$end_page;
 }  }

Removed from v.1.197  
changed lines
  Added in v.1.200


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