[Zope-Checkins] SVN: Zope/branches/2.12/ fixed regression in Unauthorized handling:
Yvo Schubbe
y.2010 at wcm-solutions.de
Fri Apr 16 10:47:34 EDT 2010
Log message for revision 110974:
fixed regression in Unauthorized handling:
In previous Zope versions string exceptions were used and all exceptions
re-raised. This doesn't work with each kind of exception, but we can still do
it with Unauthorized exceptions. This way the special handling for Unauthorized
exceptions works again, HTTPResponse._unauthorized is called again. This is now
done after rendering to make sure we don't break logging and custom views.
Changed:
U Zope/branches/2.12/doc/CHANGES.rst
U Zope/branches/2.12/src/ZPublisher/tests/exception_handling.txt
UU Zope/branches/2.12/src/Zope2/App/startup.py
UU Zope/branches/2.12/src/Zope2/App/tests/testExceptionHook.py
-=-
Modified: Zope/branches/2.12/doc/CHANGES.rst
===================================================================
--- Zope/branches/2.12/doc/CHANGES.rst 2010-04-16 14:34:54 UTC (rev 110973)
+++ Zope/branches/2.12/doc/CHANGES.rst 2010-04-16 14:47:34 UTC (rev 110974)
@@ -11,6 +11,8 @@
Bugs Fixed
++++++++++
+- LP #372632, comments #15ff.: Fixed regression in Unauthorized handling.
+
- LP #563229: Process "evil" JSON cookies which contain double quotes in
violation of RFC 2965 / 2616.
Modified: Zope/branches/2.12/src/ZPublisher/tests/exception_handling.txt
===================================================================
--- Zope/branches/2.12/src/ZPublisher/tests/exception_handling.txt 2010-04-16 14:34:54 UTC (rev 110973)
+++ Zope/branches/2.12/src/ZPublisher/tests/exception_handling.txt 2010-04-16 14:47:34 UTC (rev 110974)
@@ -115,7 +115,8 @@
...
Redirect: LOCATION
-Handle zExceptions.Unauthorized.
+Handle zExceptions.Unauthorized. We take the 'WWW-Authenticate' header as a
+sign that HTTPResponse._unauthorized was called.
>>> from zExceptions import Unauthorized
>>> app.test_folder_1_.foo.exception = Unauthorized('ERROR VALUE')
@@ -129,6 +130,8 @@
True
>>> 'Error Value: ERROR VALUE' in browser.contents
True
+ >>> browser.headers['WWW-Authenticate']
+ 'basic realm="Zope2"'
>>> browser.handleErrors = False
>>> browser.open('http://localhost/test_folder_1_/foo')
Modified: Zope/branches/2.12/src/Zope2/App/startup.py
===================================================================
--- Zope/branches/2.12/src/Zope2/App/startup.py 2010-04-16 14:34:54 UTC (rev 110973)
+++ Zope/branches/2.12/src/Zope2/App/startup.py 2010-04-16 14:47:34 UTC (rev 110974)
@@ -7,7 +7,7 @@
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
-# FOR A PARTICULAR PURPOSE
+# FOR A PARTICULAR PURPOSE.
#
##############################################################################
"""Initialize the Zope2 Package and provide a published module
@@ -23,14 +23,12 @@
from Acquisition.interfaces import IAcquirer
from App.config import getConfiguration
from time import asctime
-from types import StringType, ListType
from zExceptions import upgradeException
from zExceptions import Redirect
from zExceptions import Unauthorized
from ZODB.POSException import ConflictError
import transaction
import AccessControl.User
-import App.FindHomes
import ExtensionClass
import imp
import logging
@@ -206,7 +204,7 @@
# raise the rendered value as the exception value
# (basically the same that 'raise_standardErrorMessage'
# does. The view is named 'index.html' because that's what
- # Zope 3 uses as well.
+ # zope.publisher uses as well.
view = queryMultiAdapter((v, REQUEST), name=u'index.html')
if view is not None:
if IAcquirer.providedBy(view) and IAcquirer.providedBy(published):
@@ -214,13 +212,19 @@
else:
view.__parent__ = published
v = view()
+ if issubclass(t, Unauthorized):
+ # Re-raise Unauthorized to make sure it is handled
+ # correctly. We can't do that with all exceptions
+ # because some don't work with the rendered v as
+ # argument.
+ raise t, v, traceback
response = REQUEST.RESPONSE
response.setStatus(t)
response.setBody(v)
return response
if (published is None or published is app or
- type(published) is ListType):
+ isinstance(published, list)):
# At least get the top-level object
published=app.__bobo_traverse__(REQUEST).__of__(
RequestContainer(REQUEST))
@@ -254,12 +258,18 @@
error_log_url=error_log_url)
if result is not None:
t, v, traceback = result
+ if issubclass(t, Unauthorized):
+ # Re-raise Unauthorized to make sure it is handled
+ # correctly. We can't do that with all exceptions
+ # because some don't work with the rendered v as
+ # argument.
+ raise t, v, traceback
response = REQUEST.RESPONSE
response.setStatus(t)
response.setBody(v)
return response
except TypeError:
- # Pre 2.6 call signature
+ # BBB: Pre Zope 2.6 call signature
f(client, REQUEST, t, v, traceback)
finally:
Property changes on: Zope/branches/2.12/src/Zope2/App/startup.py
___________________________________________________________________
Deleted: cvs2svn:cvs-rev
- 1.15
Added: svn:keywords
+ Id
Modified: Zope/branches/2.12/src/Zope2/App/tests/testExceptionHook.py
===================================================================
--- Zope/branches/2.12/src/Zope2/App/tests/testExceptionHook.py 2010-04-16 14:34:54 UTC (rev 110973)
+++ Zope/branches/2.12/src/Zope2/App/tests/testExceptionHook.py 2010-04-16 14:47:34 UTC (rev 110974)
@@ -347,7 +347,6 @@
class ExceptionViewsTest(PlacelessSetup, ExceptionHookTestCase):
def testCustomExceptionViewUnauthorized(self):
- from ZPublisher.HTTPResponse import HTTPResponse
from AccessControl import Unauthorized
registerExceptionView(IUnauthorized)
def f():
@@ -355,8 +354,7 @@
request = self._makeRequest()
client = StandardClient()
v = self.call_exc_value(client, request, f)
- self.failUnless(isinstance(v, HTTPResponse), v)
- self.failUnless(v.status == 401, (v.status, 401))
+ self.failUnless(isinstance(v, Unauthorized), v)
self.failUnless("Exception View: Unauthorized" in str(v))
self.failUnless("Context: StandardClient" in str(v))
Property changes on: Zope/branches/2.12/src/Zope2/App/tests/testExceptionHook.py
___________________________________________________________________
Added: svn:keywords
+ Id
Added: svn:eol-style
+ native
More information about the Zope-Checkins
mailing list