Diff for /loncom/homework/daxeopen.pm between versions 1.6 and 1.7

version 1.6, 2017/02/24 17:34:55 version 1.7, 2023/08/23 20:33:06
Line 46  use Apache::post_xml; Line 46  use Apache::post_xml;
 sub handler {  sub handler {
     my $request = shift;      my $request = shift;
     my $uri = $request->uri;      my $uri = $request->uri;
     $uri =~ s/^\/daxeopen//;      $uri =~ s{^/daxeopen}{};
     &Apache::loncommon::no_cache($request);      &Apache::loncommon::no_cache($request);
     if ($uri =~ /\/$/) {      if ($uri =~ m{/$}) {
         return directory_listing($uri, $request);          return directory_listing($uri, $request);
     } elsif ($uri =~ /^\/priv\/.*\.(task|problem|exam|quiz|assess|survey|library|xml|html|htm|xhtml|xhtm)$/) {      } elsif ($uri =~ m{^/priv/.*\.(task|problem|exam|quiz|assess|survey|library|xml|html|htm|xhtml|xhtm)$}) {
         return convert_problem($uri, $request);          return convert_problem($uri, $request);
     } else {      } else {
         # Apache should send other files directly          # Apache should send other files directly
Line 62  sub handler { Line 62  sub handler {
 sub convert_problem {  sub convert_problem {
     my ($uri, $request) = @_;      my ($uri, $request) = @_;
           
     if ($uri =~ /^\/priv\/([^\/]+)\/([^\/]+)\//) {      if ($uri =~ m{^/priv/([^/]+)/([^/]+)/}) {
         my ($domain, $user) = ($1, $2);          my ($domain, $user) = ($1, $2);
         my ($uname, $udom) = ($env{'user.name'}, $env{'user.domain'});          my ($uname, $udom) = ($env{'user.name'}, $env{'user.domain'});
         if (!defined $uname || !defined $udom || $domain ne $udom || $user ne $uname) {          if (!defined $uname || !defined $udom || $domain ne $udom || $user ne $uname) {
Line 113  sub directory_listing { Line 113  sub directory_listing {
         $request->print("Not found: $uri");          $request->print("Not found: $uri");
         $request->status(404);          $request->status(404);
         return OK;          return OK;
     } elsif ($uri =~ /^\/res\//) {      } elsif ($uri =~ m{^/res/}) {
         # NOTE: dirlist does not return an error for /res/idontexist/          # NOTE: dirlist does not return an error for /res/idontexist/
  (my $listref, $listerror) = &Apache::lonnet::dirlist($uri);   (my $listref, $listerror) = &Apache::lonnet::dirlist($uri);
  if ($listerror) {   if ($listerror) {
Line 121  sub directory_listing { Line 121  sub directory_listing {
             $request->print("listing error: $listerror");              $request->print("listing error: $listerror");
             $request->status(406);              $request->status(406);
             return OK;              return OK;
  } elsif ($uri =~ /^\/res\/[^\/]+\/$/ && scalar(@{$listref}) == 0) {   } elsif ($uri =~ m{^/res/[^/]+/$} && scalar(@{$listref}) == 0) {
             $request->content_type('text/plain');              $request->content_type('text/plain');
             $request->print("Not found: $uri");              $request->print("Not found: $uri");
             $request->status(404);              $request->status(404);
             return OK;              return OK;
  }   }
         my $dirname = $uri;          my $dirname = $uri;
         $dirname =~ s/^.*\/([^\/]*)$/$1/;          $dirname =~ s{^.*/([^/]*)$}{$1};
         $res .= "<directory name=\"$dirname/\">\n";          $res .= "<directory name=\"$dirname/\">\n";
         if (ref($listref) eq 'ARRAY') {          if (ref($listref) eq 'ARRAY') {
             my @lines = @{$listref};              my @lines = @{$listref};
             foreach my $line (@lines) {              foreach my $line (@lines) {
                 my ($path, $dom, undef, $testdir, undef, undef, undef, undef, $size, undef, $mtime, undef, undef, undef, $obs, undef) = split(/\&/, $line, 16);                  my ($path, $dom, undef, $testdir, undef, undef, undef, undef, $size, undef, $mtime, undef, undef, undef, $obs, undef) = split(/\&/, $line, 16);
                 my $isdir = ($testdir & 16384) || $dom =~ /^(user|domain)$/;                  my $isdir = ($testdir & 16384) || $dom =~ /^(user|domain)$/;
                 $path =~ s/^\/home\/httpd\/html\/res\///;                  $path =~ s{^/home/httpd/html/res/}{};
                 next if $path eq '.' || $path eq '..';                  next if $path eq '.' || $path eq '..';
                 next if $path =~ /\.meta$/ || $obs || $path =~ /\.\d+\.[^.]+$/;                  next if $path =~ /\.meta$/ || $obs || $path =~ /\.\d+\.[^.]+$/;
                 if ($dom ne 'domain') {                  if ($dom ne 'domain') {
Line 151  sub directory_listing { Line 151  sub directory_listing {
                         next if (&Apache::lonnet::is_course($udom, $uname));                          next if (&Apache::lonnet::is_course($udom, $uname));
                     }                      }
                 }                  }
                 $path =~ s/\/$//;                  $path =~ s{/$}{};
                 my $name = $path;                  my $name = $path;
                 if ($isdir) {                  if ($isdir) {
                     $res .= "<directory name=\"$name\"/>\n";                      $res .= "<directory name=\"$name\"/>\n";
Line 172  sub directory_listing { Line 172  sub directory_listing {
         }          }
         $res .= "<directory name=\"priv\">\n";          $res .= "<directory name=\"priv\">\n";
         $res .= "<directory name=\"$udom\"/>\n";          $res .= "<directory name=\"$udom\"/>\n";
     } elsif ($uri =~ /^\/priv\/([^\/]+)\/$/) {      } elsif ($uri =~ m{^/priv/([^/]+)/$}) {
         my $domain = $1;          my $domain = $1;
         my ($uname, $udom) = ($env{'user.name'}, $env{'user.domain'});          my ($uname, $udom) = ($env{'user.name'}, $env{'user.domain'});
         if (!defined $uname || !defined $udom || $domain ne $udom) {          if (!defined $uname || !defined $udom || $domain ne $udom) {
Line 183  sub directory_listing { Line 183  sub directory_listing {
         }          }
         $res .= "<directory name=\"$domain\">\n";          $res .= "<directory name=\"$domain\">\n";
         $res .= "<directory name=\"$uname\"/>\n";          $res .= "<directory name=\"$uname\"/>\n";
     } elsif ($uri =~ /^\/priv\/([^\/]+)\/([^\/]+)\//) {      } elsif ($uri =~ m{^/priv/([^/]+)/([^/]+)/}) {
         my ($domain, $user) = ($1, $2);          my ($domain, $user) = ($1, $2);
         my ($uname, $udom) = ($env{'user.name'}, $env{'user.domain'});          my ($uname, $udom) = ($env{'user.name'}, $env{'user.domain'});
         if (!defined $uname || !defined $udom || $domain ne $udom || $user ne $uname) {          if (!defined $uname || !defined $udom || $domain ne $udom || $user ne $uname) {
Line 199  sub directory_listing { Line 199  sub directory_listing {
             $request->status(404);              $request->status(404);
             return OK;              return OK;
         }          }
         $dirpath =~ s/\/$//;          $dirpath =~ s{/$}{};
         opendir my $dir, $dirpath or die "Cannot open directory: $dirpath";          opendir my $dir, $dirpath or die "Cannot open directory: $dirpath";
         my @files = readdir $dir;          my @files = readdir $dir;
         closedir $dir;          closedir $dir;
         my $dirname = $dirpath;          my $dirname = $dirpath;
         $dirname =~ s/^.*\/([^\/]*)$/$1/;          $dirname =~ s{^.*/([^/]*)$}{$1};
         $res .= "<directory name=\"$dirname\">\n";          $res .= "<directory name=\"$dirname\">\n";
         foreach my $name (@files) {          foreach my $name (@files) {
             if ($name eq '.' || $name eq '..') {              if ($name eq '.' || $name eq '..') {

Removed from v.1.6  
changed lines
  Added in v.1.7


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