--- loncom/auth/lonauth.pm 2006/06/27 14:09:46 1.80 +++ loncom/auth/lonauth.pm 2006/10/06 14:29:44 1.82.2.1 @@ -1,7 +1,7 @@ # The LearningOnline Network # User Authentication Module # -# $Id: lonauth.pm,v 1.80 2006/06/27 14:09:46 albertel Exp $ +# $Id: lonauth.pm,v 1.82.2.1 2006/10/06 14:29:44 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -170,6 +170,7 @@ sub success { } } + $env{'user.environment'} = "$lonids/$cookie.id"; open(my $idf,">$lonids/$cookie.id"); unless (flock($idf,LOCK_EX)) { &Apache::lonnet::logthis("WARNING: ". @@ -178,18 +179,10 @@ sub success { return 'error: '.$!; } - while (my ($key,$value) = each(%initial_env)) { - print $idf (&escape($key).'='.&escape($value)."\n"); - } - while (my ($key,$value) = each(%userenv)) { - print $idf (&escape('environment.'.$key).'='.&escape($value)."\n"); - } - while (my ($key,$value) = each(%{$userroles})) { - print $idf (&escape($key).'='.&escape($value)."\n"); - } - while (my ($key,$value) = each(%{$extra_env})) { - print $idf (&escape($key).'='.&escape($value)."\n"); - } + &add_to_env($idf,\%initial_env); + &add_to_env($idf,\%userenv,'environment.'); + &add_to_env($idf,$userroles); + &add_to_env($idf,$extra_env); close($idf); } $env{'request.role'}='cm'; @@ -256,6 +249,14 @@ $end_page ENDSUCCESS } +sub add_to_env { + my ($idf,$env_data,$prefix) = @_; + while (my ($key,$value) = each(%$env_data)) { + print $idf (&escape($prefix.$key).'='.&escape($value)."\n"); + $env{$prefix.$key} = $value; + } +} + # --------------------------------------------------------------- Failed login! sub failed { @@ -343,7 +344,9 @@ ENDFAILED my $buffer; - $r->read($buffer,$r->header_in('Content-length'),0); + if ($r->header_in('Content-length') > 0) { + $r->read($buffer,$r->header_in('Content-length'),0); + } my @pairs=split(/&/,$buffer); my $pair; my $name; my $value; undef %FORM; @@ -449,7 +452,12 @@ ENDFAILED &Apache::lonnet::logthis('Non-privileged user attempting switch user'); } } - &success($r,$FORM{'uname'},$FORM{'udom'},$authhost,$firsturl); + if ($r->dir_config("lonBalancer") eq 'yes') { + &success($r,$FORM{'uname'},$FORM{'udom'},$authhost,'noredirect'); + $r->internal_redirect('/adm/switchserver'); + } else { + &success($r,$FORM{'uname'},$FORM{'udom'},$authhost,$firsturl); + } return OK; }