On 06/12/10 20:39, Philippe M. Chiasson wrote:
On 10-11-30 07:51 , "Alex J. G. Burzyński" wrote:
Hi,

I've noticed that when using custom directives within nested<Location>
the result of $r->location reports the parent one only, instead of the
subdir.

However if I add PerlSetVar the $r->location will report the correct one.
Yup, you've stumbled on an interesting bug.


I've found this while working on Apache2::Layer (on cpan)

The way to replicate:
please follow the example
http://perl.apache.org/docs/2.0/user/config/custom.html#Merging_at_Work

and now add:

--- httpd.conf-orig    2010-11-30 12:06:57.491843181 +0000
+++ httpd.conf    2010-11-30 12:07:39.217629859 +0000
@@ -18,6 +18,7 @@
          PerlResponseHandler MyApache2::CustomDirectivesTest
      </Location>
      <Location /custom_directives_test/subdir>
+        PerlSetVar fix "problem"
          MyPlus 1
          MyList     "SubDir"
          MyAppend   "SubDir"
The reason this makes a difference is that without it, there are no
mod_perl directives (the custom ones are 'special'), so no configuration
pass for modperl in that directory.

Side-effect of that is that $r->location isn't tracked proprely.
Keep in mind that r->location is not an httpd api, but rather something
convenient mod_perl tracks. But not in this case, unfortunately.


If you take a look at those (around lines 68-70):
http://pastebin.com/PUtcczwA (with PerlSetVar)
http://pastebin.com/kfjMtZsT (without PerlSetVar)

you'll see that PerlSetVar creates directory context, while custom directive on its own does not.


However the Apache2::CmdParams->path returns the correct value and that's what I'm using in my module as a workaround.

Thanks,
Alex

Reply via email to