[ 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