Diff for /loncom/auth/lonacc.pm between versions 1.159.2.21.2.6 and 1.203

version 1.159.2.21.2.6, 2024/02/28 20:31:02 version 1.203, 2022/06/18 02:10:18
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]$//;
                         }                          }
                     }                      } 
                     if ($fname =~ /\.(xls|doc|ppt)(x|m)$/i) {                      if ($fname =~ /\.(xls|doc|ppt)(x|m)$/i) {
                         $value=~s/[\r\n]$//;                          $value=~s/[\r\n]$//;
                     }                      }
Line 315  sub sso_login { Line 315  sub sso_login {
     my %form;      my %form;
     if ($query) {      if ($query) {
         my @items = ('role','symb','iptoken','origurl','ttoken',          my @items = ('role','symb','iptoken','origurl','ttoken',
                      'ltoken','linkkey','logtoken','sso','lcssowin');                       'ltoken','linkkey','logtoken','sso');
         &Apache::loncommon::get_unprocessed_cgi($query,\@items);          &Apache::loncommon::get_unprocessed_cgi($query,\@items);
         foreach my $item (@items) {          foreach my $item (@items) {
             if (defined($env{'form.'.$item})) {              if (defined($env{'form.'.$item})) {
Line 333  sub sso_login { Line 333  sub sso_login {
         }          }
     }      }
   
     my ($linkprot,$linkprotuser,$linkprotexit,$linkkey,$deeplinkurl,      my ($linkprot,$linkprotuser,$linkkey,$deeplinkurl);
         $linkprotpbid,$linkprotpburl);  
   
 #  #
 # If Shibboleth auth is in use, and a dual SSO and non-SSO login page  # If Shibboleth auth is in use, and a dual SSO and non-SSO login page
Line 373  sub sso_login { Line 372  sub sso_login {
         if ($info{'linkprot'}) {          if ($info{'linkprot'}) {
             $linkprot = $info{'linkprot'};              $linkprot = $info{'linkprot'};
             $linkprotuser = $info{'linkprotuser'};              $linkprotuser = $info{'linkprotuser'};
             $linkprotexit = $info{'linkprotexit'};  
             $linkprotpbid = $info{'linkprotpbid'};  
             $linkprotpburl = $info{'linkprotpburl'};  
         } elsif ($info{'linkkey'} ne '') {          } elsif ($info{'linkkey'} ne '') {
             $linkkey = $info{'linkkey'};              $linkkey = $info{'linkkey'};
         }          }
Line 397  sub sso_login { Line 393  sub sso_login {
             if ($firsturl =~ m{^/tiny/$match_domain/\w+$}) {              if ($firsturl =~ m{^/tiny/$match_domain/\w+$}) {
                 $form{'origurl'} = $firsturl;                  $form{'origurl'} = $firsturl;
                 $deeplinkurl = $firsturl;                  $deeplinkurl = $firsturl;
             } elsif ($firsturl eq '/adm/email') {  
                 $form{'origurl'} = $firsturl;  
             }              }
             if ($form{'linkprot'}) {              if ($form{'linkprot'}) {
                 $linkprot = $form{'linkprot'};                  $linkprot = $form{'linkprot'};
                 $linkprotuser = $form{'linkprotuser'};                  $linkprotuser = $form{'linkprotuser'};
                 $linkprotexit = $form{'linkprotexit'};  
                 $linkprotpbid = $form{'linkprotpbid'};  
                 $linkprotpburl = $form{'linkprotpburl'};  
             } elsif ($form{'linkkey'} ne '') {              } elsif ($form{'linkkey'} ne '') {
                 $linkkey = $form{'linkkey'};                  $linkkey = $form{'linkkey'};
             }              }
Line 434  sub sso_login { Line 425  sub sso_login {
             if ($form{'linkprot'}) {              if ($form{'linkprot'}) {
                 $linkprot = $form{'linkprot'};                  $linkprot = $form{'linkprot'};
                 $linkprotuser = $form{'linkprotuser'};                  $linkprotuser = $form{'linkprotuser'};
                 $linkprotexit = $form{'linkprotexit'};  
                 $linkprotpbid = $form{'linkprotpbid'};  
                 $linkprotpburl = $form{'linkprotpburl'};  
             } elsif ($form{'linkkey'} ne '') {              } elsif ($form{'linkkey'} ne '') {
                 $linkkey = $form{'linkkey'};                  $linkkey = $form{'linkkey'};
             }              }
Line 444  sub sso_login { Line 432  sub sso_login {
     } elsif ($form{'ltoken'}) {      } elsif ($form{'ltoken'}) {
         my %link_info = &Apache::lonnet::tmpget($form{'ltoken'});          my %link_info = &Apache::lonnet::tmpget($form{'ltoken'});
         $linkprot = $link_info{'linkprot'};          $linkprot = $link_info{'linkprot'};
         if ($linkprot) {          if (($linkprot) && ($link_info{'linkprotuser'} ne '')) {
             if ($link_info{'linkprotuser'} ne '') {              $linkprotuser = $link_info{'linkprotuser'};    
                 $linkprotuser = $link_info{'linkprotuser'};  
             }  
             if ($link_info{'linkprotexit'} ne '') {  
                 $linkprotexit = $link_info{'linkprotexit'};  
             }  
             if ($link_info{'linkprotpbid'} ne '') {  
                 $linkprotpbid = $link_info{'linkprotpbid'};  
             }  
             if ($link_info{'linkprotpburl'} ne '') {  
                 $linkprotpburl = $link_info{'linkprotpburl'};  
             }  
         }          }
         my $delete = &Apache::lonnet::tmpdel($form{'ltoken'});          my $delete = &Apache::lonnet::tmpdel($form{'ltoken'});
         delete($form{'ltoken'});          delete($form{'ltoken'});
Line 478  sub sso_login { Line 455  sub sso_login {
                            origurl => $deeplinkurl,                             origurl => $deeplinkurl,
                            linkprot => $linkprot,                             linkprot => $linkprot,
                            linkprotuser => $linkprotuser,                             linkprotuser => $linkprotuser,
                            linkprotexit => $linkprotexit,  
                            linkprotpbid => $linkprotpbid,  
                            linkprotpburl => $linkprotpburl,  
                        );                         );
             if ($env{'form.lcssowin'}) {  
                 $data{'lcssowin'} = $env{'form.lcssowin'};  
             }  
             my $token = &Apache::lonnet::tmpput(\%data,$r->dir_config('lonHostID'),'link');              my $token = &Apache::lonnet::tmpput(\%data,$r->dir_config('lonHostID'),'link');
             unless (($token eq 'con_lost') || ($token eq 'refused') || ($token =~ /^error:/) ||              unless (($token eq 'con_lost') || ($token eq 'refused') || ($token =~ /^error:/) ||
                     ($token eq 'unknown_cmd') || ($token eq 'no_such_host')) {                      ($token eq 'unknown_cmd') || ($token eq 'no_such_host')) {
Line 550  sub sso_login { Line 521  sub sso_login {
                     if ($linkprotuser ne '') {                      if ($linkprotuser ne '') {
                         $env{'request.linkprotuser'} = $linkprotuser;                          $env{'request.linkprotuser'} = $linkprotuser;
                     }                      }
                     if ($linkprotexit ne '') {  
                         $env{'request.linkprotexit'} = $linkprotexit;  
                     }  
                     if ($linkprotpbid ne '') {  
                         $env{'request.linkprotpbid'} = $linkprotpbid;  
                     }  
                     if ($linkprotpburl ne '') {  
                         $env{'request.linkprotpburl'} = $linkprotpburl;  
                     }  
                 } elsif ($linkkey ne '') {                  } elsif ($linkkey ne '') {
                     $env{'request.linkkey'} = $linkkey;                      $env{'request.linkkey'} = $linkkey;
                 }                  }
             }              }
             if (($r->uri eq '/adm/sso') && ($form{'origurl'} eq '/adm/email')) {  
                 if ($form{'display'} && ($env{'form.mailrecip'} eq $user.':'.$domain)) {  
                     $env{'request.display'} = $form{'display'};  
                     $env{'request.mailrecip'} = $env{'form.mailrecip'};  
                 }  
             }  
             $env{'request.sso.login'} = 1;              $env{'request.sso.login'} = 1;
             if (defined($r->dir_config("lonSSOReloginServer"))) {              if (defined($r->dir_config("lonSSOReloginServer"))) {
                 $env{'request.sso.reloginserver'} =                  $env{'request.sso.reloginserver'} =
Line 578  sub sso_login { Line 534  sub sso_login {
             if ($otherserver ne '') {              if ($otherserver ne '') {
                 $redirecturl .= '?otherserver='.$otherserver;                  $redirecturl .= '?otherserver='.$otherserver;
             }              }
             if ($form{'lcssowin'}) {  
                 $redirecturl .= (($redirecturl=~/\?/)?'&':'?') . 'lcssowin=1';  
             }  
     $r->internal_redirect($redirecturl);      $r->internal_redirect($redirecturl);
     $r->set_handlers('PerlHandler'=> undef);      $r->set_handlers('PerlHandler'=> undef);
  } 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 $ip = &Apache::lonnet::get_requestor_ip($r);      my $ip = &Apache::lonnet::get_requestor_ip($r);
     my %info=('ip'        => $ip,      my %info=('ip'        => $ip,
       'domain'    => $domain,        'domain'    => $domain,
       'username'  => $user,        'username'  => $user,
       'server'    => $r->dir_config('lonHostID'),        'server'    => $r->dir_config('lonHostID'),
       'sso.login' => 1        'sso.login' => 1
       );        );
             foreach my $item ('role','symb','iptoken','origurl','lcssowin') {              foreach my $item ('role','symb','iptoken','origurl') {
                 if (exists($form{$item})) {                  if (exists($form{$item})) {
                     $info{$item} = $form{$item};                      $info{$item} = $form{$item};
                 } elsif ($sessiondata{$item} ne '') {                  } elsif ($sessiondata{$item} ne '') {
Line 613  sub sso_login { Line 566  sub sso_login {
             if ($info{'deeplink.login'}) {              if ($info{'deeplink.login'}) {
                 if ($linkprot) {                  if ($linkprot) {
                     $info{'linkprot'} = $linkprot;                      $info{'linkprot'} = $linkprot;
                     if ($linkprotuser ne '') {  
                         $info{'linkprotuser'} = $linkprotuser;  
                     }  
                     if ($linkprotexit ne '') {  
                         $info{'linkprotexit'} = $linkprotexit;  
                     }  
                     if ($linkprotpbid ne '') {  
                         $info{'linkprotpbid'} = $linkprotpbid;  
                     }  
                     if ($linkprotpburl ne '') {  
                         $info{'linkprotpburl'} = $linkprotpburl;  
                     }  
                 } elsif ($linkkey ne '') {                  } elsif ($linkkey ne '') {
                     $info{'linkkey'} = $linkkey;                      $info{'linkkey'} = $linkkey;
                 }                  }
             }              }
             if (($r->uri eq '/adm/sso') && ($form{'origurl'} eq '/adm/email')) {  
                 if ($form{'display'} && ($form{'mailrecip'} eq $user.':'.$domain)) {  
                     $info{'display'} = &escape($form{'display'});  
                     $info{'mailrecip'} = &escape($form{'mailrecip'});  
                 }  
             }  
             if ($r->dir_config("ssodirecturl") == 1) {              if ($r->dir_config("ssodirecturl") == 1) {
                 $info{'origurl'} = $r->uri;                  $info{'origurl'} = $r->uri;
             }              }
Line 671  sub sso_login { Line 606  sub sso_login {
             $r->subprocess_env->set('SSOUserDomain' => $domain);              $r->subprocess_env->set('SSOUserDomain' => $domain);
             if (grep(/^sso$/,@cancreate)) {              if (grep(/^sso$/,@cancreate)) {
 #FIXME - need to preserve origurl, role and symb, or linkprot or linkkey for use after account  #FIXME - need to preserve origurl, role and symb, or linkprot or linkkey for use after account
 # creation. If lcssowin is 1, createaccount needs to close pop-up and display in main window.  # creation
                 $r->set_handlers('PerlHandler'=> [\&Apache::createaccount::handler]);                  $r->set_handlers('PerlHandler'=> [\&Apache::createaccount::handler]);
                 $r->handler('perl-script');                  $r->handler('perl-script');
             } else {              } else {
Line 792  sub handler { Line 727  sub handler {
             my $lonhost = &Apache::lonnet::host_from_dns($hostname);              my $lonhost = &Apache::lonnet::host_from_dns($hostname);
             if ($lonhost) {              if ($lonhost) {
                 my $actual = &Apache::lonnet::absolute_url($hostname,1,1);                  my $actual = &Apache::lonnet::absolute_url($hostname,1,1);
                   my $exphostname = &Apache::lonnet::hostname($lonhost);
                 my $expected = $Apache::lonnet::protocol{$lonhost}.'://'.$hostname;                  my $expected = $Apache::lonnet::protocol{$lonhost}.'://'.$hostname;
                 unless ($actual eq $expected) {                  unless ($actual eq $expected) {
                     $env{'request.use_absolute'} = $expected;                      $env{'request.use_absolute'} = $expected;
Line 841  sub handler { Line 777  sub handler {
                 &Apache::loncommon::get_unprocessed_cgi($r->args,['ttoken']);                  &Apache::loncommon::get_unprocessed_cgi($r->args,['ttoken']);
                 if (defined($env{'form.ttoken'})) {                  if (defined($env{'form.ttoken'})) {
                     my %info = &Apache::lonnet::tmpget($env{'form.ttoken'});                      my %info = &Apache::lonnet::tmpget($env{'form.ttoken'});
                     if (($info{'origurl'} ne '') && ($info{'origurl'} eq $requrl)) {                      if (($info{'linkprotuser'} ne '') && ($info{'origurl'} ne '')) {
                         my %data;                          if (($info{'linkprot'}) && ($info{'origurl'} eq $requrl) &&
                         if (($info{'linkprotuser'} ne '') && ($info{'linkprot'}) &&  
                             ($info{'linkprotuser'} ne $env{'user.name'}.':'.$env{'user.domain'})) {                              ($info{'linkprotuser'} ne $env{'user.name'}.':'.$env{'user.domain'})) {
                             %data = (                              my %data = (
                                 origurl => $requrl,                                  origurl => $requrl,
                                 linkprot => $info{'linkprot'},                                  linkprot => $info{'linkprot'},
                                 linkprotuser => $info{'linkprotuser'},                                  linkprotuser => $info{'linkprotuser'},
                                 linkprotexit => $info{'linkprotexit'},  
                                 linkprotpbid => $info{'linkprotpbid'},  
                                 linkprotpburl => $info{'linkprotpburl'},  
                             );                              );
                         } elsif ($info{'ltoken'} ne '') {  
                             my %ltoken_info = &Apache::lonnet::tmpget($info{'ltoken'});  
                             if (($ltoken_info{'linkprotuser'} ne '') && ($ltoken_info{'linkprot'}) &&  
                                 ($ltoken_info{'linkprotuser'} ne $env{'user.name'}.':'.$env{'user.domain'})) {  
                                 %data = (  
                                     origurl => $requrl,  
                                     linkprot => $ltoken_info{'linkprot'},  
                                     linkprotuser => $ltoken_info{'linkprotuser'},  
                                     linkprotexit => $ltoken_info{'linkprotexit'},  
                                     linkprotpbid => $ltoken_info{'linkprotpbid'},  
                                     linkprotpburl => $ltoken_info{'linkprotpburl'},  
                                 );  
                             }  
                         }  
                         if (keys(%data)) {  
                             my $delete = &Apache::lonnet::tmpdel($env{'form.ttoken'});  
                             if ($info{'ltoken'} ne '') {  
                                 my $delete = &Apache::lonnet::tmpdel($info{'ltoken'});  
                             }  
                             my $token =                              my $token =
                                 &Apache::lonnet::tmpput(\%data,$r->dir_config('lonHostID'),'retry');                                  &Apache::lonnet::tmpput(\%data,$r->dir_config('lonHostID'),'retry');
                             unless (($token eq 'con_lost') || ($token eq 'refused') || ($token =~ /^error:/) ||                              unless (($token eq 'con_lost') || ($token eq 'refused') || ($token =~ /^error:/) ||
Line 1187  sub handler { Line 1100  sub handler {
                                 my $mapsymb = &Apache::lonnet::symbread($map);                                  my $mapsymb = &Apache::lonnet::symbread($map);
                                 ($map,$mid,$murl)=&Apache::lonnet::decode_symb($mapsymb);                                  ($map,$mid,$murl)=&Apache::lonnet::decode_symb($mapsymb);
                             }                              }
                             &Apache::lonnet::symblist($map,$murl =>[$murl,$mid],      &Apache::lonnet::symblist($map,$murl =>[$murl,$mid],
                                                       'last_known' =>[$murl,$mid]);        'last_known' =>[$murl,$mid]);
                         }                          }
     }      }
  }   }
Line 1241  sub handler { Line 1154  sub handler {
 # ------------------------------------ See if this is a viewable portfolio file  # ------------------------------------ See if this is a viewable portfolio file
     if (&Apache::lonnet::is_portfolio_url($requrl)) {      if (&Apache::lonnet::is_portfolio_url($requrl)) {
         my $clientip = &Apache::lonnet::get_requestor_ip($r);          my $clientip = &Apache::lonnet::get_requestor_ip($r);
  my $access=&Apache::lonnet::allowed('bre',$requrl,undef,undef,$clientip);          my $access=&Apache::lonnet::allowed('bre',$requrl,undef,undef,$clientip);
  if ($access eq 'A') {   if ($access eq 'A') {
     &Apache::restrictedaccess::setup_handler($r);      &Apache::restrictedaccess::setup_handler($r);
     return OK;      return OK;

Removed from v.1.159.2.21.2.6  
changed lines
  Added in v.1.203


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