Uploaded image for project: 'mod_python'
  1. mod_python
  2. MODPYTHON-63

Handle wildcard in Directory to sys.path transfer

    Details

    • Type: Improvement
    • Status: Closed
    • Priority: Minor
    • Resolution: Fixed
    • Affects Version/s: 3.1.3
    • Fix Version/s: 3.3.1
    • Component/s: core
    • Labels:
      None
    • Environment:
      gentoo Linux 2.4.20-gentoo-r8 apache-2.0.54-r8 mod_python-3.1.3-r1

      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

        Attachments

          Activity

            People

            • Assignee:
              grahamd Graham Dumpleton
              Reporter:
              kwq_modpy Kevin Quick
            • Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: