http://qs321.pair.com?node_id=698353


in reply to Re^2: Mod_perl Handler
in thread Mod_perl Handler

You haven't provided any details about how you've configured Apache, but I'm guessing that you're trying to use both mod_cgi and mod_perl for the PerlResponseHandler, and I don't think that will work.

If you're using the mod_perl handler to check the cookie, why not put it into a separate phase, such as PerlAccessHandler. See the HTTP Handler docs for details.

Replies are listed 'Best First'.
Re^4: Mod_perl Handler
by iavian (Initiate) on Jul 17, 2008 at 18:17 UTC
    Alias /borg /home/vijay/src/atd/borg/html <Directory /home/vijay/src/atd/borg/html> Options +Includes +Indexes +FollowSymlinks XBitHack on Order allow,deny Allow from all DirectoryIndex index.htm index.html index.php </Directory> <Directory "/home/vijay/src/atd/borg/html/cgi-bin"> Options +ExecCGI +Includes +Indexes +FollowSymlinks XBitHack on Order allow,deny SetHandler cgi-script Allow from all </Directory> PerlModule Apache::GateKeeper <Location /borg> SetHandler perl-script PerlAccessHandler Apache::GateKeeper </Location> sub handler { my $r = shift; $r->subprocess_env(); my %cookies = fetch CGI::Cookie; loger(\%cookies); if (!defined($cookies{'U'})) { $r->headers_out->set( Location => 'https://login.iavian.com/lo +gin.php'); return Apache2::Const::REDIRECT; } return Apache2::Const::DECLINED; }
    Still cgi-scripts are not being executed , please help me

      You're mixing <Directory> and <Location> directives, and according to the docs, your <Location /borg> configuration prevents access to any URL-path that begins in /borg

      Also, It is important to never use <Location> when trying to restrict access to objects in the filesystem. This is because many different webspace locations (URLs) could map to the same filesystem location, allowing your restrictions to be circumvented.

      However, you can use mod_perl handlers in <Directory> configurations. If you look at the docs for PerlAccessHandler, you will see that it specifies a configuration scope of DIR which means that it can be used in <Location><Directory> and <File> directives.

      That said, i can't think of a way to call both Perl and Python CGIs from within the the same <Directory> config section, if you intend using SetHandler perl-script, because you require two SetHandler directives in the same space...

      So what can you do? Hmmm... good question. All you want to do is:

      • check a cookie using Perl and either:
        • redirect the user to login, or
        • run a python script

      So why don't have you have one call the other. Either have the python script execute the Perl script, or have the Perl script call the python script, but you'll have to be very careful about what scripts you allow it to call. For instance, if you're careless, and you just allow the user to pass in their own path without checking what it contains, then a path like /borg/../../../rm%20-Rf could be disastrous...

      Good luck!

      Good luck. I almost exclusively use mod_perl handlers, so I may be missing a trick.

      Clint