Diff for /loncom/auth/lonacc.pm between versions 1.205 and 1.209

version 1.205, 2022/06/30 21:04:13 version 1.209, 2023/08/28 18:58:45
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');                       'ltoken','linkkey','logtoken','sso','lcssowin');
         &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,$linkprotexit,$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 374  sub sso_login {
             $linkprot = $info{'linkprot'};              $linkprot = $info{'linkprot'};
             $linkprotuser = $info{'linkprotuser'};              $linkprotuser = $info{'linkprotuser'};
             $linkprotexit = $info{'linkprotexit'};              $linkprotexit = $info{'linkprotexit'};
               $linkprotpbid = $info{'linkprotpbid'};
               $linkprotpburl = $info{'linkprotpburl'};
         } elsif ($info{'linkkey'} ne '') {          } elsif ($info{'linkkey'} ne '') {
             $linkkey = $info{'linkkey'};              $linkkey = $info{'linkkey'};
         }          }
Line 394  sub sso_login { Line 397  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'};                  $linkprotexit = $form{'linkprotexit'};
                   $linkprotpbid = $form{'linkprotpbid'};
                   $linkprotpburl = $form{'linkprotpburl'};
             } elsif ($form{'linkkey'} ne '') {              } elsif ($form{'linkkey'} ne '') {
                 $linkkey = $form{'linkkey'};                  $linkkey = $form{'linkkey'};
             }              }
Line 428  sub sso_login { Line 435  sub sso_login {
                 $linkprot = $form{'linkprot'};                  $linkprot = $form{'linkprot'};
                 $linkprotuser = $form{'linkprotuser'};                  $linkprotuser = $form{'linkprotuser'};
                 $linkprotexit = $form{'linkprotexit'};                  $linkprotexit = $form{'linkprotexit'};
                   $linkprotpbid = $form{'linkprotpbid'};
                   $linkprotpburl = $form{'linkprotpburl'};
             } elsif ($form{'linkkey'} ne '') {              } elsif ($form{'linkkey'} ne '') {
                 $linkkey = $form{'linkkey'};                  $linkkey = $form{'linkkey'};
             }              }
Line 442  sub sso_login { Line 451  sub sso_login {
             if ($link_info{'linkprotexit'} ne '') {              if ($link_info{'linkprotexit'} ne '') {
                 $linkprotexit = $link_info{'linkprotexit'};                  $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 464  sub sso_login { Line 479  sub sso_login {
                            linkprot => $linkprot,                             linkprot => $linkprot,
                            linkprotuser => $linkprotuser,                             linkprotuser => $linkprotuser,
                            linkprotexit => $linkprotexit,                             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 533  sub sso_login { Line 553  sub sso_login {
                     if ($linkprotexit ne '') {                      if ($linkprotexit ne '') {
                         $env{'request.linkprotexit'} = $linkprotexit;                          $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 546  sub sso_login { Line 578  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 {
Line 558  sub sso_login { Line 593  sub sso_login {
       'server'    => $r->dir_config('lonHostID'),        'server'    => $r->dir_config('lonHostID'),
       'sso.login' => 1        'sso.login' => 1
       );        );
             foreach my $item ('role','symb','iptoken','origurl') {              foreach my $item ('role','symb','iptoken','origurl','lcssowin') {
                 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 584  sub sso_login { Line 619  sub sso_login {
                     if ($linkprotexit ne '') {                      if ($linkprotexit ne '') {
                         $info{'linkprotexit'} = $linkprotexit;                          $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 624  sub sso_login { Line 671  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  # creation. If lcssowin is 1, createaccount needs to close pop-up and display in main window.
                 $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 804  sub handler { Line 851  sub handler {
                                 linkprot => $info{'linkprot'},                                  linkprot => $info{'linkprot'},
                                 linkprotuser => $info{'linkprotuser'},                                  linkprotuser => $info{'linkprotuser'},
                                 linkprotexit => $info{'linkprotexit'},                                  linkprotexit => $info{'linkprotexit'},
                                   linkprotpbid => $info{'linkprotpbid'},
                                   linkprotpburl => $info{'linkprotpburl'},
                             );                              );
                         } elsif ($info{'ltoken'} ne '') {                          } elsif ($info{'ltoken'} ne '') {
                             my %ltoken_info = &Apache::lonnet::tmpget($info{'ltoken'});                              my %ltoken_info = &Apache::lonnet::tmpget($info{'ltoken'});
Line 814  sub handler { Line 863  sub handler {
                                     linkprot => $ltoken_info{'linkprot'},                                      linkprot => $ltoken_info{'linkprot'},
                                     linkprotuser => $ltoken_info{'linkprotuser'},                                      linkprotuser => $ltoken_info{'linkprotuser'},
                                     linkprotexit => $ltoken_info{'linkprotexit'},                                      linkprotexit => $ltoken_info{'linkprotexit'},
                                       linkprotpbid => $ltoken_info{'linkprotpbid'},
                                       linkprotpburl => $ltoken_info{'linkprotpburl'},
                                 );                                  );
                             }                              }
                         }                          }
Line 840  sub handler { Line 891  sub handler {
                 return FORBIDDEN;                  return FORBIDDEN;
             }              }
             return OK;              return OK;
           } elsif (($env{'request.course.id'}) &&
                    (&Apache::lonnet::allowed('mdc',$env{'request.course.id'})) &&
                    ($requrl=~m{^(/daxeopen|)(/uploaded/$cdom/$cnum/(?:docs|supplemental)/(?:default|\d+)/\d+/)([^/]+|)$})) {
               my ($daxe,$path,$file) = ($1,$2,$3);
               my $referrer;
               unless ($daxe) {
                   $referrer = $r->headers_in->{'Referer'};
               }
               if (($daxe) || ($referrer =~ m{\Qfile=/daxeopen$path\E})) {
                   return OK;
               }
         }          }
 # ---------------------------------------------------------------- Check access  # ---------------------------------------------------------------- Check access
  my $now = time;   my $now = time;
Line 913  sub handler { Line 975  sub handler {
                 }                  }
             } else {              } else {
                 my $nodeeplinkcheck;                  my $nodeeplinkcheck;
                 if (($check_access) && ($requrl =~ /\.(sequence|page)$/)) {                  if ($check_access) {
                     unless ($env{'form.navmap'}) {                      if ($requrl =~ m{^/daxeopen/priv/}) {  
                         if ($r->args ne '') {                          $nodeeplinkcheck = 1;
                             &Apache::loncommon::get_unprocessed_cgi($r->args,['navmap']);                      } elsif ($requrl =~ /\.(sequence|page)$/) {
                             unless ($env{'form.navmap'}) {                          unless ($env{'form.navmap'}) {
                                 $nodeeplinkcheck = 1;                              if ($r->args ne '') {
                                   &Apache::loncommon::get_unprocessed_cgi($r->args,['navmap']);
                                   unless ($env{'form.navmap'}) {
                                       $nodeeplinkcheck = 1;
                                   }
                             }                              }
                         }                          }
                     }                      }

Removed from v.1.205  
changed lines
  Added in v.1.209


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