--- loncom/auth/lonauth.pm 2013/08/13 13:22:24 1.125
+++ loncom/auth/lonauth.pm 2013/11/26 01:19:12 1.128
@@ -1,7 +1,7 @@
# The LearningOnline Network
# User Authentication Module
#
-# $Id: lonauth.pm,v 1.125 2013/08/13 13:22:24 raeburn Exp $
+# $Id: lonauth.pm,v 1.128 2013/11/26 01:19:12 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -161,19 +161,33 @@ ENDSUCCESS
sub failed {
my ($r,$message,$form) = @_;
- my $start_page = &Apache::loncommon::start_page('Unsuccessful Login',undef);
- my $retry = '/adm/login?username='.$form->{'uname'}.
- '&domain='.$form->{'udom'};
+ (undef,undef,undef,my $clientmathml,my $clientunicode) =
+ &Apache::loncommon::decode_user_agent();
+ my $args = {};
+ if ($clientunicode && !$clientmathml) {
+ $args = {'browser.unicode' => 1};
+ }
+
+ my $start_page = &Apache::loncommon::start_page('Unsuccessful Login',undef,$args);
+ my $uname = $form->{'uname'};
+ my $udom;
+ if (&Apache::lonnet::domain($form->{'udom'},'description') ne '') {
+ $udom = $form->{'udom'};
+ }
+ my $retry = '/adm/login?username='.$form->{'uname'};
+ if ($udom) {
+ $retry .= '&domain='.$form->{'udom'}
+ }
if (exists($form->{role})) {
- $retry .= '&role='.$form->{role};
+ $retry .= '&role='.$form->{role};
}
if (exists($form->{symb})) {
- $retry .= '&symb='.$form->{symb};
+ $retry .= '&symb='.$form->{symb};
}
my $end_page = &Apache::loncommon::end_page();
&Apache::loncommon::content_type($r,'text/html');
$r->send_http_header;
- my $loginhelp = &loginhelpdisplay($form->{'udom'});
+ my $loginhelp = &loginhelpdisplay($udom);
if ($loginhelp) {
$loginhelp = '
'.&mt('Login problems?').'
';
}
@@ -195,9 +209,9 @@ sub reroute {
my ($r) = @_;
&Apache::loncommon::content_type($r,'text/html');
$r->send_http_header;
- my $msg=''.&mt('Sorry ...').'
'
+ my $msg=''.&mt('Sorry ...').'
'
.&mt('Please [_1]log in again[_2].');
- &Apache::loncommon::simple_error_page($r,'Rerouting',$msg);
+ &Apache::loncommon::simple_error_page($r,'Rerouting',$msg,{'no_auto_mt_msg' => 1});
}
# ---------------------------------------------------------------- Main handler
@@ -259,7 +273,7 @@ sub handler {
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
$form{$name}=$value;
- }
+ }
if ((!$form{'uname'}) || (!$form{'upass0'}) || (!$form{'udom'})) {
&failed($r,'Username, password and domain need to be specified.',
@@ -284,6 +298,12 @@ sub handler {
my $tmpinfo=Apache::lonnet::reply('tmpget:'.$form{'logtoken'},
$form{'serverid'});
+ my %sessiondata;
+ if ($form{'iptoken'}) {
+ %sessiondata = &Apache::lonnet::tmpget($form{'iptoken'});
+ my $delete = &Apache::lonnet::tmpdel($form{'token'});
+ }
+
if (($tmpinfo=~/^error/) || ($tmpinfo eq 'con_lost') ||
($tmpinfo eq 'no_such_host')) {
&failed($r,'Information needed to verify your login information is missing, inaccessible or expired.',\%form);
@@ -396,6 +416,15 @@ sub handler {
($firsturl=~/^\/adm\/(logout|remote)/)) {
$firsturl='/adm/roles';
}
+
+ my $hosthere;
+ if ($form{'iptoken'}) {
+ if (($sessiondata{'domain'} eq $form{'udom'}) &&
+ ($sessiondata{'username'} eq $form{'uname'})) {
+ $hosthere = 1;
+ }
+ }
+
# --------------------------------- Are we attempting to login as somebody else?
if ($form{'suname'}) {
# ------------ see if the original user has enough privileges to pull this stunt
@@ -419,8 +448,12 @@ sub handler {
}
}
- my ($is_balancer,$otherserver) =
- &Apache::lonnet::check_loadbalancing($form{'uname'},$form{'udom'});
+ my ($is_balancer,$otherserver);
+
+ unless ($hosthere) {
+ ($is_balancer,$otherserver) =
+ &Apache::lonnet::check_loadbalancing($form{'uname'},$form{'udom'});
+ }
if ($is_balancer) {
if (!$otherserver) {