--- loncom/homework/daxeopen.pm 2023/08/23 20:39:06 1.8 +++ loncom/homework/daxeopen.pm 2023/08/23 22:25:48 1.10 @@ -1,7 +1,7 @@ # The LearningOnline Network # Opening converted problems and directory listings for Daxe # -# $Id: daxeopen.pm,v 1.8 2023/08/23 20:39:06 raeburn Exp $ +# $Id: daxeopen.pm,v 1.10 2023/08/23 22:25:48 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -42,7 +42,7 @@ use Apache::lonnet; use Apache::pre_xml; use Apache::html_to_xml; use Apache::post_xml; - +use Apache::lonlocal; sub handler { my $request = shift; @@ -62,13 +62,12 @@ sub handler { sub convert_problem { my ($uri, $request) = @_; - if ($uri =~ m{^/priv/([^/]+)/([^/]+)/}) { my ($domain, $user) = ($1, $2); my ($uname, $udom) = ($env{'user.name'}, $env{'user.domain'}); if (!defined $uname || !defined $udom || $domain ne $udom || $user ne $uname) { $request->content_type('text/plain'); - $request->print("Forbidden URI: $uri"); + $request->print(&mt('Forbidden URI: [_1]',$uri)); $request->status(403); return OK; } @@ -95,7 +94,7 @@ sub convert_problem { return OK; } catch { $request->content_type('text/plain'); - $request->print("convert failed for $file: $_"); + $request->print(&mt('convert failed for [_1]:',$file)." $_"); $request->status(406); return OK; }; @@ -111,7 +110,7 @@ sub directory_listing { $res .= "\n"; } elsif ($uri !~ /^\/(priv|res)\//) { $request->content_type('text/plain'); - $request->print("Not found: $uri"); + $request->print(&mt('Not found: [_1]',$uri)); $request->status(404); return OK; } elsif ($uri =~ m{^/res/}) { @@ -119,12 +118,12 @@ sub directory_listing { my ($listref, $listerror) = &Apache::lonnet::dirlist($uri); if ($listerror) { $request->content_type('text/plain'); - $request->print("listing error: $listerror"); + $request->print(&mt('listing error: [_1]',$listerror)); $request->status(406); return OK; } elsif ($uri =~ m{^/res/[^/]+/$} && scalar(@{$listref}) == 0) { $request->content_type('text/plain'); - $request->print("Not found: $uri"); + $request->print(&mt('Not found: [_1]',$uri)); $request->status(404); return OK; } @@ -167,7 +166,7 @@ sub directory_listing { my $udom = $env{'user.domain'}; if (!defined $udom) { $request->content_type('text/plain'); - $request->print("Forbidden URI: $uri"); + $request->print(&mt('Forbidden URI: [_1]',$uri)); $request->status(403); return OK; } @@ -178,7 +177,7 @@ sub directory_listing { my ($uname, $udom) = ($env{'user.name'}, $env{'user.domain'}); if (!defined $uname || !defined $udom || $domain ne $udom) { $request->content_type('text/plain'); - $request->print("Forbidden URI: $uri"); + $request->print(&mt('Forbidden URI: [_1]',$uri)); $request->status(403); return OK; } @@ -189,21 +188,28 @@ sub directory_listing { my ($uname, $udom) = ($env{'user.name'}, $env{'user.domain'}); if (!defined $uname || !defined $udom || $domain ne $udom || $user ne $uname) { $request->content_type('text/plain'); - $request->print("Forbidden URI: $uri"); + $request->print(&mt('Forbidden URI: [_1]',$uri)); $request->status(403); return OK; } my $dirpath = &Apache::lonnet::filelocation('', $uri); if (! -e $dirpath) { $request->content_type('text/plain'); - $request->print("Not found: $uri"); + $request->print(&mt('Not found: [_1]',$uri)); $request->status(404); return OK; } $dirpath =~ s{/$}{}; - opendir my $dir, $dirpath or die "Cannot open directory: $dirpath"; - my @files = readdir $dir; - closedir $dir; + my @files; + if (opendir(my $dir, $dirpath)) { + @files = readdir($dir); + closedir($dir); + } else { + $request->content_type('text/plain'); + $request->print(&mt('Error opening directory: [_1]',$dirpath)); + $request->status(403); + return OK; + } my $dirname = $dirpath; $dirname =~ s{^.*/([^/]*)$}{$1}; $res .= "\n"; @@ -231,7 +237,7 @@ sub directory_listing { } } else { $request->content_type('text/plain'); - $request->print("Not found: $uri"); + $request->print(&mt('Not found: [_1]',$uri)); $request->status(404); return OK; } 500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.