Diff for /loncom/auth/lonacc.pm between versions 1.111 and 1.120

version 1.111, 2007/10/02 01:09:59 version 1.120, 2008/11/20 14:37:52
Line 27 Line 27
 #  #
 ###  ###
   
   
 package Apache::lonacc;  package Apache::lonacc;
   
 use strict;  use strict;
Line 57  sub goodbye { Line 58  sub goodbye {
 ###############################################  ###############################################
   
 sub get_posted_cgi {  sub get_posted_cgi {
     my ($r) = @_;      my ($r,$fields) = @_;
   
     my $buffer;      my $buffer;
     if ($r->header_in('Content-length')) {      if ($r->header_in('Content-length')) {
  $r->read($buffer,$r->header_in('Content-length'),0);   $r->read($buffer,$r->header_in('Content-length'),0);
     }      }
     unless ($buffer=~/^(\-+\w+)\s+Content\-Disposition\:\s*form\-data/si) {      my $content_type = $r->header_in('Content-type');
       if ($content_type !~ m{^multipart/form-data}) {
  my @pairs=split(/&/,$buffer);   my @pairs=split(/&/,$buffer);
  my $pair;   my $pair;
  foreach $pair (@pairs) {   foreach $pair (@pairs) {
Line 72  sub get_posted_cgi { Line 74  sub get_posted_cgi {
     $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;      $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
     $name  =~ tr/+/ /;      $name  =~ tr/+/ /;
     $name  =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;      $name  =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
               if (ref($fields) eq 'ARRAY') {
                   next if (!grep(/^\Q$name\E$/,@{$fields}));
               }
     &Apache::loncommon::add_to_env("form.$name",$value);      &Apache::loncommon::add_to_env("form.$name",$value);
  }   }
     } else {      } else {
  my $contentsep=$1;   my ($contentsep) = ($content_type =~ /boundary=\"?([^\";,]+)\"?/);
  my @lines = split (/\n/,$buffer);   my @lines = split (/\n/,$buffer);
  my $name='';   my $name='';
  my $value='';   my $value='';
Line 83  sub get_posted_cgi { Line 88  sub get_posted_cgi {
  my $fmime='';   my $fmime='';
  my $i;   my $i;
  for ($i=0;$i<=$#lines;$i++) {   for ($i=0;$i<=$#lines;$i++) {
     if ($lines[$i]=~/^$contentsep/) {      if ($lines[$i]=~/^--\Q$contentsep\E/) {
  if ($name) {   if ($name) {
     chomp($value);      chomp($value);
     if ($fname) {                      if (ref($fields) eq 'ARRAY') {
  $env{"form.$name.filename"}=$fname;                          next if (!grep(/^\Q$name\E$/,@{$fields}));
  $env{"form.$name.mimetype"}=$fmime;                      }
     } else {                      if ($fname) {
  $value=~s/\s+$//s;                          if ($env{'form.symb'} ne '') {
     }                              my $size = (length($value))/(1024.0 * 1024.0);
     &Apache::loncommon::add_to_env("form.$name",$value);                              if (&upload_size_allowed($name,$size,$fname) eq 'ok') {
                                   $env{"form.$name.filename"}=$fname;
                                   $env{"form.$name.mimetype"}=$fmime;
                                   &Apache::loncommon::add_to_env("form.$name",$value);
                               }
                           } else {
                               $env{"form.$name.filename"}=$fname;
                               $env{"form.$name.mimetype"}=$fmime;
                               &Apache::loncommon::add_to_env("form.$name",$value);
                           }
                       } else {
                           $value=~s/\s+$//s;
                           &Apache::loncommon::add_to_env("form.$name",$value);
                       }
  }   }
  if ($i<$#lines) {   if ($i<$#lines) {
     $i++;      $i++;
Line 138  sub get_posted_cgi { Line 156  sub get_posted_cgi {
     $r->headers_in->unset('Content-length');      $r->headers_in->unset('Content-length');
 }  }
   
   #
   # Perform size checks for file uploads to essayresponse items in course context.
   #
   # Add form.HWFILESIZE.$part_$id to %env with file size (MB)
   # If file exceeds maximum allowed size, add form.HWFILETOOBIG.$part_$id to %env.
   #
    
   sub upload_size_allowed {
       my ($name,$size,$fname) = @_;
       if ($name =~ /^HWFILE(\w+)$/) {
           my $ident = $1;
           my $item = 'HWFILESIZE'.$ident;
           &Apache::loncommon::add_to_env("form.$item",$size);
           my $maxsize= &Apache::lonnet::EXT("resource.$ident.maxfilesize");
           if (!$maxsize) {
               $maxsize = 100.0;
           }
           if ($size > $maxsize) {
               my $warn = 'HWFILETOOBIG'.$ident;
               &Apache::loncommon::add_to_env("form.$warn",$fname);
               return;
           }
       }
       return 'ok';
   }
   
 # handle the case of the single sign on user, at this point $r->user   # handle the case of the single sign on user, at this point $r->user 
 # will be set and valid now need to find the loncapa user info and possibly  # will be set and valid now need to find the loncapa user info and possibly
 # balance them  # balance them
 # returns OK if it was a SSO and user was handled  # returns OK if it was a SSO and user was handled
 #         undef if not SSO or no means to hanle the user  #         undef if not SSO or no means to hanle the user
   
 sub sso_login {  sub sso_login {
     my ($r,$handle) = @_;      my ($r,$handle) = @_;
   
Line 180  sub sso_login { Line 225  sub sso_login {
       'server'    => $r->dir_config('lonHostID'),        'server'    => $r->dir_config('lonHostID'),
       'sso.login' => 1        'sso.login' => 1
       );        );
               if ($r->dir_config("ssodirecturl") == 1) {
                   $info{'origurl'} = $r->uri;
               }
             if (defined($r->dir_config("lonSSOReloginServer"))) {              if (defined($r->dir_config("lonSSOReloginServer"))) {
                 $info{'sso.reloginserver'} =                   $info{'sso.reloginserver'} = 
                     $r->dir_config('lonSSOReloginServer');                       $r->dir_config('lonSSOReloginServer'); 
Line 196  sub sso_login { Line 244  sub sso_login {
  &Apache::lonnet::logthis(" SSO authorized unknown user $user ");   &Apache::lonnet::logthis(" SSO authorized unknown user $user ");
         $r->subprocess_env->set('SSOUserUnknown' => $user);          $r->subprocess_env->set('SSOUserUnknown' => $user);
         $r->subprocess_env->set('SSOUserDomain' => $domain);          $r->subprocess_env->set('SSOUserDomain' => $domain);
  $r->internal_redirect($r->dir_config('lonSSOUserUnknownRedirect'));          my @cancreate;
           my %domconfig =
               &Apache::lonnet::get_dom('configuration',['usercreation'],$domain);
           if (ref($domconfig{'usercreation'}) eq 'HASH') {
               if (ref($domconfig{'usercreation'}{'cancreate'}) eq 'HASH') {
                   if (ref($domconfig{'usercreation'}{'cancreate'}{'selfcreate'}) eq 'ARRAY') {
                       @cancreate = @{$domconfig{'usercreation'}{'cancreate'}{'selfcreate'}};
                   } elsif (($domconfig{'usercreation'}{'cancreate'}{'selfcreate'} ne 'none') && 
                            ($domconfig{'usercreation'}{'cancreate'}{'selfcreate'} ne '')) {
                       @cancreate = ($domconfig{'usercreation'}{'cancreate'}{'selfcreate'});
                   }
               }
           }
           if (grep(/^sso$/,@cancreate)) {
               $r->internal_redirect('/adm/createaccount');
           } else {
       $r->internal_redirect($r->dir_config('lonSSOUserUnknownRedirect'));
           }
  $r->set_handlers('PerlHandler'=> undef);   $r->set_handlers('PerlHandler'=> undef);
  return OK;   return OK;
     }      }
Line 215  sub handler { Line 280  sub handler {
   
     my $result = &sso_login($r,$handle);      my $result = &sso_login($r,$handle);
     if (defined($result)) {      if (defined($result)) {
  return $result   return $result;
     }      }
   
   
Line 396  sub handler { Line 461  sub handler {
 1;  1;
 __END__  __END__
   
   
 =head1 NAME  =head1 NAME
   
 Apache::lonacc - Cookie Based Access Handler  Apache::lonacc - Cookie Based Access Handler
Line 456  store attempted access Line 522  store attempted access
   
 =back  =back
   
 =cut  =cut
   

Removed from v.1.111  
changed lines
  Added in v.1.120


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