Diff for /loncom/auth/lonauth.pm between versions 1.64 and 1.69

version 1.64, 2005/02/07 20:33:04 version 1.69, 2005/07/07 06:18:37
Line 25 Line 25
 #  #
 # http://www.lon-capa.org/  # http://www.lon-capa.org/
 #  #
 # 5/21/99,5/22,5/25,5/26,5/27,5/29,6/2,6/11,6/14,6/15  
 # 16/11,12/16,  
 # 1/14,2/24,2/28,2/29,3/7,5/29,5/30,5/31,6/1,6/5,6/29,  
 # 7/1,7/10,10/2,10/5,10/9,10/26,10/30,11/10,  
 # 05/28,05/29 Gerd Kortemeyer  
 # 07/28,08/03 Gerd Kortemeyer  
 # 8/20 Gerd Kortemeyer  
   
 package Apache::lonauth;  package Apache::lonauth;
   
Line 43  use CGI::Cookie(); Line 36  use CGI::Cookie();
 use DynaLoader; # for Crypt::DES version  use DynaLoader; # for Crypt::DES version
 use Crypt::DES;  use Crypt::DES;
 use Apache::loncommon();  use Apache::loncommon();
 use Apache::lonnet();  use Apache::lonnet;
 use Apache::lonmenu();  use Apache::lonmenu();
 use Fcntl qw(:flock);  use Fcntl qw(:flock);
 use Apache::lonlocal;  use Apache::lonlocal;
