[ http://issues.apache.org/jira/browse/MODPYTHON-161?page=all ]
Graham Dumpleton resolved MODPYTHON-161:
----------------------------------------
Fix Version: 3.3
Resolution: Fixed
> 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
> Fix For: 3.3
>
> 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