--- loncom/auth/lonlogin.pm 2010/09/02 09:24:42 1.145 +++ loncom/auth/lonlogin.pm 2016/08/11 00:37:33 1.158.2.5 @@ -1,7 +1,7 @@ # The LearningOnline Network # Login Screen # -# $Id: lonlogin.pm,v 1.145 2010/09/02 09:24:42 www Exp $ +# $Id: lonlogin.pm,v 1.158.2.5 2016/08/11 00:37:33 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -46,7 +46,7 @@ sub handler { (join('&',$ENV{'QUERY_STRING'},$env{'request.querystring'}, $ENV{'REDIRECT_QUERY_STRING'}), ['interface','username','domain','firsturl','localpath','localres', - 'token','role','symb']); + 'token','role','symb','iptoken']); if (!defined($env{'form.firsturl'})) { &Apache::lonacc::get_posted_cgi($r,['firsturl']); } @@ -64,7 +64,8 @@ sub handler { # Are we re-routing? - if (-e '/home/httpd/html/lon-status/reroute.txt') { + my $londocroot = $r->dir_config('lonDocRoot'); + if (-e "$londocroot/lon-status/reroute.txt") { &Apache::lonauth::reroute($r); return OK; } @@ -91,7 +92,7 @@ sub handler { } $r->print( $start_page - .'
'.&mt('You are already logged in!').'
' .''.&mt('Please either [_1]continue the current session[_2] or [_3]log out[_4].', '','','','').'
' .$end_page @@ -102,33 +103,51 @@ sub handler { # ---------------------------------------------------- No valid token, continue - # ---------------------------- Not possible to really login to domain "public" +# ---------------------------- Not possible to really login to domain "public" if ($env{'form.domain'} eq 'public') { $env{'form.domain'}=''; $env{'form.username'}=''; } + +# ------ Is this page requested because /adm/migrateuser detected an IP change? + my %sessiondata; + if ($env{'form.iptoken'}) { + %sessiondata = &Apache::lonnet::tmpget($env{'form.iptoken'}); + unless ($sessiondata{'sessionserver'}) { + my $delete = &Apache::lonnet::tmpdel($env{'form.iptoken'}); + delete($env{'form.iptoken'}); + } + } # ----------------------------------------------------------- Process Interface $env{'form.interface'}=~s/\W//g; - my $httpbrowser=$ENV{"HTTP_USER_AGENT"}; + (undef,undef,undef,undef,undef,undef,my $clientmobile) = + &Apache::loncommon::decode_user_agent(); my $iconpath= &Apache::loncommon::lonhttpdurl($r->dir_config('lonIconsURL')); my $lonhost = $r->dir_config('lonHostID'); my $domain = &Apache::lonnet::default_login_domain(); + my $defdom = $domain; if ($lonhost ne '') { - my $redirect = &check_loginvia($domain,$lonhost); - if ($redirect) { - $r->print($redirect); - return OK; - } + unless ($sessiondata{'sessionserver'}) { + my $redirect = &check_loginvia($domain,$lonhost); + if ($redirect) { + $r->print($redirect); + return OK; + } + } } - if (($env{'form.domain'}) && + if (($sessiondata{'domain'}) && + (&Apache::lonnet::domain($env{'form.domain'},'description'))) { + $domain=$sessiondata{'domain'}; + } elsif (($env{'form.domain'}) && (&Apache::lonnet::domain($env{'form.domain'},'description'))) { $domain=$env{'form.domain'}; } + my $role = $r->dir_config('lonRole'); my $loadlim = $r->dir_config('lonLoadLim'); my $uloadlim= $r->dir_config('lonUserLoadLim'); @@ -140,9 +159,20 @@ sub handler { my $host_name = &Apache::lonnet::hostname($lonhost); # --------------------------------------------- Default values for login fields - - my $authusername=($env{'form.username'}?$env{'form.username'}:''); - my $authdomain=($env{'form.domain'}?$env{'form.domain'}:$domain); + + my ($authusername,$authdomain); + if ($sessiondata{'username'}) { + $authusername=$sessiondata{'username'}; + } else { + $env{'form.username'} = &Apache::loncommon::cleanup_html($env{'form.username'}); + $authusername=($env{'form.username'}?$env{'form.username'}:''); + } + if ($sessiondata{'domain'}) { + $authdomain=$sessiondata{'domain'}; + } else { + $env{'form.domain'} = &Apache::loncommon::cleanup_html($env{'form.domain'}); + $authdomain=($env{'form.domain'}?$env{'form.domain'}:$domain); + } # ---------------------------------------------------------- Determine own load my $loadavg; @@ -151,10 +181,14 @@ sub handler { $loadavg=<$loadfile>; } $loadavg =~ s/\s.*//g; - my $loadpercent=sprintf("%.1f",100*$loadavg/$loadlim); - unless ($loadlim) { $loadpercent='---'; } - my $userloadpercent=&Apache::lonnet::userload(); - unless ($uloadlim) { $userloadpercent='---'; } + + my ($loadpercent,$userloadpercent); + if ($loadlim) { + $loadpercent=sprintf("%.1f",100*$loadavg/$loadlim); + } + if ($uloadlim) { + $userloadpercent=&Apache::lonnet::userload(); + } my $firsturl= ($env{'request.firsturl'}?$env{'request.firsturl'}:$env{'form.firsturl'}); @@ -192,13 +226,23 @@ sub handler { } $tokenextras .= '&symb='.&escape($env{'form.symb'}); } + if ($env{'form.iptoken'}) { + if (!$tokenextras) { + $tokenextras = '&&'; + } + $tokenextras .= '&iptoken='.&escape($env{'form.iptoken'}); + } my $logtoken=Apache::lonnet::reply( 'tmpput:'.$ukey.$lkey.'&'.$firsturl.$tokenextras, $lonhost); -# ------------------- If we cannot talk to ourselves, we are in serious trouble +# -- If we cannot talk to ourselves, or hostID does not map to a hostname +# we are in serious trouble - if ($logtoken eq 'con_lost') { + if (($logtoken eq 'con_lost') || ($logtoken eq 'no_such_host')) { + if ($logtoken eq 'no_such_host') { + &Apache::lonnet::logthis('No valid logtoken for log-in page -- unable to determine hostname for hostID: '.$lonhost.'. Check entry in hosts.tab'); + } my $spares=''; my $last; foreach my $hostid (sort @@ -209,7 +253,7 @@ sub handler { keys(%Apache::lonnet::spareid)) { next if ($hostid eq $lonhost); my $hostname = &Apache::lonnet::hostname($hostid); - next if ($last eq $hostname); + next if (($last eq $hostname) || ($hostname eq '')); $spares.=''.&mt('Please attempt to login to one of the following servers:').'
' - .$spares - .'' - .'' -); -return OK; -} + .''.&mt('Please attempt to login to one of the following servers:') + .'
' + .$spares); + } + $r->print('' + .'