[ http://issues.apache.org/jira/browse/MODPYTHON-161?page=all ]
     
Work on MODPYTHON-161 started by Graham Dumpleton

> Wrong interpreter chosen with req.add_handler()/PythonInterpPerDirective.
> -------------------------------------------------------------------------
>
>          Key: MODPYTHON-161
>          URL: http://issues.apache.org/jira/browse/MODPYTHON-161
>      Project: mod_python
>         Type: Bug

>   Components: core
>     Versions: 3.3
>     Reporter: Graham Dumpleton
>     Assignee: Graham Dumpleton

>
> Having fixed MODPYTHON-160, if using:
> # .htaccess
> SetHandler mod_python
> PythonInterpPerDirective On
> PythonFixupHandler interpreter_1
> # interpreter_1.py
> from mod_python import apache
> import os, sys
> directory = os.path.dirname(__file__)
> def fixuphandler(req):
>     req.log_error("fixuphandler")
>     req.log_error("interpreter=%s"%req.interpreter)
>     req.log_error("directory=%s"%req.hlist.directory)
>     req.add_handler("PythonHandler","interpreter_1",directory)
>     return apache.OK
> def handler(req):
>     req.log_error("handler")
>     req.log_error("interpreter=%s"%req.interpreter)
>     req.log_error("directory=%s"%req.hlist.directory)
>     req.content_type = 'text/plain'
>     req.write('hello')
>     return apache.OK
> when select_interp_name() in src/mod_python.c tries to determine the 
> interpreter name, for PythonInterPerDirective, it will use the value as 
> supplied as directory argument to req.add_handler(). In doing this though, it 
> doesn't consider the fact that the directory may not have a trailing slash 
> and since interpreter names for PythonInterpPerDirective always have a 
> trailing slash, the handler will not be executed in correct interpreter 
> context.
> [Sun Apr 16 17:20:00 2006] [notice] mod_python: (Re)importing module 
> 'interpreter_1'
> [Sun Apr 16 17:20:00 2006] [error] [client ::1] fixuphandler
> [Sun Apr 16 17:20:00 2006] [error] [client ::1] 
> interpreter=/Users/grahamd/Workspaces/testing/interpreter-1/
> [Sun Apr 16 17:20:00 2006] [error] [client ::1] 
> directory=/Users/grahamd/Workspaces/testing/interpreter-1/
> [Sun Apr 16 17:20:00 2006] [notice] mod_python: (Re)importing module 
> 'interpreter_1'
> [Sun Apr 16 17:20:00 2006] [error] [client ::1] handler
> [Sun Apr 16 17:20:00 2006] [error] [client ::1] 
> interpreter=/Users/grahamd/Workspaces/testing/interpreter-1
> [Sun Apr 16 17:20:00 2006] [error] [client ::1] 
> directory=/Users/grahamd/Workspaces/testing/interpreter-1
> A further problem is that normally the path indicating where a directive was 
> defined is internally calculated from Apache configuration and thus always 
> uses POSIX directory conventions, ie., forward slash. If the above code were 
> run on Win32, the directory calculated from __file__ is going to most likely 
> use DOS directory conventions, ie., backward slash. Thus, even if a trailing 
> slash were to be added, it still will not work because the remainder of the 
> path is going to use backward slash and thus the interpreter name still will 
> not match what it probably should be.
> The main purpose of the directory argument to req.add_handler() is to know 
> where to find the module referenced in the handler argument. In this case it 
> is also used to determine the Python interpreter name. The fix may be that 
> the interpreter name be determined in some other way based on the interpreter 
> in use when the req.add_handler() call was made.
> This is just part of problems I can possibly see with calculation of 
> interpreter names for handlers. More on this another time. :-)

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira

Reply via email to