[ http://issues.apache.org/jira/browse/MODPYTHON-63?page=all ]
Nicolas Lehuen updated MODPYTHON-63: ------------------------------------ Component: core > Handle wildcard in Directory to sys.path transfer > ------------------------------------------------- > > Key: MODPYTHON-63 > URL: http://issues.apache.org/jira/browse/MODPYTHON-63 > Project: mod_python > Type: Improvement > Components: core > Versions: 3.1.3 > Environment: gentoo Linux 2.4.20-gentoo-r8 apache-2.0.54-r8 > mod_python-3.1.3-r1 > Reporter: Kevin Quick > Priority: Minor > > 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 -- 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