Diff for /loncom/auth/lonauth.pm between versions 1.106 and 1.110

version 1.106, 2010/07/20 02:42:33 version 1.110, 2010/09/23 23:47:33
Line 40  use Apache::lonmenu(); Line 40  use Apache::lonmenu();
 use Apache::createaccount;  use Apache::createaccount;
 use Fcntl qw(:flock);  use Fcntl qw(:flock);
 use Apache::lonlocal;  use Apache::lonlocal;
   use Apache::File ();
 use HTML::Entities;  use HTML::Entities;
     
 # ------------------------------------------------------------ Successful login  # ------------------------------------------------------------ Successful login
Line 351  sub handler { Line 352  sub handler {
             &Apache::lonnet::get_dom('configuration',['usercreation'],$form{'udom'});              &Apache::lonnet::get_dom('configuration',['usercreation'],$form{'udom'});
         if (grep(/^login$/,@cancreate)) {          if (grep(/^login$/,@cancreate)) {
             my $domdesc = &Apache::lonnet::domain($form{'udom'},'description');              my $domdesc = &Apache::lonnet::domain($form{'udom'},'description');
             &check_can_host($r,\%form,'no_account_on_host',$domdesc);              unless (&check_can_host($r,\%form,'no_account_on_host',$domdesc)) {
                   return OK;
               }
             my $start_page =               my $start_page = 
                 &Apache::loncommon::start_page('Create a user account in LON-CAPA');                  &Apache::loncommon::start_page('Create a user account in LON-CAPA');
             my $lonhost = $r->dir_config('lonHostID');              my $lonhost = $r->dir_config('lonHostID');
Line 403  sub handler { Line 406  sub handler {
  }   }
     }      }
   
     &check_can_host($r,\%form,$authhost);      unless (&check_can_host($r,\%form,$authhost)) {
           return OK;
       }
   
     if ($r->dir_config("lonBalancer") eq 'yes') {      if ($r->dir_config("lonBalancer") eq 'yes') {
  &success($r,$form{'uname'},$form{'udom'},$authhost,'noredirect',undef,   &success($r,$form{'uname'},$form{'udom'},$authhost,'noredirect',undef,
  \%form);   \%form);
         my ($otherserver) = &choose_server($form{'udom'});          my ($otherserver) = &Apache::lonnet::choose_server($form{'udom'});
  $r->internal_redirect('/adm/switchserver?otherserver='.$otherserver);   $r->internal_redirect('/adm/switchserver?otherserver='.$otherserver.'&origurl='.$firsturl);
           return OK;
     } else {      } else {
  &success($r,$form{'uname'},$form{'udom'},$authhost,$firsturl,undef,  # ------------------------------------------------------- Do the load balancing
  \%form);  
   # ---------------------------------------------------------- Determine own load
           my $loadlim = $r->dir_config('lonLoadLim');
           my $loadavg;
           {
               my $loadfile=Apache::File->new('/proc/loadavg');
               $loadavg=<$loadfile>;
           }
           $loadavg =~ s/\s.*//g;
           my $loadpercent=sprintf("%.1f",100*$loadavg/$loadlim);
           my $userloadpercent=&Apache::lonnet::userload();
   
   # ---------------------------------------------------------- Are we overloaded?
           if ((($userloadpercent>100.0)||($loadpercent>100.0))) {
               my $unloaded=Apache::lonnet::spareserver($loadpercent,$userloadpercent,1,$form{'udom'});
               if ($unloaded) {
                   &success($r,$form{'uname'},$form{'udom'},$authhost,'noredirect',
                            undef,\%form);
                   $r->internal_redirect('/adm/switchserver?otherserver='.$unloaded.'&origurl='.$firsturl);
                   return OK;
               }
           }
           &success($r,$form{'uname'},$form{'udom'},$authhost,$firsturl,undef,
                    \%form);
           return OK;
     }      }
     return OK;  
 }  }
   
 sub check_can_host {  sub check_can_host {
Line 423  sub check_can_host { Line 452  sub check_can_host {
     my $canhost = 1;      my $canhost = 1;
     my $lonhost = $r->dir_config('lonHostID');      my $lonhost = $r->dir_config('lonHostID');
     my $udom = $form->{'udom'};      my $udom = $form->{'udom'};
     my @intdoms = &Apache::lonnet::get_internet_names($lonhost);      my @intdoms;
       my $internet_names = &Apache::lonnet::get_internet_names($lonhost);
       if (ref($internet_names) eq 'ARRAY') {
           @intdoms = @{$internet_names};
       }
     my $uprimary_id = &Apache::lonnet::domain($udom,'primary');      my $uprimary_id = &Apache::lonnet::domain($udom,'primary');
     my $uint_dom = &Apache::lonnet::internet_dom($uprimary_id);      my $uint_dom = &Apache::lonnet::internet_dom($uprimary_id);
     unless ($uint_dom ne '' && grep(/^\Q$uint_dom\E$/,@intdoms)) {      unless ($uint_dom ne '' && grep(/^\Q$uint_dom\E$/,@intdoms)) {
Line 445  sub check_can_host { Line 478  sub check_can_host {
     }      }
     unless ($canhost) {      unless ($canhost) {
         if ($authhost eq 'no_account_on_host') {          if ($authhost eq 'no_account_on_host') {
             my ($login_host,$hostname) = &choose_server($udom);              my ($login_host,$hostname) = &Apache::lonnet::choose_server($udom);
             &Apache::loncommon::content_type($r,'text/html');              &Apache::loncommon::content_type($r,'text/html');
             $r->send_http_header;              $r->send_http_header;
             if ($login_host ne '') {              if ($login_host ne '') {
Line 465  sub check_can_host { Line 498  sub check_can_host {
                           '<p>'.&mt('Currently a LON-CAPA server is not available within the [_1] domain for you to log-in to, to create an account.',$domdesc).'</p>'.                            '<p>'.&mt('Currently a LON-CAPA server is not available within the [_1] domain for you to log-in to, to create an account.',$domdesc).'</p>'.
                           &Apache::loncommon::end_page());                            &Apache::loncommon::end_page());
             }              }
             return OK;  
         } else {          } else {
             &success($r,$form->{'uname'},$udom,$authhost,'noredirect',undef,              &success($r,$form->{'uname'},$udom,$authhost,'noredirect',undef,
                      $form);                       $form);
             my ($otherserver) = &choose_server($udom);              my ($otherserver) = &Apache::lonnet::choose_server($udom);
             $r->internal_redirect('/adm/switchserver?otherserver='.$otherserver);              $r->internal_redirect('/adm/switchserver?otherserver='.$otherserver);
         }          }
     }      }
 }      return $canhost;
   
 sub choose_server {  
     my ($udom) = @_;  
     my %domconfhash = &Apache::loncommon::get_domainconf($udom);  
     my %servers = &Apache::lonnet::get_servers($udom);  
     my $lowest_load = 30000;  
     my ($login_host,$hostname);  
     foreach my $lonhost (keys(%servers)) {  
         my $loginvia = $domconfhash{$udom.'.login.loginvia_'.$lonhost};  
         if ($loginvia eq '') {  
             ($login_host, $lowest_load) =  
             &Apache::lonnet::compare_server_load($lonhost, $login_host, $lowest_load);  
         }  
     }  
     if ($login_host ne '') {  
         $hostname = $servers{$login_host};  
     }  
     return ($login_host,$hostname);  
 }  }
   
 1;  1;

Removed from v.1.106  
changed lines
  Added in v.1.110


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>