On Mar 6, 2015, at 5:29 PM, David E. Wheeler <da...@justatheory.com> wrote:

> And now it works just how I want.

I take it back. It works for files in the root, but not subdirectories.

So say my document root is /var/html, and a request comes in for /foo/bar.html. 
Apache has mapped it to /var/html/foo/bar.html, but in my PerlTypeHandler, I 
re-map it to /var/html/david/foo/bar.html and set finfo:

  sub handler {
      my $r = shift;

      # We only want to do this once per request.
      return DECLINED unless $r->is_initial_req;

      # Get the username.
      my $user = $r->user or return HTTP_UNAUTHORIZED;

      # Return forbidden if the subscriber ID subdirectory does not exist.
      my $doc_root = $r->document_root;
      my $sub_root = File::Spec->catdir($doc_root, $user);
      return HTTP_FORBIDDEN unless -d $sub_root;

      # Set the filename.                                                       
           
      my $file = File::Spec->catfile($sub_root, substr $r->uri, 1);
      $r->filename($file);
      $r->finfo(APR::Finfo::stat($file, APR::Const::FINFO_NORM, $r->pool));
      return DECLINED;
 }

I have no PerlReponseHandler, so Apache handles the response…and returns 404. 
Note that a request for /hi.txt; it’s only a request in a subdirectory, 
/foo/bar.html, that fails. Why? Why isn’t Apache able to find that file? Is 
there some other attribute of $r I need to set or unset?

Thanks,

David

Attachment: smime.p7s
Description: S/MIME cryptographic signature

Reply via email to