
|
If you were logged in you would be able to see more operations.
|
|
|
|
Environment:
|
gentoo Linux 2.4.20-gentoo-r8 apache-2.0.54-r8 mod_python-3.1.3-r1
|
|
| Resolution Date: |
25/Aug/06 01:03 AM
|
|
Below is a patch that does two things:
1) On module import failures, logfile contains additional information showing
system paths as well as module name.
2) Support of Python*Handler found in a wildcard-based directory. For example,
<IfModule mod_python.c>
<Directory /home/*/public_html/python>
AddHandler mod_python .py
PythonHandler helloworld
PythonDebug on
</Directory>
</IfModule>
which mirrors a corresponding perl setting and would allow the user to
place a mod_python handler in their $HOME/public_html/python directory.
In the current code, the wildcard is not translated, the sys.path update
will be invalid, and the user's module will not be accessible. The attached
patch provides a fix for this.
N.B. There are obvious security issues in using this type of configuration,
but this is very useful for dev environments, and security would implemented
via explicit alternatives anyhow.
Index: apache.py
===================================================================
RCS file: /home/cvspublic/httpd-python/lib/python/mod_python/apache.py,v
retrieving revision 1.83
diff -r1.83 apache.py
33a34,40
> def add_handler_path(hpath):
> import glob
> if hpath:
> for D in glob.glob(hpath):
> if os.path.isdir(D) and D not in sys.path:
> sys.path.insert(0, D)
>
170,171c177
< if filter.dir and (filter.dir not in sys.path):
< sys.path[:0] = [filter.dir]
---
> add_handler_path(filter.dir)
280,282c286
< dir = hlist.directory
< if dir and (dir not in sys.path):
< sys.path[:0] = [dir]
---
> add_handler_path(hlist.directory)
454c458,462
< f, p, d = imp.find_module(parts[i], path)
---
> try:
> f, p, d = imp.find_module(parts[i], path)
> except:
> _apache.log_error("mod_python: import error for module %s with path: %s and sys.path: %s"%(parts[i],path,sys.path))
> raise
|
|
Description
|
Below is a patch that does two things:
1) On module import failures, logfile contains additional information showing
system paths as well as module name.
2) Support of Python*Handler found in a wildcard-based directory. For example,
<IfModule mod_python.c>
<Directory /home/*/public_html/python>
AddHandler mod_python .py
PythonHandler helloworld
PythonDebug on
</Directory>
</IfModule>
which mirrors a corresponding perl setting and would allow the user to
place a mod_python handler in their $HOME/public_html/python directory.
In the current code, the wildcard is not translated, the sys.path update
will be invalid, and the user's module will not be accessible. The attached
patch provides a fix for this.
N.B. There are obvious security issues in using this type of configuration,
but this is very useful for dev environments, and security would implemented
via explicit alternatives anyhow.
Index: apache.py
===================================================================
RCS file: /home/cvspublic/httpd-python/lib/python/mod_python/apache.py,v
retrieving revision 1.83
diff -r1.83 apache.py
33a34,40
> def add_handler_path(hpath):
> import glob
> if hpath:
> for D in glob.glob(hpath):
> if os.path.isdir(D) and D not in sys.path:
> sys.path.insert(0, D)
>
170,171c177
< if filter.dir and (filter.dir not in sys.path):
< sys.path[:0] = [filter.dir]
---
> add_handler_path(filter.dir)
280,282c286
< dir = hlist.directory
< if dir and (dir not in sys.path):
< sys.path[:0] = [dir]
---
> add_handler_path(hlist.directory)
454c458,462
< f, p, d = imp.find_module(parts[i], path)
---
> try:
> f, p, d = imp.find_module(parts[i], path)
> except:
> _apache.log_error("mod_python: import error for module %s with path: %s and sys.path: %s"%(parts[i],path,sys.path))
> raise
|
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
|
|