id,summary,reporter,owner,description,type,status,priority,component,severity,resolution,keywords,cc,release
3513,"[PATCH] login, logout redirect breaks with an AttributeError",Jeff Hammel,,"Following successful login, I get the following error on redirect:
{{{
Trac detected an internal error:
AttributeError: startswith
272. status = 303 # 'See Other' -- safe to use in response to a
POST
273. else:
274. status = 302 # 'Found' -- normal temporary redirect
275.
276. self.send_response(status)
277. if not url.startswith('http://') and not
url.startswith('https://'):
278. # Make sure the URL is absolute
279. scheme, host = urlparse.urlparse(self.base_url)[:2]
280. url = urlparse.urlunparse((scheme, host, url, None, None,
None))
281.
282. self.send_header('Location', url)
Local variables:
Name Value
permanent u'http://127.0.0.1:14828/master/'
self
status 301
url
* File ""/home/jhammel/tracforge/src/trac/trac/web/api.py"", line
172, in __getattr__
Code fragment:
167. callbacks dictionary.""""""
168. if name in self.callbacks:
169. value = self.callbacks[name](self)
170. setattr(self, name, value)
171. return value
172. raise AttributeError(name)
173.
174. def __repr__(self):
175. return '<%s ""%s %r"">' % (self.__class__.__name__,
self.method,
176. self.path_info)
177.
Local variables:
Name Value
name 'startswith'
self
File ""/home/jhammel/tracforge/src/trac/trac/web/main.py"", line 447, in
_dispatch_request
dispatcher.dispatch(req)
File ""/home/jhammel/tracforge/src/trac/trac/web/main.py"", line 206, in
dispatch
resp = chosen_handler.process_request(req)
File
""/home/jhammel/tracforge/src/accountmanagerplugin/acct_mgr/web_ui.py"",
line 433, in process_request
return auth.LoginModule.process_request(self, req)
File ""/home/jhammel/tracforge/src/trac/trac/web/auth.py"", line 107, in
process_request
self._redirect_back(req)
File
""/home/jhammel/tracforge/src/accountmanagerplugin/acct_mgr/web_ui.py"",
line 455, in _redirect_back
req.redirect(referer or self.env.abs_href())
File
""/home/jhammel/tracforge/src/tracforgeplugin/tracforge/linker/auth.py"",
line 76, in my_redirect
old_redirect(req, *args, **kwords)
File ""/home/jhammel/tracforge/src/trac/trac/web/api.py"", line 277, in
redirect
if not url.startswith('http://') and not url.startswith('https://'):
File ""/home/jhammel/tracforge/src/trac/trac/web/api.py"", line 172, in
__getattr__
raise AttributeError(name)
}}}
My setup is:
* trac trunk, r7338
* accountmanager trunk, r4116 (using htdigest and form authentication)
* tracforge 0.11, r4116
This seems to be because the request is being passed in to a method bound to the request (old_redirect is a bound method). This can be fixed with the following patch:
{{{
Index: linker/auth.py
===================================================================
--- linker/auth.py (revision 4116)
+++ linker/auth.py (working copy)
@@ -73,7 +73,7 @@
if parts[2].startswith(self.uri_root) and (not parts[1] or parts[1] == req.server_name):
Request.redirect(req, referer)
- old_redirect(req, *args, **kwords)
+ old_redirect(*args, **kwords)
req.redirect = my_redirect
}}}",defect,closed,normal,TracForgePlugin,normal,wontfix,,,0.11