Re: [Zope] Silly question

2005-06-02 Thread Chris McDonough
The DWIM of not disallowing traversal of underscore names is useful
(because it makes it easy to conventionally mark attrs as private) but
it can definitely be a drag if you really do want to publish something
that begins with an underscore; this happens a lot when you need to deal
with allowing uploads of arbitrary filenames.

It might be useful to add something like you propose, except I might
take exception to the name isTraversable (everything is traversable,
really); maybe just set a magic attr on the object like
__allow_underscore_traversal__.

However, adding such a feature would need to be done carefully.  Much
usage of the Zope security machinery utterly depends on not being able
to traverse underscore names.

- C

On Thu, 2005-06-02 at 15:59 -0400, Dan Pozmanter wrote:
 Wouldn't it be cool if instead of checking explicitly for a leading
 '_' during traversal,
 you ran a method isTraversable (On SimpleItem for instance), which
 by default
 just checks for a leading '_', but could be overridden in a particular
 class?
  
 Dan
 ___
 Zope maillist  -  Zope@zope.org
 http://mail.zope.org/mailman/listinfo/zope
 **   No cross posts or HTML encoding!  **
 (Related lists - 
  http://mail.zope.org/mailman/listinfo/zope-announce
  http://mail.zope.org/mailman/listinfo/zope-dev )

___
Zope maillist  -  Zope@zope.org
http://mail.zope.org/mailman/listinfo/zope
**   No cross posts or HTML encoding!  **
(Related lists - 
 http://mail.zope.org/mailman/listinfo/zope-announce
 http://mail.zope.org/mailman/listinfo/zope-dev )


RE: [Zope] Silly question

2005-06-02 Thread Dan Pozmanter
The name could change easily enough.

How about __bobo_always_allow__

Which can either be:
None
A List of traversable items
A method that takes the path, and returns whether or not it is
traversable.

So for a path p:

if p[0] == '_':
if p_object.__bobo_always_allow__:
if type(p_object.__bobo_always_allow__) is type([]):
if p in p_object.__bobo_always_allow__:
#allow
else:
#Do what is normally done for '_' bits.
else:
if p_object.__bobo_always_allow__(p):
#allow
else:
#Do what is normally done for '_' bits. 
else:
#Do what is normally done for '_' bits.

Something vaguely like that.

That way you could either specify the exact items that start with '_',
or have a method determine it on the fly.

This way you would not automatically make all attributes that start with
an underscore
accessible, and the developer could specify exceptions.

-Original Message-
From: Chris McDonough [mailto:[EMAIL PROTECTED] 
Sent: Thursday, June 02, 2005 4:15 PM
To: Dan Pozmanter
Cc: zope@zope.org
Subject: Re: [Zope] Silly question

The DWIM of not disallowing traversal of underscore names is useful
(because it makes it easy to conventionally mark attrs as private) but
it can definitely be a drag if you really do want to publish something
that begins with an underscore; this happens a lot when you need to deal
with allowing uploads of arbitrary filenames.

It might be useful to add something like you propose, except I might
take exception to the name isTraversable (everything is traversable,
really); maybe just set a magic attr on the object like
__allow_underscore_traversal__.

However, adding such a feature would need to be done carefully.  Much
usage of the Zope security machinery utterly depends on not being able
to traverse underscore names.

- C

On Thu, 2005-06-02 at 15:59 -0400, Dan Pozmanter wrote:
 Wouldn't it be cool if instead of checking explicitly for a leading 
 '_' during traversal, you ran a method isTraversable (On SimpleItem 
 for instance), which by default just checks for a leading '_', but 
 could be overridden in a particular class?
  
 Dan
 ___
 Zope maillist  -  Zope@zope.org
 http://mail.zope.org/mailman/listinfo/zope
 **   No cross posts or HTML encoding!  **
 (Related lists -
  http://mail.zope.org/mailman/listinfo/zope-announce
  http://mail.zope.org/mailman/listinfo/zope-dev )

___
Zope maillist  -  Zope@zope.org
http://mail.zope.org/mailman/listinfo/zope
**   No cross posts or HTML encoding!  **
(Related lists -
 http://mail.zope.org/mailman/listinfo/zope-announce
 http://mail.zope.org/mailman/listinfo/zope-dev )


RE: [Zope] Silly question

2005-06-02 Thread Chris McDonough
Yup.

FWIW, the actual bit of code that would need to change is around line
299 of ZPublisher/BaseRequest.py:

if entry_name[:1]=='_':
if debug_mode:
return response.debugError(
  Object name begins with an underscore at: %s
% URL)
else: return response.forbiddenError(entry_name)

Those five lines are pretty important, and though a patch might be
small, the impact of any change is potentially very large.  I probably
wouldn't be able to spare the time to review any patch for inclusion in
mainline Zope that allowed underscore traversal from a security
perspective just because I'd be paranoid enough to need to do a lot of
work to properly do the review.  OTOH, you can probably get what you
want by patching your source locally.

- C


On Thu, 2005-06-02 at 16:34 -0400, Dan Pozmanter wrote:
 The name could change easily enough.
 
 How about __bobo_always_allow__
 
 Which can either be:
 None
 A List of traversable items
 A method that takes the path, and returns whether or not it is
 traversable.
 
 So for a path p:
 
 if p[0] == '_':
   if p_object.__bobo_always_allow__:
   if type(p_object.__bobo_always_allow__) is type([]):
   if p in p_object.__bobo_always_allow__:
   #allow
   else:
   #Do what is normally done for '_' bits.
   else:
   if p_object.__bobo_always_allow__(p):
   #allow
   else:
   #Do what is normally done for '_' bits. 
   else:
   #Do what is normally done for '_' bits.
 
 Something vaguely like that.
 
 That way you could either specify the exact items that start with '_',
 or have a method determine it on the fly.
 
 This way you would not automatically make all attributes that start with
 an underscore
 accessible, and the developer could specify exceptions.
 
 -Original Message-
 From: Chris McDonough [mailto:[EMAIL PROTECTED] 
 Sent: Thursday, June 02, 2005 4:15 PM
 To: Dan Pozmanter
 Cc: zope@zope.org
 Subject: Re: [Zope] Silly question
 
 The DWIM of not disallowing traversal of underscore names is useful
 (because it makes it easy to conventionally mark attrs as private) but
 it can definitely be a drag if you really do want to publish something
 that begins with an underscore; this happens a lot when you need to deal
 with allowing uploads of arbitrary filenames.
 
 It might be useful to add something like you propose, except I might
 take exception to the name isTraversable (everything is traversable,
 really); maybe just set a magic attr on the object like
 __allow_underscore_traversal__.
 
 However, adding such a feature would need to be done carefully.  Much
 usage of the Zope security machinery utterly depends on not being able
 to traverse underscore names.
 
 - C
 
 On Thu, 2005-06-02 at 15:59 -0400, Dan Pozmanter wrote:
  Wouldn't it be cool if instead of checking explicitly for a leading 
  '_' during traversal, you ran a method isTraversable (On SimpleItem 
  for instance), which by default just checks for a leading '_', but 
  could be overridden in a particular class?
   
  Dan
  ___
  Zope maillist  -  Zope@zope.org
  http://mail.zope.org/mailman/listinfo/zope
  **   No cross posts or HTML encoding!  **
  (Related lists -
   http://mail.zope.org/mailman/listinfo/zope-announce
   http://mail.zope.org/mailman/listinfo/zope-dev )
 

___
Zope maillist  -  Zope@zope.org
http://mail.zope.org/mailman/listinfo/zope
**   No cross posts or HTML encoding!  **
(Related lists - 
 http://mail.zope.org/mailman/listinfo/zope-announce
 http://mail.zope.org/mailman/listinfo/zope-dev )