[ http://issues.apache.org/jira/browse/MODPYTHON-171?page=all ]
Work on MODPYTHON-171 stopped by Graham Dumpleton. > 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