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

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):
    return apache.OK

def handler(req):
    req.content_type = 'text/plain'
    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 
[Sun Apr 16 17:20:00 2006] [error] [client ::1] fixuphandler
[Sun Apr 16 17:20:00 2006] [error] [client ::1] 
[Sun Apr 16 17:20:00 2006] [error] [client ::1] 
[Sun Apr 16 17:20:00 2006] [notice] mod_python: (Re)importing module 
[Sun Apr 16 17:20:00 2006] [error] [client ::1] handler
[Sun Apr 16 17:20:00 2006] [error] [client ::1] 
[Sun Apr 16 17:20:00 2006] [error] [client ::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:
For more information on JIRA, see:

Reply via email to