Line 56  sub success { Line 49  sub success {
     my ($r, $username, $domain, $authhost,$lowerurl) = @_;      my ($r, $username, $domain, $authhost,$lowerurl) = @_;
     my $lonids=$r->dir_config('lonIDsDir');      my $lonids=$r->dir_config('lonIDsDir');
   
       my $public=($username eq 'public' && $domain eq 'public');
   
 # See if old ID present, if so, remove  # See if old ID present, if so, remove
   
     my $filename;      my ($filename,$cookie,$userroles);
     opendir(DIR,$lonids);      my $now=time;
     while ($filename=readdir(DIR)) {  
        if ($filename=~/^$username\_\d+\_$domain\_$authhost\.id$/) {  
   unlink($lonids.'/'.$filename);  
        }  
     }  
     closedir(DIR);  
   
 # Give them a new cookie      if ($public) {
    my $max_public=100;
    my $oldest;
    my $oldest_time=0;
    for(my $next=1;$next<=$max_public;$next++) {
       if (-e $lonids."/publicuser_$next.id") {
    my $mtime=(stat($lonids."/publicuser_$next.id"))[9];
    if ($mtime<$oldest_time || !$oldest_time) {
       $oldest_time=$mtime;
       $oldest=$next;
    }
       } else {
    $cookie="publicuser_$next";
    last;
       }
    }
    if (!$cookie) { $cookie="publicuser_$oldest"; }
       } else {
    opendir(DIR,$lonids);
    while ($filename=readdir(DIR)) {
       if ($filename=~/^$username\_\d+\_$domain\_$authhost\.id$/) {
    unlink($lonids.'/'.$filename);
       }
    }
    closedir(DIR);
   
     my $cookie;  # Give them a new cookie
     my $now=time;  
     $cookie="$username\_$now\_$domain\_$authhost";  
   
    $cookie="$username\_$now\_$domain\_$authhost";
       
 # Initialize roles  # Initialize roles
   
     my $userroles=Apache::lonnet::rolesinit($domain,$username,$authhost);   $userroles=Apache::lonnet::rolesinit($domain,$username,$authhost);
       }
 # ------------------------------------ Check browser type and MathML capability  # ------------------------------------ Check browser type and MathML capability
   
     my ($httpbrowser,$clientbrowser,$clientversion,$clientmathml,      my ($httpbrowser,$clientbrowser,$clientversion,$clientmathml,
Line 107  sub success { Line 120  sub success {
     if (($userenv{'interface'}) && (!$FORM{'interface'})) {      if (($userenv{'interface'}) && (!$FORM{'interface'})) {
  $FORM{'interface'}=$userenv{'interface'};   $FORM{'interface'}=$userenv{'interface'};
     }      }
     $ENV{'environment.remote'}=$userenv{'remote'};      $env{'environment.remote'}=$userenv{'remote'};
       if ($userenv{'texengine'} eq 'ttm') { $clientmathml=1; }
   
 # --------------- Do not trust query string to be put directly into environment  # --------------- Do not trust query string to be put directly into environment
     foreach ('imagesuppress','appletsuppress',      foreach ('imagesuppress','appletsuppress',
      'embedsuppress','fontenhance','blackwhite',       'embedsuppress','fontenhance','blackwhite',
Line 141  sub success { Line 156  sub success {
  print $idf "request.course.uri=\n";   print $idf "request.course.uri=\n";
  print $idf "request.course.sec=\n";   print $idf "request.course.sec=\n";
  print $idf "request.role=cm\n";   print $idf "request.role=cm\n";
         print $idf "request.role.adv=$ENV{'user.adv'}\n";          print $idf "request.role.adv=$env{'user.adv'}\n";
  print $idf "request.host=$ENV{'REMOTE_ADDR'}\n";   print $idf "request.host=$ENV{'REMOTE_ADDR'}\n";
    if ($public) {
       print $idf "environment.remote=off\n";
    }
  if ($FORM{'interface'}) {   if ($FORM{'interface'}) {
     $FORM{'interface'}=~s/\W//gs;      $FORM{'interface'}=~s/\W//gs;
     print $idf "browser.interface=$FORM{'interface'}\n";      print $idf "browser.interface=$FORM{'interface'}\n";
     $ENV{'browser.interface'}=$FORM{'interface'};      $env{'browser.interface'}=$FORM{'interface'};
     foreach ('imagesuppress','appletsuppress',      foreach ('imagesuppress','appletsuppress',
      'embedsuppress','fontenhance','blackwhite') {       'embedsuppress','fontenhance','blackwhite') {
  if (($FORM{$_} eq 'true') ||   if (($FORM{$_} eq 'true') ||
Line 158  sub success { Line 176  sub success {
  if ($userroles ne '') { print $idf "$userroles"; }   if ($userroles ne '') { print $idf "$userroles"; }
  $idf->close();   $idf->close();
     }      }
     $ENV{'request.role'}='cm';      $env{'request.role'}='cm';
     $ENV{'request.role.adv'}=$ENV{'user.adv'};      $env{'request.role.adv'}=$env{'user.adv'};
     $ENV{'browser.type'}=$clientbrowser;      $env{'browser.type'}=$clientbrowser;
 # -------------------------------------------------------------------- Log this  # -------------------------------------------------------------------- Log this
   
     &Apache::lonnet::log($domain,$username,$authhost,      &Apache::lonnet::log($domain,$username,$authhost,
Line 177  sub success { Line 195  sub success {
   
 # ------------------------------------------------------------ Get cookie ready  # ------------------------------------------------------------ Get cookie ready
   
       if ($public) { return $cookie; }
     $cookie="lonID=$cookie; path=/";      $cookie="lonID=$cookie; path=/";
 # -------------------------------------------------------- Menu script and info  # -------------------------------------------------------- Menu script and info
     my $windowinfo=&Apache::lonmenu::open($clientos);      my $windowinfo=&Apache::lonmenu::open($clientos);
Line 187  sub success { Line 206  sub success {
     my $bodytag=&Apache::loncommon::bodytag('Successful Login');      my $bodytag=&Apache::loncommon::bodytag('Successful Login');
     my $add=&addcontent();      my $add=&addcontent();
     my $continuelink;      my $continuelink;
     if (($ENV{'browser.interface'} eq 'textual') ||      if (($env{'browser.interface'} eq 'textual') ||
         ($ENV{'environment.remote'} eq 'off')) {          ($env{'environment.remote'} eq 'off')) {
  $continuelink="<a href=\"$lowerurl\">".&mt('Continue')."</a>";   $continuelink="<a href=\"$lowerurl\">".&mt('Continue')."</a>";
     }      }
 # ------------------------------------------------- Output for successful login  # ------------------------------------------------- Output for successful login
Line 345  ENDFAILED Line 364  ENDFAILED
        $FORM{$name}=$value;         $FORM{$name}=$value;
     }       } 
   
     if ((!$FORM{'uname'}) || (!$FORM{'upass'}) || (!$FORM{'udom'})) {      if ((!$FORM{'uname'}) || (!$FORM{'upass0'}) || (!$FORM{'udom'})) {
  failed($r,'Username, password and domain need to be specified.');   failed($r,'Username, password and domain need to be specified.');
         return OK;          return OK;
     }      }
Line 386  ENDFAILED Line 405  ENDFAILED
     else {      else {
  $cipher=new DES $keybin;   $cipher=new DES $keybin;
     }      }
       my $upass='';
       for (my $i=0;$i<=2;$i++) {
    my $chunk=
       $cipher->decrypt(unpack("a8",pack("H16",substr($FORM{'upass'.$i},0,16))));
   
     my $upass=$cipher->decrypt(   $chunk.=
        unpack("a8",pack("H16",substr($FORM{'upass'},0,16))));      $cipher->decrypt(unpack("a8",pack("H16",substr($FORM{'upass'.$i},16,16))));
   
     $upass.=$cipher->decrypt(   $chunk=substr($chunk,1,ord(substr($chunk,0,1)));
        unpack("a8",pack("H16",substr($FORM{'upass'},16,16))));   $upass.=$chunk;
       }
     $upass=substr($upass,1,ord(substr($upass,0,1)));  
   
 # ---------------------------------------------------------------- Authenticate  # ---------------------------------------------------------------- Authenticate
     my $authhost=Apache::lonnet::authenticate($FORM{'uname'},      my $authhost=Apache::lonnet::authenticate($FORM{'uname'},

Removed from v.1.64  
changed lines
  Added in v.1.69


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