Diff for /loncom/auth/lonlogin.pm between versions 1.195 and 1.199

version 1.195, 2022/02/24 15:51:28 version 1.199, 2022/06/18 02:10:18
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'};
                   if ($info{'linkprotuser'} ne '') {
                       $linkprotuser = $info{'linkprotuser'};
                   }
                 my $delete = &Apache::lonnet::tmpdel($env{'form.ltoken'});                  my $delete = &Apache::lonnet::tmpdel($env{'form.ltoken'});
             } 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,
                                          );    
                       &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 428  sub handler { Line 449  sub handler {
     if ($uextkey>2147483647) { $uextkey-=4294967296; }      if ($uextkey>2147483647) { $uextkey-=4294967296; }
   
 # -------------------------------------------------------- Store away log token  # -------------------------------------------------------- Store away log token
     my ($tokenextras,$tokentype);      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') {
                 my %info = &Apache::lonnet::tmpget($env{'form.'.$name});                  my %info = &Apache::lonnet::tmpget($env{'form.'.$name});
                 if ($info{'linkprot'}) {                  if ($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.sso'})) &&
                           (!$env{'form.ltoken'}) && ($name eq 'linkprot')) {
                           $linkprot_for_login = $env{'form.linkprot'};
                       }
                     $tokentype = 'link';                      $tokentype = 'link';
                 }                  }
             }              }
Line 898  ENDSAML Line 927  ENDSAML
             delete($env{'form.ltoken'});              delete($env{'form.ltoken'});
         }          }
     }      }
       my $in_frame_js;
       if ($linkprot_for_login) {
           my ($linkprotector,$linkproturi) = split(/:/,$linkprot_for_login,2);
           if (($linkprotector =~ /^\d+(c|d)$/) && ($linkproturi =~ m{^/+tiny/+$LONCAPA::match_domain/+\w+$})) {
               my $set_target;
               if (($env{'form.retry'}) || ($env{'form.sso'})) {
                   if ($linkproturi eq $env{'form.firsturl'}) {
                       $set_target = "    document.server.target = '_self';";
                   }
               } else {
                   $set_target = <<ENDTARG;
       var linkproturi = '$linkproturi';
       var path = document.location.pathname.replace( new RegExp('^/adm/launch'),'');
       if (linkproturi == path) {
           document.server.target = '_self';
       }
   ENDTARG
               }
               $in_frame_js = <<ENDJS;
   <script type="text/javascript">
   // <![CDATA[
   if ((window.self !== window.top) && (document.server.target != '_self')) {
       $set_target
   }
   // ]]>
   </script>
   ENDJS
           }
       }
   
     $r->print(<<ENDLOGIN);      $r->print(<<ENDLOGIN);
 <div style="display:$stdauthformstyle;" id="LC_standard_login">  <div style="display:$stdauthformstyle;" id="LC_standard_login">
Line 998  $versionrow Line 1056  $versionrow
     <br style="clear:both;" />      <br style="clear:both;" />
  </div>   </div>
   
   $in_frame_js
 <script type="text/javascript">  <script type="text/javascript">
 // <![CDATA[  // <![CDATA[
 // the if prevents the script error if the browser can not handle this  // the if prevents the script error if the browser can not handle this
Line 1090  sub redirect_page { Line 1149  sub redirect_page {
         $path = '/'.$path;          $path = '/'.$path;
     }      }
     my $url = $protocol.'://'.$hostname.$path;      my $url = $protocol.'://'.$hostname.$path;
     if ($env{'form.firsturl'} ne '') {      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'});
               } elsif ($env{'form.linkprot'}) {
                   $link_info{'linkprot'} = $env{'form.linkprot'};
                   if ($env{'form.linkprotuser'}) {
                       $link_info{'linkprotuser'} = $env{'form.linkprotuser'};
                   }
               } 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,      my $start_page = &Apache::loncommon::start_page('Switching Server ...',undef,
                                                     {'redirect' => [0,$url],});                                                      {'redirect' => [0,$url],});

Removed from v.1.195  
changed lines
  Added in v.1.199


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.