--- loncom/auth/lonacc.pm 2007/01/12 15:44:27 1.106 +++ loncom/auth/lonacc.pm 2007/11/06 02:26:07 1.112 @@ -1,7 +1,7 @@ # The LearningOnline Network # Cookie Based Access Handler # -# $Id: lonacc.pm,v 1.106 2007/01/12 15:44:27 raeburn Exp $ +# $Id: lonacc.pm,v 1.112 2007/11/06 02:26:07 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -37,7 +37,6 @@ use Apache::loncommon(); use Apache::lonlocal; use Apache::restrictedaccess(); use Apache::blockedaccess(); -use CGI::Cookie(); use Fcntl qw(:flock); use LONCAPA; @@ -64,7 +63,7 @@ sub get_posted_cgi { if ($r->header_in('Content-length')) { $r->read($buffer,$r->header_in('Content-length'),0); } - unless ($buffer=~/^(\-+\w+)\s+Content\-Disposition\:\s*form\-data/si) { + unless ($buffer=~/^(\-+[\+\w]+)\s+Content\-Disposition\:\s*form\-data/si) { my @pairs=split(/&/,$buffer); my $pair; foreach $pair (@pairs) { @@ -84,7 +83,7 @@ sub get_posted_cgi { my $fmime=''; my $i; for ($i=0;$i<=$#lines;$i++) { - if ($lines[$i]=~/^$contentsep/) { + if ($lines[$i]=~/^\Q$contentsep\E/) { if ($name) { chomp($value); if ($fname) { @@ -145,12 +144,12 @@ sub get_posted_cgi { # returns OK if it was a SSO and user was handled # undef if not SSO or no means to hanle the user sub sso_login { - my ($r,$lonid,$handle) = @_; + my ($r,$handle) = @_; my $lonidsdir=$r->dir_config('lonIDsDir'); if (!($r->user && (!defined($env{'user.name'}) && !defined($env{'user.domain'})) - && (!$lonid || !-e "$lonidsdir/$handle.id" || $handle eq ''))) { + && ($handle eq ''))) { # not an SSO case or already logged in return undef; } @@ -160,6 +159,7 @@ sub sso_login { my $domain = $r->dir_config('lonDefDomain'); my $home=&Apache::lonnet::homeserver($user,$domain); if ($home !~ /(con_lost|no_host|no_such_host)/) { + &Apache::lonnet::logthis(" SSO authorized user $user "); if ($r->dir_config("lonBalancer") eq 'yes') { # login but immeaditly go to switch server to find us a new # machine @@ -193,6 +193,7 @@ sub sso_login { } return OK; } elsif (defined($r->dir_config('lonSSOUserUnknownRedirect'))) { + &Apache::lonnet::logthis(" SSO authorized unknown user $user "); $r->subprocess_env->set('SSOUserUnknown' => $user); $r->subprocess_env->set('SSOUserDomain' => $domain); $r->internal_redirect($r->dir_config('lonSSOUserUnknownRedirect')); @@ -205,17 +206,14 @@ sub sso_login { sub handler { my $r = shift; my $requrl=$r->uri; - my %cookies=CGI::Cookie->parse($r->header_in('Cookie')); - my $lonid=$cookies{'lonID'}; - my $cookie; - my $lonidsdir=$r->dir_config('lonIDsDir'); - - my $handle; - if ($lonid) { - $handle=&LONCAPA::clean_handle($lonid->value); + if (&Apache::lonnet::is_domainimage($requrl)) { + return OK; } - my $result = &sso_login($r,$lonid,$handle); + + my $handle = &Apache::lonnet::check_for_valid_session($r); + + my $result = &sso_login($r,$handle); if (defined($result)) { return $result } @@ -228,10 +226,10 @@ sub handler { if ($handle eq '') { $r->log_reason("Cookie $handle not valid", $r->filename); - } elsif ((-e "$lonidsdir/$handle.id") && ($handle ne '')) { + } elsif ($handle ne '') { # ------------------------------------------------------ Initialize Environment - + my $lonidsdir=$r->dir_config('lonIDsDir'); &Apache::lonnet::transfer_profile_to_env($lonidsdir,$handle); # --------------------------------------------------------- Initialize Language @@ -282,6 +280,14 @@ sub handler { $env{'user.domain'}; if ($requrl !~ /^\Q$start\E/) { $env{'user.error.msg'}="$requrl:bre:1:1:Access Denied"; + return HTTP_NOT_ACCEPTABLE; + } + } + if ($requrl =~ m|^/zipspool/|) { + my $start='/zipspool/zipout/'.$env{'user.name'}.":". + $env{'user.domain'}; + if ($requrl !~ /^\Q$start\E/) { + $env{'user.error.msg'}="$requrl:bre:1:1:Access Denied"; return HTTP_NOT_ACCEPTABLE; } }