
|
If you were logged in you would be able to see more operations.
|
|
|
| Resolution Date: |
07/May/06 02:11 PM
|
|
When you have Apache ".htaccess" configuration like:
SetHandler mod_python
#PythonPath "['/Users/grahamd/Sites/auth']+sys.path"
<Files "page1.txt">
PythonHandler page1::handler_txt
</Files>
<Files "page2.txt">
PythonHandler page2::handler_txt
</Files>
and "page1.txt" is accessed, the req.hlist.directory attribute, which is supposed to list the name of the directory the PythonHandler directive was used in, gets set to "page1.txt/" instead.
This value then gets added into "sys.path". Because it doesn't actually identify the directory, the module "page1" cannot actually be found when the import is performed.
[Fri Feb 10 09:08:40 2006] [error] [client 127.0.0.1] PythonHandler page1::handler_txt: Traceback (most recent call last):
[Fri Feb 10 09:08:40 2006] [error] [client 127.0.0.1] PythonHandler page1::handler_txt: File "/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/site-packages/mod_python/apache.py", line 288, in HandlerDispatch\n log=debug)
[Fri Feb 10 09:08:40 2006] [error] [client 127.0.0.1] PythonHandler page1::handler_txt: File "/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/site-packages/mod_python/apache.py", line 508, in import_module\n f, p, d = imp.find_module(parts[i], path)
[Fri Feb 10 09:08:40 2006] [error] [client 127.0.0.1] PythonHandler page1::handler_txt: ImportError: No module named page1
The only workaround at this point is to explicitly define the PythonPath directive to include the directory the modules and ".htaccess" file are in. Not sure yet whether there is a way in Apache of determining the directory the "Files" directive is used in and set "req.hlist.directory" correctly.
|
|
Description
|
When you have Apache ".htaccess" configuration like:
SetHandler mod_python
#PythonPath "['/Users/grahamd/Sites/auth']+sys.path"
<Files "page1.txt">
PythonHandler page1::handler_txt
</Files>
<Files "page2.txt">
PythonHandler page2::handler_txt
</Files>
and "page1.txt" is accessed, the req.hlist.directory attribute, which is supposed to list the name of the directory the PythonHandler directive was used in, gets set to "page1.txt/" instead.
This value then gets added into "sys.path". Because it doesn't actually identify the directory, the module "page1" cannot actually be found when the import is performed.
[Fri Feb 10 09:08:40 2006] [error] [client 127.0.0.1] PythonHandler page1::handler_txt: Traceback (most recent call last):
[Fri Feb 10 09:08:40 2006] [error] [client 127.0.0.1] PythonHandler page1::handler_txt: File "/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/site-packages/mod_python/apache.py", line 288, in HandlerDispatch\n log=debug)
[Fri Feb 10 09:08:40 2006] [error] [client 127.0.0.1] PythonHandler page1::handler_txt: File "/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/site-packages/mod_python/apache.py", line 508, in import_module\n f, p, d = imp.find_module(parts[i], path)
[Fri Feb 10 09:08:40 2006] [error] [client 127.0.0.1] PythonHandler page1::handler_txt: ImportError: No module named page1
The only workaround at this point is to explicitly define the PythonPath directive to include the directory the modules and ".htaccess" file are in. Not sure yet whether there is a way in Apache of determining the directory the "Files" directive is used in and set "req.hlist.directory" correctly. |
Show » |
| Repository |
Revision |
Date |
User |
Message |
| ASF |
#392692 |
Sun Apr 09 08:58:35 UTC 2006 |
grahamd |
The PythonImport directive makes use of the handler list data structure
even though it specifically is for a different purpose. The handler list
data structure needs to be changed a bit in order to support changes
required to address MODPYTHON-63 and MODPYTHON-126. These changes may
make it unusable in the way that the PythonImport directive was using it,
or at least it will not be a good match. The PythonImport directive has
therefore been modified to use a standard Apache table object thereby
allowing arbitrary changes to the handler list data structure to be made as
necessary.
Note that although the current Apache table implementation probably results
in module imports occuring in the order they appear in the Apache
configuration file, if how it is implemented is changed, this may no longer
be the case. This is not seen as an issue as the documentation for the
PythonImport directive does not give any guarantees about ordering of
imports within the context of a specific interpreter and it would be bad
practice for modules to rely on mod_python importing them in a specific
order. If there are ordering requirements, it should be dealt with internal
to the module being imported so that it is self contained.
|
| Files Changed |
MODIFY
/httpd/mod_python/trunk/src/include/mod_python.h
MODIFY
/httpd/mod_python/trunk/src/mod_python.c
MODIFY
/httpd/mod_python/trunk/lib/python/mod_python/__init__.py
MODIFY
/httpd/mod_python/trunk/src/include/mpversion.h
MODIFY
/httpd/mod_python/trunk/src/include/mod_python.h.in
|
made changes - 09/Apr/06 02:16 PM
| Field |
Original Value |
New Value |
|
Assignee
|
|
Graham Dumpleton
[ grahamd
]
|
made changes - 09/Apr/06 02:17 PM
|
Status
|
Open
[ 1
]
|
In Progress
[ 3
]
|
made changes - 24/Apr/06 06:29 AM
|
Resolution
|
|
Fixed
[ 1
]
|
|
Status
|
In Progress
[ 3
]
|
Resolved
[ 5
]
|
|
Fix Version/s
|
|
3.3
[ 12310101
]
|
made changes - 07/May/06 02:09 PM
|
Resolution
|
Fixed
[ 1
]
|
|
|
Status
|
Resolved
[ 5
]
|
Reopened
[ 4
]
|
made changes - 07/May/06 02:11 PM
|
Status
|
Reopened
[ 4
]
|
Resolved
[ 5
]
|
|
Resolution
|
|
Fixed
[ 1
]
|
made changes - 07/May/06 02:11 PM
|
Comment
|
[ Reopened because using PythonInterpPerDirective in conjunction with dynamically registered filters causes mod_python to crash. Problem code is in select_interp_name().
py_handler *fh;
if (fname) {
if (is_input) {
fh = (py_handler *)apr_hash_get(conf->in_filters, fname,
APR_HASH_KEY_STRING);
} else {
fh = (py_handler *)apr_hash_get(conf->out_filters, fname,
APR_HASH_KEY_STRING);
}
s = fh->directory;
}
else {
s = hle->directory;
}
For a dynamically registered filter, fname is "mod_python" and the context provided with the filter handler is used to get details of dynamically registered filter. This information isn't available or used by select_interp_name() which assumes that filter is part of globally registered filters. It will not find the filter and so "fh" is NULL and accessing directory attribute causes a crash.
]
|
|
made changes - 05/Apr/07 11:47 AM
|
Status
|
Resolved
[ 5
]
|
Closed
[ 6
]
|
|
The only way to get access to the directory associated with the explicit/implicit "Directory" directive enclosing the "Files" directive is for there to exist some other Python directive outside of the "Files" directive so as to trigger the creation of a per_dir_config which would then hold the config_dir. This would still require the code which merges the per_dir_config's to give precedence to a config_dir in a parent context when it is an absolute pathname and the current isn't. Determining if a directory on Win32 is an absolute pathname can be hard and can't find a Apache routine which does it. Either way, it still would require another mod_python directive to have been used, meaning a dummy one may need to be added to fake things so it works properly.
Overall, what might be better is that support for using "Python*Handler" inside of "Files" directives be accomodated using other means based on future changes to be made to the module importer. Thus, need to revisit this problem when importer is fixed.