Loading ...
Sorry, an error occurred while loading the content.

Re: [mp2] Declining from response handler bypasses other handlers

Expand Messages
  • HLiu@ap.org
    My suggestion are: 1. print $requested_dir; to see what you got. 2 changing your code return Apache::DECLINED unless exists $protected_dirs{$requested_dir};
    Message 1 of 4 , Oct 2, 2003
    • 0 Attachment
      My suggestion are:

      1. print $requested_dir; to see what you got.

      2 changing your code
      return Apache::DECLINED unless exists $protected_dirs{$requested_dir};
      to
      return Apache::DECLINED if $protected_dirs{$requested_dir};

      Hope it helpful.

      Willy



      "Matthew
      Westcott" To: modperl@...
      <matthew@torchbox cc:
      .com> Subject: [mp2] Declining from response handler bypasses other handlers

      10/02/2003 08:47
      AM






      I'm using a PerlResponseHandler to control access to selected
      directories of a site, and I've encountered a similar problem to that
      described in
      http://marc.theaimsgroup.com/?l=apache-modperl&m=106141216914801&w=2
      where returning a 'declined' status is skipping other handlers and
      going straight to Apache's default handler.

      My code is:

      package MyApache::Permissions;

      use strict;
      use warnings;
      use Apache::RequestRec ();
      use Apache::Const -compile => qw(OK DECLINED);

      my %protected_dirs = (
      'foo' => 1,
      'bar/baz' => 1,
      );

      sub handler {
      my $r = shift;

      my $requested_dir = $r->filename;
      $requested_dir =~ s|^/home/www/html/my_site/(.*)/[^\/]*$|$1|;

      return Apache::DECLINED unless exists $protected_dirs
      {$requested_dir};

      $r->content_type('text/plain');
      print "mod_perl has taken over the $requested_dir directory...\n";

      return Apache::OK;
      }
      1;

      and this is active over the whole site, using these directives in
      httpd.conf:
      <Location />
      SetHandler perl-script
      PerlResponseHandler MyApache::Permissions
      </Location>

      Blocking the named directories works fine, but for the unblocked
      directories (the ones for which I return Apache::DECLINED) the
      existing (non-Perl) response handlers aren't taking effect, so my
      ColdFusion scripts are being sent through unparsed, and directory
      indexes no longer work (/something/index.html works, /something/
      returns a 404).

      I suspect the problem is on the Apache side; the SetHandler is
      overriding all other handlers. Is there any way around this?

      I'm using Apache/2.0.47 and mod_perl/1.99_10, on Linux.

      - Matthew
    Your message has been successfully submitted and would be delivered to recipients shortly.