--- loncom/auth/lonacc.pm 2021/02/09 22:17:40 1.187 +++ loncom/auth/lonacc.pm 2021/06/22 16:56:35 1.191 @@ -1,7 +1,7 @@ # The LearningOnline Network # Cookie Based Access Handler # -# $Id: lonacc.pm,v 1.187 2021/02/09 22:17:40 raeburn Exp $ +# $Id: lonacc.pm,v 1.191 2021/06/22 16:56:35 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -305,7 +305,7 @@ sub sso_login { my $query = $r->args; my %form; if ($query) { - my @items = ('role','symb','iptoken'); + my @items = ('role','symb','iptoken','origurl'); &Apache::loncommon::get_unprocessed_cgi($query,\@items); foreach my $item (@items) { if (defined($env{'form.'.$item})) { @@ -349,7 +349,7 @@ sub sso_login { my $lowest_load; ($otherserver,undef,undef,undef,$lowest_load) = &Apache::lonnet::choose_server($domain); if ($lowest_load > 100) { - $otherserver = &Apache::lonnet::spareserver($lowest_load,$lowest_load,1,$domain); + $otherserver = &Apache::lonnet::spareserver($r,$lowest_load,$lowest_load,1,$domain); } if ($otherserver ne '') { my @hosts = &Apache::lonnet::current_machine_ids(); @@ -367,7 +367,7 @@ sub sso_login { foreach my $item (keys(%form)) { $env{'form.'.$item} = $form{$item}; } - unless ($form{'symb'}) { + unless (($form{'symb'}) || ($form{'origurl'})) { unless (($r->uri eq '/adm/roles') || ($r->uri eq '/adm/sso')) { $env{'form.origurl'} = $r->uri; } @@ -393,12 +393,12 @@ sub sso_login { 'server' => $r->dir_config('lonHostID'), 'sso.login' => 1 ); - foreach my $item ('role','symb','iptoken') { + foreach my $item ('role','symb','iptoken','origurl') { if (exists($form{$item})) { $info{$item} = $form{$item}; } } - unless ($info{'symb'}) { + unless (($info{'symb'}) || ($info{'origurl'})) { unless (($r->uri eq '/adm/roles') || ($r->uri eq '/adm/sso')) { $info{'origurl'} = $r->uri; } @@ -559,7 +559,7 @@ sub handler { my $hostname = $r->hostname(); my $lonhost = &Apache::lonnet::host_from_dns($hostname); if ($lonhost) { - my $actual = &Apache::lonnet::absolute_url($hostname); + my $actual = &Apache::lonnet::absolute_url($hostname,1,1); my $exphostname = &Apache::lonnet::hostname($lonhost); my $expected = $Apache::lonnet::protocol{$lonhost}.'://'.$hostname; unless ($actual eq $expected) { @@ -875,7 +875,7 @@ sub handler { } if ($invalidsymb) { if ($requrl eq '/adm/navmaps') { - undef(symb); + undef($symb); } else { $r->log_reason('Invalid symb for '.$requrl.': '.$symb); $env{'user.error.msg'}=