Diff for /loncom/auth/lonauth.pm between versions 1.79 and 1.83

version 1.79, 2006/06/02 21:23:49 version 1.83, 2006/09/19 21:36:24
Line 40  use Apache::lonnet; Line 40  use Apache::lonnet;
 use Apache::lonmenu();  use Apache::lonmenu();
 use Fcntl qw(:flock);  use Fcntl qw(:flock);
 use Apache::lonlocal;  use Apache::lonlocal;
   use GDBM_File;
 my %FORM;  my %FORM;
   
 # ------------------------------------------------------------ Successful login  # ------------------------------------------------------------ Successful login
   
 sub success {  sub success {
     my ($r, $username, $domain, $authhost,$lowerurl) = @_;      my ($r, $username, $domain, $authhost, $lowerurl, $extra_env) = @_;
     my $lonids=$r->dir_config('lonIDsDir');      my $lonids=$r->dir_config('lonIDsDir');
   
     my $public=($username eq 'public' && $domain eq 'public');      my $public=($username eq 'public' && $domain eq 'public');
Line 170  sub success { Line 170  sub success {
     }      }
  }   }
   
  open(my $idf,">$lonids/$cookie.id");   $env{'user.environment'} = "$lonids/$cookie.id";
  unless (flock($idf,LOCK_EX)) {  
    if (tie(my %disk_env,'GDBM_File',"$lonids/$cookie.id",
    &GDBM_WRCREAT(),0640)) {
       &add_to_env(\%disk_env,\%initial_env);
       &add_to_env(\%disk_env,\%userenv,'environment.');
       &add_to_env(\%disk_env,$userroles);
       &add_to_env(\%disk_env,$extra_env);
       untie(%disk_env);
    } else {
     &Apache::lonnet::logthis("<font color=blue>WARNING: ".      &Apache::lonnet::logthis("<font color=blue>WARNING: ".
    'Could not obtain exclusive lock in lonauth: '.$!);     'Could not create environment storage in lonauth: '.$!);
     close($idf);  
     return 'error: '.$!;      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");  
  }  
  close($idf);  
     }      }
     $env{'request.role'}='cm';      $env{'request.role'}='cm';
     $env{'request.role.adv'}=$env{'user.adv'};      $env{'request.role.adv'}=$env{'user.adv'};
Line 253  $end_page Line 249  $end_page
 ENDSUCCESS  ENDSUCCESS
 }  }
   
   sub add_to_env {
       my ($idf,$env_data,$prefix) = @_;
       while (my ($key,$value) = each(%$env_data)) {
    $idf->{$prefix.$key} = $value;
    $env{$prefix.$key}   = $value;
       }
   }
   
 # --------------------------------------------------------------- Failed login!  # --------------------------------------------------------------- Failed login!
   
 sub failed {  sub failed {
Line 446  ENDFAILED Line 450  ENDFAILED
     &Apache::lonnet::logthis('Non-privileged user attempting switch user');      &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;      return OK;
 }  }
   

Removed from v.1.79  
changed lines
  Added in v.1.83


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