Diff for /loncom/auth/lonauth.pm between versions 1.65 and 1.72

version 1.65, 2005/02/26 05:37:23 version 1.72, 2005/11/15 17:55:03
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;
   use POSIX qw(strftime);
   
 my %FORM;  my %FORM;
   
Line 56  sub success { Line 50  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 121  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; }      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
Line 139  sub success { Line 153  sub success {
            print $idf "browser.localpath=$FORM{'localpath'}\n";             print $idf "browser.localpath=$FORM{'localpath'}\n";
            print $idf "browser.localres=$FORM{'localres'}\n";             print $idf "browser.localres=$FORM{'localres'}\n";
         }          }
           print $idf "server.domain=".$r->dir_config('lonDefDomain')."\n";
           my $timezone=POSIX::strftime("%Z",localtime(time));
           print $idf "server.timezone=$timezone\n";
  print $idf "request.course.fn=\n";   print $idf "request.course.fn=\n";
  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 160  sub success { Line 180  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 179  sub success { Line 199  sub success {
   
 # ------------------------------------------------------------ Get cookie ready  # ------------------------------------------------------------ Get cookie ready
   
       if ($public or $lowerurl eq 'noredirect') { 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 189  sub success { Line 211  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 347  ENDFAILED Line 369  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 388  ENDFAILED Line 410  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.65  
changed lines
  Added in v.1.72


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