--- loncom/auth/migrateuser.pm 2014/10/04 02:59:32 1.21
+++ loncom/auth/migrateuser.pm 2014/10/06 00:48:44 1.23
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Starts a user off based of an existing token.
#
-# $Id: migrateuser.pm,v 1.21 2014/10/04 02:59:32 raeburn Exp $
+# $Id: migrateuser.pm,v 1.23 2014/10/06 00:48:44 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -72,23 +72,26 @@ sub ip_changed {
if (ref($dataref) eq 'HASH') {
my $title = 'LON-CAPA Session redirected';
my $message = &mt('Your internet address has changed since you logged in.');
- my $camefrom = &Apache::lonnet::hostname($dataref->{'server'});
- my $frombalancer = $dataref->{'balancer'};
my $rule_in_effect;
- if ($frombalancer) {
- my $balancerdom = &Apache::lonnet::host_domain($dataref->{'server'});
- if ($dataref->{'sso.login'}) {
- if (&Apache::lonnet::domain($dataref->{'domain'})) {
- $balancerdom = $dataref->{'domain'};
- }
+ if ($dataref->{'balancer'}) {
+ my $baldom = &Apache::lonnet::host_domain($camefrom);
+ my $balprimaryid = &Apache::lonnet::domain($baldom,'primary');
+ my $balintdom = &Apache::lonnet::internet_dom($balprimaryid);
+ my $uprimaryid = &Apache::lonnet::domain($udom,'primary');
+ my $uintdom = &Apache::lonnet::internet_dom($uprimaryid);
+ my $dom_in_use;
+ if (($uintdom ne '') && ($uintdom eq $balintdom)) {
+ $dom_in_use = $udom;
+ } else {
+ $dom_in_use = $baldom;
}
- my ($result,$cached)=&Apache::lonnet::is_cached_new('loadbalancing',$balancerdom);
+ my ($result,$cached)=&Apache::lonnet::is_cached_new('loadbalancing',$dom_in_use);
unless (defined($cached)) {
my $cachetime = 60*60*24;
my %domconfig =
- &Apache::lonnet::get_dom('configuration',['loadbalancing'],$balancerdom);
+ &Apache::lonnet::get_dom('configuration',['loadbalancing'],$dom_in_use);
if (ref($domconfig{'loadbalancing'}) eq 'HASH') {
- $result = &Apache::lonnet::do_cache_new('loadbalancing',$balancerdom,
+ $result = &Apache::lonnet::do_cache_new('loadbalancing',$dom_in_use,
$domconfig{'loadbalancing'},$cachetime);
}
}
@@ -111,36 +114,58 @@ sub ip_changed {
my $url;
my $lonhost= $r->dir_config('lonHostID');
my $switchto = $lonhost;
- if ($rule_in_effect eq 'balancer') {
+ if ($rule_in_effect ne 'offloadedto') {
my $hosthere;
- if ($dataref->{'role'}) {
- my ($adom,$aname);
- if ($dataref->{'role'} =~ m{^au\./($match_domain)/$}) {
- $adom = $1;
- $aname = $dataref->{'username'};
- } elsif ($dataref->{'role'} =~ m{^(?:ca|aa)\./($match_domain)/($match_username)$}) {
- $adom = $1;
- $aname = $2;
- }
- if ($adom ne '' && $aname ne '') {
- my $ahome = &Apache::lonnet::homeserver($aname,$adom);
- unless ($ahome eq 'no_host') {
- my @ids=&Apache::lonnet::current_machine_ids();
- if ($ahome && grep(/^\Q$ahome\E$/,@ids)) {
- $hosthere = 1;
+ my @ids=&Apache::lonnet::current_machine_ids();
+ unless ($rule_in_effect eq 'balancer') {
+ if (grep(/^\Q$rule_in_effect\E$/,@ids)) {
+ $hosthere = 1;
+ }
+ }
+ unless ($hosthere) {
+ if ($dataref->{'role'}) {
+ my ($adom,$aname);
+ if ($dataref->{'role'} =~ m{^au\./($match_domain)/$}) {
+ $adom = $1;
+ $aname = $dataref->{'username'};
+ } elsif ($dataref->{'role'} =~ m{^(?:ca|aa)\./($match_domain)/($match_username)$}) {
+ $adom = $1;
+ $aname = $2;
+ }
+ if ($adom ne '' && $aname ne '') {
+ my $ahome = &Apache::lonnet::homeserver($aname,$adom);
+ unless ($ahome eq 'no_host') {
+ if ($ahome && grep(/^\Q$ahome\E$/,@ids)) {
+ $hosthere = 1;
+ }
}
}
}
}
- unless ($hosthere) {
- my $hostname = &Apache::lonnet::hostname($dataref->{'server'});
+ unless ($hosthere) {
+ my $hostname;
+ if ($rule_in_effect eq 'balancer') {
+ $hostname = &Apache::lonnet::hostname($dataref->{'server'});
+ if ($hostname) {
+ $switchto = $dataref->{'server'};
+ }
+ } else {
+ $hostname = &Apache::lonnet::hostname($rule_in_effect);
+ if ($hostname) {
+ $switchto = $rule_in_effect;
+ }
+ }
if ($hostname) {
- $switchto = $dataref->{'server'};
my $protocol = $Apache::lonnet::protocol{$switchto};
$protocol = 'http' if ($protocol ne 'https');
$url = $protocol.'://'.$hostname;
- $message .= '
'.
- &mt('As a result, your LON-CAPA session is being redirected to the server where you originally logged in.');
+ if ($rule_in_effect eq 'balancer') {
+ $message .= '
'.
+ &mt('As a result, your LON-CAPA session is being redirected to the server where you originally logged in.');
+ } else {
+ $message .= '
'.
+ &mt('As a result, your LON-CAPA session is being redirected.');
+ }
}
}
}