You are viewing a plain text version of this content. The canonical link for it is here.
Posted to mod_python-dev@quetz.apache.org by "Nicolas Lehuen (JIRA)" <ji...@apache.org> on 2005/04/30 14:08:04 UTC

[jira] Resolved: (MODPYTHON-50) Session use outside of directive.

     [ http://issues.apache.org/jira/browse/MODPYTHON-50?page=all ]
     
Nicolas Lehuen resolved MODPYTHON-50:
-------------------------------------

     Assign To: Nicolas Lehuen
    Resolution: Fixed

Fixed as suggested by Graham.

> Session use outside of <Directory> directive.
> ---------------------------------------------
>
>          Key: MODPYTHON-50
>          URL: http://issues.apache.org/jira/browse/MODPYTHON-50
>      Project: mod_python
>         Type: Improvement
>   Components: core
>     Versions: 3.1.4
>     Reporter: Graham Dumpleton
>     Assignee: Nicolas Lehuen
>     Priority: Minor
>      Fix For: 3.2.0

>
> MODPYTHON-31 was previously closed with outcome of "Won't Fix".
> The orginal problem as described in the report was actually not connected
> to the Python traceback which was supplied, but the Python traceback
> still identified a problem which shold be fixed. Have logged this separate
> report to cover this issue.
> The issue again came up recently on the mailing list as:
>   http://www.modpython.org/pipermail/mod_python/2005-April/017933.html
> Specifically, if PythonHandler is specified outside of any <Directory>
> directive and sessions are used, you can get the error:
> Mod_python error: "PythonHandler mod_python.psp" 
> Traceback (most recent call last): 
>   File "/usr/lib/python2.3/site-packages/mod_python/apache.py", line 299, in 
> HandlerDispatch 
>     result = object(req) 
>   File "/usr/lib/python2.3/site-packages/mod_python/psp.py", line 297, in 
> handler 
>     p.run() 
>   File "/usr/lib/python2.3/site-packages/mod_python/psp.py", line 191, in run 
>     session = Session.Session(req) 
>   File "/usr/lib/python2.3/site-packages/mod_python/Session.py", line 389, in 
> Session 
>     timeout=timeout, lock=lock) 
>   File "/usr/lib/python2.3/site-packages/mod_python/Session.py", line 294, in 
> __init__ 
>     timeout=timeout, lock=lock) 
>   File "/usr/lib/python2.3/site-packages/mod_python/Session.py", line 132, in 
> __init__ 
>     Cookie.add_cookie(self._req, self.make_cookie()) 
>   File "/usr/lib/python2.3/site-packages/mod_python/Session.py", line 160, in 
> make_cookie 
>     c.path = dirpath[len(docroot):] 
> TypeError: unsubscriptable object 
> This is ultimately caused by code in BaseSession.make_cookie() which reads:
>     def make_cookie(self):
>         if self._secret:
>             c = Cookie.SignedCookie(COOKIE_NAME, self._sid,
>                                     secret=self._secret)
>         else:
>             c = Cookie.Cookie(COOKIE_NAME, self._sid)
>         config = self._req.get_options()
>         if config.has_key("ApplicationPath"):
>             c.path = config["ApplicationPath"]
>         else:
>             docroot = self._req.document_root()
>             # the path where *Handler directive was specified
>             dirpath = self._req.hlist.directory 
>             c.path = dirpath[len(docroot):]
>             # Sometimes there is no path, e.g. when Location
>             # is used. When Alias or UserDir are used, then
>             # the path wouldn't match the URI. In those cases
>             # just default to '/'
>             if not c.path or not self._req.uri.startswith(c.path):
>                 c.path = '/'
>         return c
> What happens when PythonHandler is defined outside of a <Directory>
> directive is that req.hlist.directory is None, thus indexing into dirpath
> fails.
> A workaround is to set ApplicationPath option, but true fix would be
> to write code something like:
>             # the path where *Handler directive was specified
>             dirpath = self._req.hlist.directory 
>             if dirpath:
>                 docroot = self._req.document_root()
>                 c.path = dirpath[len(docroot):]
>             else:
>                 c.path ='/'
>             # Sometimes there is no path, e.g. when Location
>             # is used. When Alias or UserDir are used, then
>             # the path wouldn't match the URI. In those cases
>             # just default to '/'
>             if not c.path or not self._req.uri.startswith(c.path):
>                 c.path = '/'
> This would eliminate the problem altogether and avoid user having to
> use workaround of setting ApplicationPath option.

-- 
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