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

Bug in setting interpreter name with PythonInterpPerDirectory.

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 2.7.10, 3.1.4
    • 3.2.7
    • None
    • None
    • UNIX/Win32

    Description

      The code in this case is in select_interp_name() and it too is wrong, although
      it has a couple of problems and gives slightly undesirable results on UNIX
      platforms as well in certain cirsumstances.

      Consider a publisher based content handler containing:

      def index(req):
      return req.interpreter

      If you do not have the PythonInterPerDirectory diective turned on, accessing
      that page will generate the virtual/actual host of the web server. Eg.

      grumpy.company.com

      If you turn on the PythonInterpPerDirectory and access the page explicitly
      as for example:

      http://localhost:8080/~grahamd/publisher/index.py

      You get something like:

      /Users/grahamd/Sites/publisher/

      The trailing slash "/" is put there by the select_interp_name() function. If this
      were on Win32, you probably end up with:

      /Users/grahamd/Sites/publisher\

      Now, if the actual directory is accessed instead and the automagic mapping to
      the index() method in the file is relied upon, ie., request as:

      http://localhost:8080/~grahamd/publisher

      You first get redirected to:

      http://localhost:8080/~grahamd/publisher/

      and the result you get back is:

      /Users/grahamd/Sites/publisher//

      Again, the final trailing '/' is put there by select_interp_name(). On Win32, this is
      thus likely to be:

      /Users/grahamd/Sites/publisher/\

      In summary, there are two problems here.

      First is that on Win32 it is most likely going to use '\' even though rest of the path
      uses POSIX naming style.

      Second is that the code doesn't check to see if there already is a trailing slash with
      the result that although access to the directory and the file should result in the
      same interpreter name, it doesn't.

      This latter problem means that the same index() method can get executed within
      the context of two different interpreters dependent on which URL you used. This
      shouldn't be the case and could cause problems in some applications.

      I haven't worked out the actual patch required in this case because of there being
      two issues and because I haven't looked through the code enough to know where
      to look to see if there already is a trailing slash. At the minimum, the use of SLASH_S
      should be changed to "/" in that part of the select_interp_name() method.

      For further discussion on this issue see mailing list thread at:

      http://www.modpython.org/pipermail/mod_python/2004-November/016788.html

      Attachments

        Activity

          People

            nlehuen Nicolas Lehuen
            grahamd Graham Phillip Dumpleton
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: