[ http://issues.apache.org/jira/browse/MODPYTHON-171?page=all ]
Graham Dumpleton resolved MODPYTHON-171.
----------------------------------------
Resolution: Fixed
> Assignment to req.filename and POSIX style pathnames.
> -----------------------------------------------------
>
> Key: MODPYTHON-171
> URL: http://issues.apache.org/jira/browse/MODPYTHON-171
> Project: mod_python
> Issue Type: Bug
> Components: core
> Affects Versions: 3.2.8
> Reporter: Graham Dumpleton
> Assigned To: Graham Dumpleton
> Fix For: 3.3
>
>
> In Apache, all the path names relating to the matched target of a request are
> dealt with as POSIX style paths. That is, a forward slash is used as the
> directory separator even if the platform is Win32. The only real allowance
> for Win32 stuff is that drive specifiers may still occur in which case the
> drive letter is always converted to upper case.
> All the Apache C API functions dealing with manipulation of and specifically
> generation of modified paths will by default ensure that paths are maintained
> in this POSIX style. To have a path be generated in its true native form, you
> need to provide special flags to functions.
> When an Apache module writer works with paths, they would normally rely on
> the default behaviour and so long as they use the functions provided by the
> Apache C API, the result will always be consistent.
> Where would all this be a potential issue is where modules set the
> request_rec->filename attribute, ie., the req.filename attribute of the
> mod_python request object. In a C Apache module, as the result is always
> going to be in the correct form when request_rec->filename is modified,
> everything still comes out okay.
> The problem in mod_python, or more perhaps when using Python, is that all the
> directory manipulation routines in os.path as they exist on Win32 platform
> can generate paths with back slashes in them. Further, it is often convenient
> to use __file__ attribute of modules in some way, which again is going to use
> back slashes on Win32 platform. If the results from either of these is
> assigned to req.filename, the result request_rec->filename attribute is no
> longer going to be in the POSIX style form which is would normally exist if
> only the Apache C APIs were used.
> One area where this causes a problem (and which isn't fixed) was described in
> MODPYTHON-161, whereby setting req.filename to a path which includes back
> slashes instead of the required POSIX style forward slashes can result in the
> wrong interpreter being selected for a subsequent phase if the
> PythonInterpPerDirectory directive is being used. The case used for any drive
> specifier could similarly be a problem.
> Now although Python provides os.path.normpath(), that normalises a path in
> the native format. There is no function which can normalise a path and output
> it in the POSIX style format. Trying to create a function in Python which
> does may not yield the same result as what Apache expects.
> The actual function in Apache which can be used to normalise paths and which
> outputs the POSIX style path required is apr_filepath_merge(). The question
> is, should this be exposed in some way so that it is useable from mod_python,
> or for the req.filename case, should assignment to req.filename automatically
> trigger normalisation of the path to ensure that it simply just works all the
> time and isn't dependent on a user of mod_python realising they need to
> normalise it first in the POSIX style to ensure their code is portable across
> platforms.
--
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