[Zope-dev] Possible Zope 2.12 regression - Five page templates use restrictedTraverse for TAL

Martin Aspeli optilude+lists at gmail.com
Sat Dec 12 11:55:46 EST 2009


Hi,

Ages ago, I started a thread (I think on this list) about the use of TAL 
expression in Zope 3-style page templates (i.e. ViewPageTemplateFile's 
used on views) incorrectly performing security checks when using TAL 
expressions.

I think Tres fixed it at the time (I can't find the original mail), but 
in Zope 2.12.2 there seems to have been a regression. I'd like to make 
sure I've not missed something, though.

I see the problem in Plone 4.0a2 on Zope 2.12, trying to use 
plone.app.registry. This package has a class that derives from 
plone.registry.registry.Registry (a "ZTK-only" version) and SimpleItem 
(to get Zope 2 security and ZMI visibility). Otherwise, it does nothing.

There is a view for this class registered like this:

     <browser:page
         name="view"
         for="plone.registry.interfaces.IRegistry"
         template="records.pt"
         permission="cmf.ManagePortal"
         />

In records.pt, there is the following:

     <tr tal:repeat="record context/records/values">
	...
     </tr>

This fails with the stack trace below. However, if I change it to use a 
python: expression, it's all fine:

     <tr tal:repeat="record python:context.records.values()">
	...
     </tr>



As you can see from the stack trace, the TAL expression has resulted in 
the use of restrictedTraverse(). I think it should be using 
unrestrictedTraverse(), since ViewPageTemplateFile's are filesystem code.

(In this particular case, it's failing the restrictedTraverse check 
because 'records' is a property and so doesn't have an aq chain, but 
nevermind that).

Stack trace:

2009-12-13 00:40:13 ERROR Zope.SiteErrorLog 1260636013.580.4115611559 
http://localhost:8080/test/portal_registry/@@view
Traceback (innermost last):
   Module ZPublisher.Publish, line 127, in publish
   Module ZPublisher.mapply, line 77, in mapply
   Module Products.PDBDebugMode.runcall, line 70, in pdb_runcall
   Module ZPublisher.Publish, line 47, in call_object
   Module Products.Five.browser.metaconfigure, line 427, in __call__
   Module Products.Five.browser.pagetemplatefile, line 126, in __call__
   Module Products.Five.browser.pagetemplatefile, line 60, in __call__
   Module zope.pagetemplate.pagetemplate, line 115, in pt_render
   Module zope.tal.talinterpreter, line 271, in __call__
   Module zope.tal.talinterpreter, line 343, in interpret
   Module zope.tal.talinterpreter, line 888, in do_useMacro
   Module zope.tal.talinterpreter, line 343, in interpret
   Module zope.tal.talinterpreter, line 533, in do_optTag_tal
   Module zope.tal.talinterpreter, line 518, in do_optTag
   Module zope.tal.talinterpreter, line 513, in no_tag
   Module zope.tal.talinterpreter, line 343, in interpret
   Module zope.tal.talinterpreter, line 888, in do_useMacro
   Module zope.tal.talinterpreter, line 343, in interpret
   Module zope.tal.talinterpreter, line 533, in do_optTag_tal
   Module zope.tal.talinterpreter, line 518, in do_optTag
   Module zope.tal.talinterpreter, line 513, in no_tag
   Module zope.tal.talinterpreter, line 343, in interpret
   Module zope.tal.talinterpreter, line 946, in do_defineSlot
   Module zope.tal.talinterpreter, line 343, in interpret
   Module zope.tal.talinterpreter, line 533, in do_optTag_tal
   Module zope.tal.talinterpreter, line 518, in do_optTag
   Module zope.tal.talinterpreter, line 513, in no_tag
   Module zope.tal.talinterpreter, line 343, in interpret
   Module zope.tal.talinterpreter, line 954, in do_defineSlot
   Module zope.tal.talinterpreter, line 343, in interpret
   Module zope.tal.talinterpreter, line 533, in do_optTag_tal
   Module zope.tal.talinterpreter, line 518, in do_optTag
   Module zope.tal.talinterpreter, line 513, in no_tag
   Module zope.tal.talinterpreter, line 343, in interpret
   Module zope.tal.talinterpreter, line 946, in do_defineSlot
   Module zope.tal.talinterpreter, line 343, in interpret
   Module zope.tal.talinterpreter, line 819, in do_loop_tal
   Module zope.tales.tales, line 682, in setRepeat
   Module zope.tales.tales, line 696, in evaluate
    - URL: 
/Users/optilude/Development/Plone/Instances/Clients/Lotterywest/osc/src/plone.app.registry/plone/app/registry/browser/records.pt
    - Line 33, Column 12
    - Expression: <PathExpr standard:u'context/records/values'>
    - Names:
       {'args': (),
        'container': <Registry at /test/portal_registry>,
        'context': <Registry at /test/portal_registry>,
        'default': <object object at 0x1002c7b50>,
        'here': <Registry at /test/portal_registry>,
        'loop': {},
        'nothing': None,
        'options': {},
        'repeat': <Products.PageTemplates.Expressions.SafeMapping object 
at 0x108e8b3b0>,
        'request': <HTTPRequest, 
URL=http://localhost:8080/test/portal_registry/@@view>,
        'root': <Application at >,
        'template': 
<Products.Five.browser.pagetemplatefile.ViewPageTemplateFile object at 
0x10792b950>,
        'traverse_subpath': [],
        'user': <PropertiedUser 'admin'>,
        'view': <Products.Five.metaclass.SimpleViewClass from 
/Users/optilude/Development/Plone/Instances/Clients/Lotterywest/osc/src/plone.app.registry/plone/app/registry/browser/records.pt 
object at 0x10885c810>,
        'views': <Products.Five.browser.pagetemplatefile.ViewMapper 
object at 0x108cbb0d0>}
   Module zope.tales.expressions, line 217, in __call__
   Module Products.PageTemplates.Expressions, line 127, in _eval
   Module zope.tales.expressions, line 124, in _eval
   Module Products.PageTemplates.Expressions, line 76, in 
boboAwareZopeTraverse
   Module OFS.Traversable, line 312, in restrictedTraverse
   Module OFS.Traversable, line 247, in unrestrictedTraverse
    - __traceback_info__: ([], 'records')
Unauthorized: You are not allowed to access 'records' in this context
 > 
/Users/optilude/.buildout/eggs/Zope2-2.12.1-py2.6-macosx-10.6-i386.egg/OFS/Traversable.py(247)unrestrictedTraverse()


Martin

-- 
Author of `Professional Plone Development`, a book for developers who
want to work with Plone. See http://martinaspeli.net/plone-book



More information about the Zope-Dev mailing list