--- loncom/lontrans.pm 2003/03/26 00:03:21 1.5 +++ loncom/lontrans.pm 2020/03/05 22:02:32 1.14.10.1 @@ -1,7 +1,7 @@ # The LearningOnline Network # URL translation for User Files # -# $Id: lontrans.pm,v 1.5 2003/03/26 00:03:21 albertel Exp $ +# $Id: lontrans.pm,v 1.14.10.1 2020/03/05 22:02:32 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -32,32 +32,33 @@ use strict; use Apache::Constants qw(:common :remotehost); use Apache::lonnet(); use Apache::File(); - -sub propath { - my ($udom,$uname)=@_; - $udom=~s/\W//g; - $uname=~s/\W//g; - my $subdir=$uname.'__'; - $subdir =~ s/(.)(.)(.).*/$1\/$2\/$3/; - my $proname="$Apache::lonnet::perlvar{'lonUsersDir'}/$udom/$subdir/$uname"; - return $proname; -} +use LONCAPA; sub handler { my $r = shift; - if ($r->uri=~m|^/uploaded/|) { - my (undef,undef,$udom,$uname,$ufile)=split(/\//,$r->uri); - $ufile=~s/^[\~\.]+//; - $r->filename(&propath($udom,$uname).'/userfiles/'.$ufile); - } elsif ($r->uri=~m|^/~|) { - #internal authentication, needs fixup. - my $fn = $r->uri(); # non users do not get the full path request - # through SCRIPT_FILENAME - $fn=~s|^/~(\w+)|/home/$1/public_html|; - $r->filename($fn); - } else { return DECLINED; } - return OK; + # FIXME line remove when mod_perl fixes BUG#4948 + $r->notes->set('error-notes' => ''); + if ($r->uri=~m|^(/raw)?/uploaded/|) { + my $fn = $r->uri(); + $fn=~s/^\/raw//; + my (undef,undef,$udom,$uname,@ufile)=split(/\//,$fn); + if (@ufile) { $ufile[-1]=~s/^[\~\.]+//; } + my $chome=&Apache::lonnet::homeserver($uname,$udom); + my $allowed=0; + my @ids=&Apache::lonnet::current_machine_ids(); + foreach my $id (@ids) { if ($id eq $chome) { $allowed=1; } } + if ($allowed) { + $r->filename(&propath($udom,$uname). + '/userfiles/'.(join('/',@ufile))); + } + return OK; + } elsif ($r->uri =~ m{^\Q/adm/wrapper/ext/https:/\E[^/]}) { + my $uri = $r->uri; + $uri =~ s{^(\Q/adm/wrapper/ext/https:/\E)}{$1/}; + $r->uri($uri); + } + return DECLINED; } 1;