[Zope-Checkins] SVN: Zope/hotfixes/Hotfix_20080812/tags/1.0.0/ 'creating tag svn+ssh://[EMAIL PROTECTED]/repos/main/Zope/hotfixes/Hotfix_20080812/tags/1.0.0 from svn+ssh://[EMAIL PROTECTED]/repos/main
Log message for revision 89785: 'creating tag svn+ssh://[EMAIL PROTECTED]/repos/main/Zope/hotfixes/Hotfix_20080812/tags/1.0.0 from svn+ssh://[EMAIL PROTECTED]/repos/main/Zope/hotfixes/Hotfix_20080812/trunk' Changed: A Zope/hotfixes/Hotfix_20080812/tags/1.0.0/ -=- Copied: Zope/hotfixes/Hotfix_20080812/tags/1.0.0 (from rev 89784, Zope/hotfixes/Hotfix_20080812/trunk) ___ Zope-Checkins maillist - Zope-Checkins@zope.org http://mail.zope.org/mailman/listinfo/zope-checkins
[Zope-Checkins] SVN: Zope/hotfixes/Hotfix_20080812/trunk/version.txt 1.0.0
Log message for revision 89784: 1.0.0 Changed: U Zope/hotfixes/Hotfix_20080812/trunk/version.txt -=- Modified: Zope/hotfixes/Hotfix_20080812/trunk/version.txt === --- Zope/hotfixes/Hotfix_20080812/trunk/version.txt 2008-08-13 06:21:39 UTC (rev 89783) +++ Zope/hotfixes/Hotfix_20080812/trunk/version.txt 2008-08-13 06:22:05 UTC (rev 89784) @@ -1 +1 @@ -1.0 +1.0.0 ___ Zope-Checkins maillist - Zope-Checkins@zope.org http://mail.zope.org/mailman/listinfo/zope-checkins
[Zope-Checkins] SVN: Zope/hotfixes/Hotfix_20080812/trunk/version.txt updated
Log message for revision 89783: updated Changed: U Zope/hotfixes/Hotfix_20080812/trunk/version.txt -=- Modified: Zope/hotfixes/Hotfix_20080812/trunk/version.txt === --- Zope/hotfixes/Hotfix_20080812/trunk/version.txt 2008-08-13 06:21:23 UTC (rev 89782) +++ Zope/hotfixes/Hotfix_20080812/trunk/version.txt 2008-08-13 06:21:39 UTC (rev 89783) @@ -1 +1 @@ -0.2 +1.0 ___ Zope-Checkins maillist - Zope-Checkins@zope.org http://mail.zope.org/mailman/listinfo/zope-checkins
[Zope-Checkins] SVN: Zope/hotfixes/Hotfix_20080812/trunk/README.txt added
Log message for revision 89782: added Changed: A Zope/hotfixes/Hotfix_20080812/trunk/README.txt -=- Added: Zope/hotfixes/Hotfix_20080812/trunk/README.txt === --- Zope/hotfixes/Hotfix_20080812/trunk/README.txt (rev 0) +++ Zope/hotfixes/Hotfix_20080812/trunk/README.txt 2008-08-13 06:21:23 UTC (rev 89782) @@ -0,0 +1,71 @@ +Hotfix-20080812 README + +PythonScripts in Zope 2 can be misused for shutting down a complete Zope 2 +instance or misused for a local denial-of-service attack. This issue affects +only those Zope 2 instances where users have unrestricted access to the ZMI and +the ability to edit PythonScripts. This should usually not be the case for +instances where the Manager access is granted only to trusted persons. + +A PythonScript containing + + raise SystemExit + +will immediately shutdown the current Zope instance + +A PythonScript containing + + return 'foo'.encode('test.testall') + +would import the 'test' module of Python and execute all tests +(could be misused for a denial-of-service attack). Also other modules +could possibly be imported. + + + Affected Versions + +- Zope 2.7.0 to Zope 2.11.2 + +- Earlier versions of Zope 2 are affected as well, but no new + releases for older major Zope releases (Zope 2.6 and earlier) will + be made. This Hotfix may work for older versions, but this has not + been tested. + + Installing the Hotfix + +This hotfix is installed as a standard Zope2 product. The following +examples assume that your Zope instance is located at +'/var/zope/instance': please adjust according to your actual +instance path. Also note that hotfix products are *not* intended +for installation into the "software home" of your Zope. + + 1. Unpack the tarball / zipfile for the Hotfix into a temporary + location:: + + $ cd /tmp + $ tar xzf ~/Hotfix_20080812.tar.gz + + 2. Copy or move the product directory from the unpacked directory + to the 'Products' directory of your Zope instance:: + + $ cp -a /tmp/Hotfix_20080812/ /var/zope/instance/Products/ + + 3. Restart Zope:: + + $ /var/zope/instance/bin/zopectl restart + + Uninstalling the Hotfix + +After upgrading Zope to one of the fixed versions, you should remove +this hotfix product from your Zope instance. + + 1. Remove the product directory from your instance 'Products':: + + $ rm -rf /var/zope/instance/Products/Hotfix_20080812/ + + 2. Restart Zope:: + + $ /var/zope/instance/bin/zopectl restart + + References + + http://www.zope.org/advisories/advisory-2008-08-12 ___ Zope-Checkins maillist - Zope-Checkins@zope.org http://mail.zope.org/mailman/listinfo/zope-checkins
[Zope-Checkins] SVN: Zope/trunk/lib/python/Products/PythonScripts/PythonScript.py Merge Maurits's r89745 as well: Proper English spelling of "cannot".
Log message for revision 89760: Merge Maurits's r89745 as well: Proper English spelling of "cannot". Changed: U Zope/trunk/lib/python/Products/PythonScripts/PythonScript.py -=- Modified: Zope/trunk/lib/python/Products/PythonScripts/PythonScript.py === --- Zope/trunk/lib/python/Products/PythonScripts/PythonScript.py 2008-08-12 22:26:28 UTC (rev 89759) +++ Zope/trunk/lib/python/Products/PythonScripts/PythonScript.py 2008-08-12 22:48:42 UTC (rev 89760) @@ -325,7 +325,7 @@ try: result = f(*args, **kw) except SystemExit: -raise ValueError('SystemExit can not be raised within a PythonScript') +raise ValueError('SystemExit cannot be raised within a PythonScript') if keyset is not None: # Store the result in the cache. ___ Zope-Checkins maillist - Zope-Checkins@zope.org http://mail.zope.org/mailman/listinfo/zope-checkins
[Zope-Checkins] SVN: Zope/hotfixes/Hotfix_20080812/tags/0.2/ 'creating tag svn+ssh://[EMAIL PROTECTED]/repos/main/Zope/hotfixes/Hotfix_20080812/tags/0.2 from svn+ssh://[EMAIL PROTECTED]/repos/main/Zop
Log message for revision 89750: 'creating tag svn+ssh://[EMAIL PROTECTED]/repos/main/Zope/hotfixes/Hotfix_20080812/tags/0.2 from svn+ssh://[EMAIL PROTECTED]/repos/main/Zope/hotfixes/Hotfix_20080812/trunk' Changed: A Zope/hotfixes/Hotfix_20080812/tags/0.2/ -=- Copied: Zope/hotfixes/Hotfix_20080812/tags/0.2 (from rev 89749, Zope/hotfixes/Hotfix_20080812/trunk) ___ Zope-Checkins maillist - Zope-Checkins@zope.org http://mail.zope.org/mailman/listinfo/zope-checkins
[Zope-Checkins] SVN: Zope/hotfixes/Hotfix_20080812/trunk/version.txt updated
Log message for revision 89749: updated Changed: U Zope/hotfixes/Hotfix_20080812/trunk/version.txt -=- Modified: Zope/hotfixes/Hotfix_20080812/trunk/version.txt === --- Zope/hotfixes/Hotfix_20080812/trunk/version.txt 2008-08-12 18:20:56 UTC (rev 89748) +++ Zope/hotfixes/Hotfix_20080812/trunk/version.txt 2008-08-12 18:21:14 UTC (rev 89749) @@ -1 +1 @@ -0.1 +0.2 ___ Zope-Checkins maillist - Zope-Checkins@zope.org http://mail.zope.org/mailman/listinfo/zope-checkins
[Zope-Checkins] SVN: Zope/hotfixes/Hotfix_20080812/trunk/__init__.py some cleanup
Log message for revision 89748: some cleanup Changed: U Zope/hotfixes/Hotfix_20080812/trunk/__init__.py -=- Modified: Zope/hotfixes/Hotfix_20080812/trunk/__init__.py === --- Zope/hotfixes/Hotfix_20080812/trunk/__init__.py 2008-08-12 18:18:43 UTC (rev 89747) +++ Zope/hotfixes/Hotfix_20080812/trunk/__init__.py 2008-08-12 18:20:56 UTC (rev 89748) @@ -10,6 +10,8 @@ # Python 2.5 and hopefully fixed in Python 2.4.6 release. +# Written by Marc-Andre Lemburg ([EMAIL PROTECTED]). +# (c) Copyright CNRI, All Rights Reserved. NO WARRANTY. def search_function(encoding): @@ -92,6 +94,8 @@ return entry +import encodings +encodings.search_function.func_code = search_function.func_code @@ -99,16 +103,10 @@ # raise SystemExit exploit in PythonScripts -import encodings -encodings.search_function.func_code = search_function.func_code - - import new from Products.PythonScripts.PythonScript import PythonScript, \ PythonScriptTracebackSupplement - - def _exec(self, bound_names, args, kw): """Call a Python Script @@ -162,4 +160,3 @@ PythonScript._exec = _exec - ___ Zope-Checkins maillist - Zope-Checkins@zope.org http://mail.zope.org/mailman/listinfo/zope-checkins
[Zope-Checkins] SVN: Zope/trunk/lib/python/Products/PythonScripts/PythonScript.py wording
Log message for revision 89747: wording Changed: U Zope/trunk/lib/python/Products/PythonScripts/PythonScript.py -=- Modified: Zope/trunk/lib/python/Products/PythonScripts/PythonScript.py === --- Zope/trunk/lib/python/Products/PythonScripts/PythonScript.py 2008-08-12 18:17:15 UTC (rev 89746) +++ Zope/trunk/lib/python/Products/PythonScripts/PythonScript.py 2008-08-12 18:18:43 UTC (rev 89747) @@ -325,7 +325,7 @@ try: result = f(*args, **kw) except SystemExit: -raise ValueError('SystemExit can not raised with a PythonScript') +raise ValueError('SystemExit can not be raised within a PythonScript') if keyset is not None: # Store the result in the cache. ___ Zope-Checkins maillist - Zope-Checkins@zope.org http://mail.zope.org/mailman/listinfo/zope-checkins
[Zope-Checkins] SVN: Zope/trunk/lib/python/Products/PythonScripts/__init__.py re-added original (C) notice for 'encodings'
Log message for revision 89746: re-added original (C) notice for 'encodings' monkey-patch Changed: U Zope/trunk/lib/python/Products/PythonScripts/__init__.py -=- Modified: Zope/trunk/lib/python/Products/PythonScripts/__init__.py === --- Zope/trunk/lib/python/Products/PythonScripts/__init__.py2008-08-12 17:42:52 UTC (rev 89745) +++ Zope/trunk/lib/python/Products/PythonScripts/__init__.py2008-08-12 18:17:15 UTC (rev 89746) @@ -72,6 +72,8 @@ # Python 2.5 and hopefully fixed in Python 2.4.6 release. +# Written by Marc-Andre Lemburg ([EMAIL PROTECTED]). +# (c) Copyright CNRI, All Rights Reserved. NO WARRANTY. def search_function(encoding): ___ Zope-Checkins maillist - Zope-Checkins@zope.org http://mail.zope.org/mailman/listinfo/zope-checkins
[Zope-Checkins] SVN: Zope/hotfixes/Hotfix_20080812/trunk/__init__.py Since we are changing strings anyway... 'can not' -> 'cannot'.
Log message for revision 89745: Since we are changing strings anyway... 'can not' -> 'cannot'. Changed: U Zope/hotfixes/Hotfix_20080812/trunk/__init__.py -=- Modified: Zope/hotfixes/Hotfix_20080812/trunk/__init__.py === --- Zope/hotfixes/Hotfix_20080812/trunk/__init__.py 2008-08-12 17:22:20 UTC (rev 89744) +++ Zope/hotfixes/Hotfix_20080812/trunk/__init__.py 2008-08-12 17:42:52 UTC (rev 89745) @@ -153,7 +153,7 @@ try: result = f(*args, **kw) except SystemExit: -raise ValueError('SystemExit can not be raised within a PythonScript') +raise ValueError('SystemExit cannot be raised within a PythonScript') if keyset is not None: # Store the result in the cache. ___ Zope-Checkins maillist - Zope-Checkins@zope.org http://mail.zope.org/mailman/listinfo/zope-checkins
[Zope-Checkins] SVN: Zope/hotfixes/Hotfix_20080812/trunk/__init__.py Make text of raised ValueError a correct sentence:
Log message for revision 89743: Make text of raised ValueError a correct sentence: SystemExit can not raised with a PythonScript => SystemExit can not be raised within a PythonScript Changed: U Zope/hotfixes/Hotfix_20080812/trunk/__init__.py -=- Modified: Zope/hotfixes/Hotfix_20080812/trunk/__init__.py === --- Zope/hotfixes/Hotfix_20080812/trunk/__init__.py 2008-08-12 16:39:23 UTC (rev 89742) +++ Zope/hotfixes/Hotfix_20080812/trunk/__init__.py 2008-08-12 17:19:59 UTC (rev 89743) @@ -153,7 +153,7 @@ try: result = f(*args, **kw) except SystemExit: -raise ValueError('SystemExit can not raised with a PythonScript') +raise ValueError('SystemExit can not be raised within a PythonScript') if keyset is not None: # Store the result in the cache. ___ Zope-Checkins maillist - Zope-Checkins@zope.org http://mail.zope.org/mailman/listinfo/zope-checkins
[Zope-Checkins] SVN: Zope/hotfixes/Hotfix_20080812/tags/0.1/ 'creating tag svn+ssh://[EMAIL PROTECTED]/repos/main/Zope/hotfixes/Hotfix_20080812/tags/0.1 from svn+ssh://[EMAIL PROTECTED]/repos/main/Zop
Log message for revision 89740: 'creating tag svn+ssh://[EMAIL PROTECTED]/repos/main/Zope/hotfixes/Hotfix_20080812/tags/0.1 from svn+ssh://[EMAIL PROTECTED]/repos/main/Zope/hotfixes/Hotfix_20080812/trunk' Changed: A Zope/hotfixes/Hotfix_20080812/tags/0.1/ -=- Copied: Zope/hotfixes/Hotfix_20080812/tags/0.1 (from rev 89739, Zope/hotfixes/Hotfix_20080812/trunk) ___ Zope-Checkins maillist - Zope-Checkins@zope.org http://mail.zope.org/mailman/listinfo/zope-checkins
[Zope-Checkins] SVN: Zope/hotfixes/Hotfix_20080812/ moved
Log message for revision 89739: moved Changed: D Zope/hotfixes/Hotfix_20080812/__init__.py D Zope/hotfixes/Hotfix_20080812/tests/ A Zope/hotfixes/Hotfix_20080812/trunk/__init__.py A Zope/hotfixes/Hotfix_20080812/trunk/tests/ A Zope/hotfixes/Hotfix_20080812/trunk/version.txt D Zope/hotfixes/Hotfix_20080812/version.txt -=- Deleted: Zope/hotfixes/Hotfix_20080812/__init__.py === --- Zope/hotfixes/Hotfix_20080812/__init__.py 2008-08-12 15:41:50 UTC (rev 89738) +++ Zope/hotfixes/Hotfix_20080812/__init__.py 2008-08-12 15:42:13 UTC (rev 89739) @@ -1,165 +0,0 @@ - - - -# Monkey patch for LP #257276 -# -# This code is taken from the encodings module of Python 2.4. -# Note that this code is originally (C) CNRI and it is possibly not compatible -# with the ZPL and therefore should not live within svn.zope.org. However this -# checkin is blessed by Jim Fulton for now. The fix is no longer required with -# Python 2.5 and hopefully fixed in Python 2.4.6 release. - - - -def search_function(encoding): - -# Cache lookup -entry = _cache.get(encoding, _unknown) -if entry is not _unknown: -return entry - -# Import the module: -# -# First try to find an alias for the normalized encoding -# name and lookup the module using the aliased name, then try to -# lookup the module using the standard import scheme, i.e. first -# try in the encodings package, then at top-level. -# -norm_encoding = normalize_encoding(encoding) -aliased_encoding = _aliases.get(norm_encoding) or \ - _aliases.get(norm_encoding.replace('.', '_')) -if aliased_encoding is not None: -modnames = [aliased_encoding, -norm_encoding] -else: -modnames = [norm_encoding] -for modname in modnames: - -if not modname or '.' in modname: -continue - -try: -mod = __import__(modname, - globals(), locals(), _import_tail) -if not mod.__name__.startswith('encodings.'): -continue - -except ImportError: -pass -else: -break -else: -mod = None - -try: -getregentry = mod.getregentry -except AttributeError: -# Not a codec module -mod = None - -if mod is None: -# Cache misses -_cache[encoding] = None -return None - -# Now ask the module for the registry entry -entry = tuple(getregentry()) -if len(entry) != 4: -raise CodecRegistryError,\ - 'module "%s" (%s) failed to register' % \ - (mod.__name__, mod.__file__) -for obj in entry: -if not callable(obj): -raise CodecRegistryError,\ - 'incompatible codecs in module "%s" (%s)' % \ - (mod.__name__, mod.__file__) - -# Cache the codec registry entry -_cache[encoding] = entry - -# Register its aliases (without overwriting previously registered -# aliases) -try: -codecaliases = mod.getaliases() -except AttributeError: -pass -else: -for alias in codecaliases: -if not _aliases.has_key(alias): -_aliases[alias] = modname - -# Return the registry entry -return entry - - - - - -# Monkey patch for LP #257269 -# raise SystemExit exploit in PythonScripts - - -import encodings -encodings.search_function.func_code = search_function.func_code - - -import new -from Products.PythonScripts.PythonScript import PythonScript, \ - PythonScriptTracebackSupplement - - - -def _exec(self, bound_names, args, kw): -"""Call a Python Script - -Calling a Python Script is an actual function invocation. -""" -# Retrieve the value from the cache. -keyset = None -if self.ZCacheable_isCachingEnabled(): -# Prepare a cache key. -keyset = kw.copy() -asgns = self.getBindingAssignments() -name_context = asgns.getAssignedName('name_context', None) -if name_context: -keyset[name_context] = aq_parent(self).getPhysicalPath() -name_subpath = asgns.getAssignedName('name_subpath', None) -if name_subpath: -keyset[name_subpath] = self._getTraverseSubpath() -# Note: perhaps we should cache based on name_ns also. -keyset['*'] = args -result = self.ZCacheable_get(keywords=keyset, default=_marker) -if result is not _marker: -# Got a cached value. -return result - -#__traceback_info__ = bound_names, args, kw, self.func_defaults - -ft = self._v_ft -if ft is Non
[Zope-Checkins] SVN: Zope/hotfixes/Hotfix_20080812/t added
Log message for revision 89738: added Changed: A Zope/hotfixes/Hotfix_20080812/tags/ A Zope/hotfixes/Hotfix_20080812/trunk/ -=- ___ Zope-Checkins maillist - Zope-Checkins@zope.org http://mail.zope.org/mailman/listinfo/zope-checkins
[Zope-Checkins] SVN: Zope/hotfixes/Hotfix_20080812/__init__.py cleanup
Log message for revision 89737: cleanup Changed: U Zope/hotfixes/Hotfix_20080812/__init__.py -=- Modified: Zope/hotfixes/Hotfix_20080812/__init__.py === --- Zope/hotfixes/Hotfix_20080812/__init__.py 2008-08-12 15:09:12 UTC (rev 89736) +++ Zope/hotfixes/Hotfix_20080812/__init__.py 2008-08-12 15:28:45 UTC (rev 89737) @@ -1,12 +1,14 @@ + # Monkey patch for LP #257276 - +# # This code is taken from the encodings module of Python 2.4. # Note that this code is originally (C) CNRI and it is possibly not compatible # with the ZPL and therefore should not live within svn.zope.org. However this # checkin is blessed by Jim Fulton for now. The fix is no longer required with # Python 2.5 and hopefully fixed in Python 2.4.6 release. + def search_function(encoding): @@ -90,8 +92,13 @@ return entry -# MONKEY + + +# Monkey patch for LP #257269 +# raise SystemExit exploit in PythonScripts + + import encodings encodings.search_function.func_code = search_function.func_code ___ Zope-Checkins maillist - Zope-Checkins@zope.org http://mail.zope.org/mailman/listinfo/zope-checkins
[Zope-Checkins] SVN: Zope/hotfixes/Hotfix_20080812/tests/testPythonScript.py added
Log message for revision 89736: added Changed: A Zope/hotfixes/Hotfix_20080812/tests/testPythonScript.py -=- Added: Zope/hotfixes/Hotfix_20080812/tests/testPythonScript.py === --- Zope/hotfixes/Hotfix_20080812/tests/testPythonScript.py (rev 0) +++ Zope/hotfixes/Hotfix_20080812/tests/testPythonScript.py 2008-08-12 15:09:12 UTC (rev 89736) @@ -0,0 +1,113 @@ +## +# +# Copyright (c) 2002 Zope Corporation and Contributors. All Rights Reserved. +# +# This software is subject to the provisions of the Zope Public License, +# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution. +# 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 +# +## +import os, unittest, warnings + +from Products.PythonScripts.PythonScript import PythonScript +from AccessControl.SecurityManagement import newSecurityManager +from AccessControl.SecurityManagement import noSecurityManager +from RestrictedPython.tests.verify import verify + + +if __name__=='__main__': +here = os.getcwd() +else: +here = os.path.dirname(__file__) +if not here: +here = os.getcwd() + +class WarningInterceptor: + +_old_stderr = None +_our_stderr_stream = None + +def _trap_warning_output( self ): + +if self._old_stderr is not None: +return + +import sys +from StringIO import StringIO + +self._old_stderr = sys.stderr +self._our_stderr_stream = sys.stderr = StringIO() + +def _free_warning_output( self ): + +if self._old_stderr is None: +return + +import sys +sys.stderr = self._old_stderr + +# Test Classes + +def readf(name): +path = os.path.join(here, 'tscripts', '%s.ps' % name) +return open(path, 'r').read() + +class VerifiedPythonScript(PythonScript): + +def _newfun(self, code): +verify(code) +return PythonScript._newfun(self, code) + + +class PythonScriptTestBase(unittest.TestCase): +def setUp(self): +newSecurityManager(None, None) + +def tearDown(self): +noSecurityManager() + +def _newPS(self, txt, bind=None): +ps = VerifiedPythonScript('ps') +ps.ZBindings_edit(bind or {}) +ps.write(txt) +ps._makeFunction() +if ps.errors: +raise SyntaxError, ps.errors[0] +return ps + +def _filePS(self, fname, bind=None): +ps = VerifiedPythonScript(fname) +ps.ZBindings_edit(bind or {}) +ps.write(readf(fname)) +ps._makeFunction() +if ps.errors: +raise SyntaxError, ps.errors[0] +return ps + +class TestPythonScriptNoAq(PythonScriptTestBase): + +def testRaiseSystemExitLaunchpad257269(self): +ps = self._newPS("raise SystemExit") +self.assertRaises(ValueError, ps) + +def testEncodingTestDotTestAllLaunchpad257276(self): +ps = self._newPS("return 'foo'.encode('test.testall')") +self.assertRaises(LookupError, ps) + + + +def test_suite(): +suite = unittest.TestSuite() +suite.addTest(unittest.makeSuite(TestPythonScriptNoAq)) +return suite + + +def main(): +unittest.TextTestRunner().run(test_suite()) + + +if __name__ == '__main__': +main() ___ Zope-Checkins maillist - Zope-Checkins@zope.org http://mail.zope.org/mailman/listinfo/zope-checkins
[Zope-Checkins] SVN: Zope/hotfixes/Hotfix_20080812/tests/__init__.py added
Log message for revision 89735: added Changed: A Zope/hotfixes/Hotfix_20080812/tests/__init__.py -=- Added: Zope/hotfixes/Hotfix_20080812/tests/__init__.py === --- Zope/hotfixes/Hotfix_20080812/tests/__init__.py (rev 0) +++ Zope/hotfixes/Hotfix_20080812/tests/__init__.py 2008-08-12 15:06:13 UTC (rev 89735) @@ -0,0 +1 @@ +# place holder ___ Zope-Checkins maillist - Zope-Checkins@zope.org http://mail.zope.org/mailman/listinfo/zope-checkins
[Zope-Checkins] SVN: Zope/hotfixes/Hotfix_20080812/tests/ added
Log message for revision 89734: added Changed: A Zope/hotfixes/Hotfix_20080812/tests/ -=- ___ Zope-Checkins maillist - Zope-Checkins@zope.org http://mail.zope.org/mailman/listinfo/zope-checkins
[Zope-Checkins] SVN: Zope/hotfixes/Hotfix_20080812/__init__.py fixes
Log message for revision 89733: fixes Changed: U Zope/hotfixes/Hotfix_20080812/__init__.py -=- Modified: Zope/hotfixes/Hotfix_20080812/__init__.py === --- Zope/hotfixes/Hotfix_20080812/__init__.py 2008-08-12 15:02:25 UTC (rev 89732) +++ Zope/hotfixes/Hotfix_20080812/__init__.py 2008-08-12 15:05:38 UTC (rev 89733) @@ -96,9 +96,12 @@ encodings.search_function.func_code = search_function.func_code -from Products.PythonScripts.PythonScript import PythonScript +import new +from Products.PythonScripts.PythonScript import PythonScript, \ + PythonScriptTracebackSupplement + def _exec(self, bound_names, args, kw): """Call a Python Script ___ Zope-Checkins maillist - Zope-Checkins@zope.org http://mail.zope.org/mailman/listinfo/zope-checkins
[Zope-Checkins] SVN: Zope/hotfixes/Hotfix_20080812/ addedc
Log message for revision 89732: addedc Changed: U Zope/hotfixes/Hotfix_20080812/__init__.py A Zope/hotfixes/Hotfix_20080812/version.txt -=- Modified: Zope/hotfixes/Hotfix_20080812/__init__.py === --- Zope/hotfixes/Hotfix_20080812/__init__.py 2008-08-12 15:00:15 UTC (rev 89731) +++ Zope/hotfixes/Hotfix_20080812/__init__.py 2008-08-12 15:02:25 UTC (rev 89732) @@ -96,7 +96,7 @@ encodings.search_function.func_code = search_function.func_code -from Products.PythonScript.PythonScript import PythonScript +from Products.PythonScripts.PythonScript import PythonScript def _exec(self, bound_names, args, kw): @@ -153,4 +153,3 @@ PythonScript._exec = _exec - Added: Zope/hotfixes/Hotfix_20080812/version.txt === --- Zope/hotfixes/Hotfix_20080812/version.txt (rev 0) +++ Zope/hotfixes/Hotfix_20080812/version.txt 2008-08-12 15:02:25 UTC (rev 89732) @@ -0,0 +1 @@ +0.1 ___ Zope-Checkins maillist - Zope-Checkins@zope.org http://mail.zope.org/mailman/listinfo/zope-checkins
[Zope-Checkins] SVN: Zope/hotfixes/Hotfix_20080812/__init__.py added
Log message for revision 89731: added Changed: A Zope/hotfixes/Hotfix_20080812/__init__.py -=- Added: Zope/hotfixes/Hotfix_20080812/__init__.py === --- Zope/hotfixes/Hotfix_20080812/__init__.py (rev 0) +++ Zope/hotfixes/Hotfix_20080812/__init__.py 2008-08-12 15:00:15 UTC (rev 89731) @@ -0,0 +1,156 @@ + + +# Monkey patch for LP #257276 + +# This code is taken from the encodings module of Python 2.4. +# Note that this code is originally (C) CNRI and it is possibly not compatible +# with the ZPL and therefore should not live within svn.zope.org. However this +# checkin is blessed by Jim Fulton for now. The fix is no longer required with +# Python 2.5 and hopefully fixed in Python 2.4.6 release. + + +def search_function(encoding): + +# Cache lookup +entry = _cache.get(encoding, _unknown) +if entry is not _unknown: +return entry + +# Import the module: +# +# First try to find an alias for the normalized encoding +# name and lookup the module using the aliased name, then try to +# lookup the module using the standard import scheme, i.e. first +# try in the encodings package, then at top-level. +# +norm_encoding = normalize_encoding(encoding) +aliased_encoding = _aliases.get(norm_encoding) or \ + _aliases.get(norm_encoding.replace('.', '_')) +if aliased_encoding is not None: +modnames = [aliased_encoding, +norm_encoding] +else: +modnames = [norm_encoding] +for modname in modnames: + +if not modname or '.' in modname: +continue + +try: +mod = __import__(modname, + globals(), locals(), _import_tail) +if not mod.__name__.startswith('encodings.'): +continue + +except ImportError: +pass +else: +break +else: +mod = None + +try: +getregentry = mod.getregentry +except AttributeError: +# Not a codec module +mod = None + +if mod is None: +# Cache misses +_cache[encoding] = None +return None + +# Now ask the module for the registry entry +entry = tuple(getregentry()) +if len(entry) != 4: +raise CodecRegistryError,\ + 'module "%s" (%s) failed to register' % \ + (mod.__name__, mod.__file__) +for obj in entry: +if not callable(obj): +raise CodecRegistryError,\ + 'incompatible codecs in module "%s" (%s)' % \ + (mod.__name__, mod.__file__) + +# Cache the codec registry entry +_cache[encoding] = entry + +# Register its aliases (without overwriting previously registered +# aliases) +try: +codecaliases = mod.getaliases() +except AttributeError: +pass +else: +for alias in codecaliases: +if not _aliases.has_key(alias): +_aliases[alias] = modname + +# Return the registry entry +return entry + + +# MONKEY + +import encodings +encodings.search_function.func_code = search_function.func_code + + +from Products.PythonScript.PythonScript import PythonScript + + +def _exec(self, bound_names, args, kw): +"""Call a Python Script + +Calling a Python Script is an actual function invocation. +""" +# Retrieve the value from the cache. +keyset = None +if self.ZCacheable_isCachingEnabled(): +# Prepare a cache key. +keyset = kw.copy() +asgns = self.getBindingAssignments() +name_context = asgns.getAssignedName('name_context', None) +if name_context: +keyset[name_context] = aq_parent(self).getPhysicalPath() +name_subpath = asgns.getAssignedName('name_subpath', None) +if name_subpath: +keyset[name_subpath] = self._getTraverseSubpath() +# Note: perhaps we should cache based on name_ns also. +keyset['*'] = args +result = self.ZCacheable_get(keywords=keyset, default=_marker) +if result is not _marker: +# Got a cached value. +return result + +#__traceback_info__ = bound_names, args, kw, self.func_defaults + +ft = self._v_ft +if ft is None: +__traceback_supplement__ = ( +PythonScriptTracebackSupplement, self) +raise RuntimeError, '%s %s has errors.' % (self.meta_type, self.id) + +fcode, g, fadefs = ft +g = g.copy() +if bound_names is not None: +g.update(bound_names) +g['__traceback_supplement__'] = ( +PythonScriptTracebackSupplement, self, -1) +g['__file__'] = getattr(self, '_filepath', None) or self.get_filepath() +f = new.function(fcode, g, None, fadefs) + +try: +result = f(*args, **kw) +except SystemExit: +raise ValueError('SystemExit can not raised with a PythonScript') + +
[Zope-Checkins] SVN: Zope/hotfixes/Hotfix_20080812/ added
Log message for revision 89730: added Changed: A Zope/hotfixes/Hotfix_20080812/ -=- ___ Zope-Checkins maillist - Zope-Checkins@zope.org http://mail.zope.org/mailman/listinfo/zope-checkins
[Zope-Checkins] SVN: Zope/trunk/ Monkey patch for LP #257276
Log message for revision 89727: Monkey patch for LP #257276 This code is taken from the encodings module of Python 2.4. Note that this code is originally (C) CNRI and it is possibly not compatible with the ZPL and therefore should not live within svn.zope.org. However this checkin is blessed by Jim Fulton for now. The fix is no longer required with Python 2.5 and hopefully fixed in Python 2.4.6 release. Changed: U Zope/trunk/doc/CHANGES.txt U Zope/trunk/lib/python/Products/PythonScripts/__init__.py U Zope/trunk/lib/python/Products/PythonScripts/tests/testPythonScript.py -=- Modified: Zope/trunk/doc/CHANGES.txt === --- Zope/trunk/doc/CHANGES.txt 2008-08-12 13:41:53 UTC (rev 89726) +++ Zope/trunk/doc/CHANGES.txt 2008-08-12 13:51:43 UTC (rev 89727) @@ -204,6 +204,10 @@ Bugs Fixed + - Launchpad #257276: fix for possible denial-of-service attack +in PythonScript when passing an arbitrary module to the encode() +or decode() of strings. + - Launchpad #257269: 'raise SystemExit' with a PythonScript could shutdown a complete Zope instance Modified: Zope/trunk/lib/python/Products/PythonScripts/__init__.py === --- Zope/trunk/lib/python/Products/PythonScripts/__init__.py2008-08-12 13:41:53 UTC (rev 89726) +++ Zope/trunk/lib/python/Products/PythonScripts/__init__.py2008-08-12 13:51:43 UTC (rev 89727) @@ -61,3 +61,100 @@ if names: return 'The following Scripts were recompiled:\n' + '\n'.join(names) return 'No Scripts were found that required recompilation.' + + +# Monkey patch for LP #257276 + +# This code is taken from the encodings module of Python 2.4. +# Note that this code is originally (C) CNRI and it is possibly not compatible +# with the ZPL and therefore should not live within svn.zope.org. However this +# checkin is blessed by Jim Fulton for now. The fix is no longer required with +# Python 2.5 and hopefully fixed in Python 2.4.6 release. + + + +def search_function(encoding): + +# Cache lookup +entry = _cache.get(encoding, _unknown) +if entry is not _unknown: +return entry + +# Import the module: +# +# First try to find an alias for the normalized encoding +# name and lookup the module using the aliased name, then try to +# lookup the module using the standard import scheme, i.e. first +# try in the encodings package, then at top-level. +# +norm_encoding = normalize_encoding(encoding) +aliased_encoding = _aliases.get(norm_encoding) or \ + _aliases.get(norm_encoding.replace('.', '_')) +if aliased_encoding is not None: +modnames = [aliased_encoding, +norm_encoding] +else: +modnames = [norm_encoding] +for modname in modnames: + +if not modname or '.' in modname: +continue + +try: +mod = __import__(modname, + globals(), locals(), _import_tail) +if not mod.__name__.startswith('encodings.'): +continue + +except ImportError: +pass +else: +break +else: +mod = None + +try: +getregentry = mod.getregentry +except AttributeError: +# Not a codec module +mod = None + +if mod is None: +# Cache misses +_cache[encoding] = None +return None + +# Now ask the module for the registry entry +entry = tuple(getregentry()) +if len(entry) != 4: +raise CodecRegistryError,\ + 'module "%s" (%s) failed to register' % \ + (mod.__name__, mod.__file__) +for obj in entry: +if not callable(obj): +raise CodecRegistryError,\ + 'incompatible codecs in module "%s" (%s)' % \ + (mod.__name__, mod.__file__) + +# Cache the codec registry entry +_cache[encoding] = entry + +# Register its aliases (without overwriting previously registered +# aliases) +try: +codecaliases = mod.getaliases() +except AttributeError: +pass +else: +for alias in codecaliases: +if not _aliases.has_key(alias): +_aliases[alias] = modname + +# Return the registry entry +return entry + + +# MONKEY + +import encodings +encodings.search_function.func_code = search_function.func_code Modified: Zope/trunk/lib/python/Products/PythonScripts/tests/testPythonScript.py === --- Zope/trunk/lib/python/Products/PythonScripts/tests/testPythonScript.py 2008-08-12 13:41:53 UTC (rev 89726) +++ Zope/trunk/lib/python/Products/PythonScripts/tests/testPythonScript.py 2008-08-12 13:51:43 UTC (rev 89727) @@ -226,6 +226,9 @@ ps = self._newPS("raise SystemExit")
[Zope-Checkins] SVN: Zope/trunk/ - Launchpad #257269: 'raise SystemExit' with a PythonScript could shutdown
Log message for revision 89723: - Launchpad #257269: 'raise SystemExit' with a PythonScript could shutdown a complete Zope instance Changed: U Zope/trunk/doc/CHANGES.txt U Zope/trunk/lib/python/Products/PythonScripts/PythonScript.py U Zope/trunk/lib/python/Products/PythonScripts/tests/testPythonScript.py -=- Modified: Zope/trunk/doc/CHANGES.txt === --- Zope/trunk/doc/CHANGES.txt 2008-08-12 12:51:13 UTC (rev 89722) +++ Zope/trunk/doc/CHANGES.txt 2008-08-12 12:51:20 UTC (rev 89723) @@ -204,6 +204,9 @@ Bugs Fixed + - Launchpad #257269: 'raise SystemExit' with a PythonScript could shutdown +a complete Zope instance + - DateTime conversion of datetime objects with non-pytz tzinfo. Timezones() returns a copy of the timezone list (allows tests to run). Modified: Zope/trunk/lib/python/Products/PythonScripts/PythonScript.py === --- Zope/trunk/lib/python/Products/PythonScripts/PythonScript.py 2008-08-12 12:51:13 UTC (rev 89722) +++ Zope/trunk/lib/python/Products/PythonScripts/PythonScript.py 2008-08-12 12:51:20 UTC (rev 89723) @@ -322,7 +322,11 @@ g['__file__'] = getattr(self, '_filepath', None) or self.get_filepath() f = new.function(fcode, g, None, fadefs) -result = f(*args, **kw) +try: +result = f(*args, **kw) +except SystemExit: +raise ValueError('SystemExit can not raised with a PythonScript') + if keyset is not None: # Store the result in the cache. self.ZCacheable_set(result, keywords=keyset) Modified: Zope/trunk/lib/python/Products/PythonScripts/tests/testPythonScript.py === --- Zope/trunk/lib/python/Products/PythonScripts/tests/testPythonScript.py 2008-08-12 12:51:13 UTC (rev 89722) +++ Zope/trunk/lib/python/Products/PythonScripts/tests/testPythonScript.py 2008-08-12 12:51:20 UTC (rev 89723) @@ -222,7 +222,12 @@ res = self._newPS("return DateTime('2007/12/10').strftime('%d.%m.%Y')")() self.assertEqual(res, '10.12.2007') +def testRaiseSystemExitLaunchpad257269(self): +ps = self._newPS("raise SystemExit") +self.assertRaises(ValueError, ps) + + class TestPythonScriptErrors(PythonScriptTestBase): def assertPSRaises(self, error, path=None, body=None): ___ Zope-Checkins maillist - Zope-Checkins@zope.org http://mail.zope.org/mailman/listinfo/zope-checkins
[Zope-Checkins] SVN: Zope/branches/2.11/lib/python/zope/app/ removed dupe 'folder' definition
Log message for revision 89703: removed dupe 'folder' definition Changed: _U Zope/branches/2.11/lib/python/zope/app/ -=- Property changes on: Zope/branches/2.11/lib/python/zope/app ___ Name: svn:externals - annotation svn://svn.zope.org/repos/main/zope.app.annotation/tags/3.4.0/src/zope/app/annotation apidoc svn://svn.zope.org/repos/main/zope.app.apidoc/tags/3.4.3/src/zope/app/apidoc applicationcontrol svn://svn.zope.org/repos/main/zope.app.applicationcontrol/tags/3.4.1/src/zope/app/applicationcontrol appsetup svn://svn.zope.org/repos/main/zope.app.appsetup/tags/3.4.1/src/zope/app/appsetup authentication svn://svn.zope.org/repos/main/zope.app.authentication/tags/3.4.1/src/zope/app/authentication basicskin svn://svn.zope.org/repos/main/zope.app.basicskin/tags/3.4.0/src/zope/app/basicskin broken svn://svn.zope.org/repos/main/zope.app.broken/tags/3.4.0/src/zope/app/broken cache svn://svn.zope.org/repos/main/zope.app.cache/tags/3.4.0/src/zope/app/cache component svn://svn.zope.org/repos/main/zope.app.component/tags/3.4.1/src/zope/app/component container svn://svn.zope.org/repos/main/zope.app.container/tags/3.5.3/src/zope/app/container content svn://svn.zope.org/repos/main/zope.app.content/tags/3.4.0/src/zope/app/content content_types svn://svn.zope.org/repos/main/Zope3/branches/3.4/src/zope/app/content_types debug svn://svn.zope.org/repos/main/zope.app.debug/tags/3.4.0/src/zope/app/debug dependable svn://svn.zope.org/repos/main/zope.app.dependable/tags/3.4.0/src/zope/app/dependable error svn://svn.zope.org/repos/main/zope.app.error/tags/3.5.1/src/zope/app/error event svn://svn.zope.org/repos/main/Zope3/branches/3.4/src/zope/app/event exception svn://svn.zope.org/repos/main/zope.app.exception/tags/3.4.1/src/zope/app/exception file svn://svn.zope.org/repos/main/zope.app.file/tags/3.4.2/src/zope/app/file filerepresentation svn://svn.zope.org/repos/main/Zope3/branches/3.4/src/zope/app/filerepresentation folder svn://svn.zope.org/repos/main/zope.app.folder/tags/3.4.0/src/zope/app/folder folder svn://svn.zope.org/repos/main/zope.app.folder/tags/3.4.0/src/zope/app/folder form svn://svn.zope.org/repos/main/zope.app.form/tags/3.4.1/src/zope/app/form generations svn://svn.zope.org/repos/main/zope.app.generations/tags/3.4.1/src/zope/app/generations http svn://svn.zope.org/repos/main/zope.app.http/tags/3.4.1/src/zope/app/http i18n svn://svn.zope.org/repos/main/zope.app.i18n/tags/3.4.4/src/zope/app/i18n interface svn://svn.zope.org/repos/main/zope.app.interface/tags/3.4.0/src/zope/app/interface intid svn://svn.zope.org/repos/main/zope.app.intid/tags/3.4.1/src/zope/app/intid keyreference svn://svn.zope.org/repos/main/zope.app.keyreference/tags/3.4.1/src/zope/app/keyreference layers svn://svn.zope.org/repos/main/zope.app.layers/tags/3.4.0/src/zope/app/layers locales svn://svn.zope.org/repos/main/zope.app.locales/tags/3.4.0/src/zope/app/locales location svn://svn.zope.org/repos/main/Zope3/branches/3.4/src/zope/app/location mail svn://svn.zope.org/repos/main/Zope3/branches/3.4/src/zope/app/mail onlinehelp svn://svn.zope.org/repos/main/zope.app.onlinehelp/tags/3.4.0/src/zope/app/onlinehelp pagetemplate svn://svn.zope.org/repos/main/zope.app.pagetemplate/tags/3.4.0/src/zope/app/pagetemplate pluggableauth svn://svn.zope.org/repos/main/zope.app.pluggableauth/tags/3.4.0/src/zope/app/pluggableauth preference svn://svn.zope.org/repos/main/zope.app.preference/tags/3.4.1/src/zope/app/preference preview svn://svn.zope.org/repos/main/zope.app.preview/tags/3.4.0/src/zope/app/preview principalannotation svn://svn.zope.org/repos/main/zope.app.principalannotation/tags/3.4.0/src/zope/app/principalannotation publication svn://svn.zope.org/repos/main/zope.app.publication/tags/3.4.2/src/zope/app/publication publisher svn://svn.zope.org/repos/main/zope.app.publisher/tags/3.4.1/src/zope/app/publisher rdb svn://svn.zope.org/repos/main/Zope3/branches/3.4/src/zope/app/rdb renderer svn://svn.zope.org/repos/main/zope.app.renderer/tags/3.4.0/src/zope/app/renderer rotterdam svn://svn.zope.org/repos/main/zope.app.rotterdam/tags/3.4.1/src/zope/app/rotterdam schema svn://svn.zope.org/repos/main/zope.app.schema/tags/3.4.0/src/zope/app/schema security svn://svn.zope.org/repos/main/zope.app.security/tags/3.4.0/src/zope/app/security securitypolicy svn://svn.zope.org/repos/main/zope.app.securitypolicy/tags/3.4.6/src/zop
[Zope-Checkins] SVN: Zope/branches/2.11/lib/python/zope/app/ removed empty line
Log message for revision 89701: removed empty line Changed: _U Zope/branches/2.11/lib/python/zope/app/ -=- Property changes on: Zope/branches/2.11/lib/python/zope/app ___ Name: svn:externals - annotation svn://svn.zope.org/repos/main/zope.app.annotation/tags/3.4.0/src/zope/app/annotation apidoc svn://svn.zope.org/repos/main/zope.app.apidoc/tags/3.4.3/src/zope/app/apidoc applicationcontrol svn://svn.zope.org/repos/main/zope.app.applicationcontrol/tags/3.4.1/src/zope/app/applicationcontrol appsetup svn://svn.zope.org/repos/main/zope.app.appsetup/tags/3.4.1/src/zope/app/appsetup authentication svn://svn.zope.org/repos/main/zope.app.authentication/tags/3.4.1/src/zope/app/authentication basicskin svn://svn.zope.org/repos/main/zope.app.basicskin/tags/3.4.0/src/zope/app/basicskin broken svn://svn.zope.org/repos/main/zope.app.broken/tags/3.4.0/src/zope/app/broken cache svn://svn.zope.org/repos/main/zope.app.cache/tags/3.4.0/src/zope/app/cache component svn://svn.zope.org/repos/main/zope.app.component/tags/3.4.1/src/zope/app/component container svn://svn.zope.org/repos/main/zope.app.container/tags/3.5.3/src/zope/app/container content svn://svn.zope.org/repos/main/zope.app.content/tags/3.4.0/src/zope/app/content content_types svn://svn.zope.org/repos/main/Zope3/branches/3.4/src/zope/app/content_types debug svn://svn.zope.org/repos/main/zope.app.debug/tags/3.4.0/src/zope/app/debug dependable svn://svn.zope.org/repos/main/zope.app.dependable/tags/3.4.0/src/zope/app/dependable error svn://svn.zope.org/repos/main/zope.app.error/tags/3.5.1/src/zope/app/error event svn://svn.zope.org/repos/main/Zope3/branches/3.4/src/zope/app/event exception svn://svn.zope.org/repos/main/zope.app.exception/tags/3.4.1/src/zope/app/exception file svn://svn.zope.org/repos/main/zope.app.file/tags/3.4.2/src/zope/app/file filerepresentation svn://svn.zope.org/repos/main/Zope3/branches/3.4/src/zope/app/filerepresentation folder svn://svn.zope.org/repos/main/zope.app.folder/tags/3.4.0/src/zope/app/folder folder svn://svn.zope.org/repos/main/zope.app.folder/tags/3.4.0/src/zope/app/folder form svn://svn.zope.org/repos/main/zope.app.form/tags/3.4.1/src/zope/app/form generations svn://svn.zope.org/repos/main/zope.app.generations/tags/3.4.1/src/zope/app/generations http svn://svn.zope.org/repos/main/zope.app.http/tags/3.4.1/src/zope/app/http i18n svn://svn.zope.org/repos/main/zope.app.i18n/tags/3.4.4/src/zope/app/i18n interface svn://svn.zope.org/repos/main/zope.app.interface/tags/3.4.0/src/zope/app/interface intid svn://svn.zope.org/repos/main/zope.app.intid/tags/3.4.1/src/zope/app/intid keyreference svn://svn.zope.org/repos/main/zope.app.keyreference/tags/3.4.1/src/zope/app/keyreference layers svn://svn.zope.org/repos/main/zope.app.layers/tags/3.4.0/src/zope/app/layers locales svn://svn.zope.org/repos/main/zope.app.locales/tags/3.4.0/src/zope/app/locales location svn://svn.zope.org/repos/main/Zope3/branches/3.4/src/zope/app/location mail svn://svn.zope.org/repos/main/Zope3/branches/3.4/src/zope/app/mail onlinehelp svn://svn.zope.org/repos/main/zope.app.onlinehelp/tags/3.4.0/src/zope/app/onlinehelp pagetemplate svn://svn.zope.org/repos/main/zope.app.pagetemplate/tags/3.4.0/src/zope/app/pagetemplate pluggableauth svn://svn.zope.org/repos/main/zope.app.pluggableauth/tags/3.4.0/src/zope/app/pluggableauth preference svn://svn.zope.org/repos/main/zope.app.preference/tags/3.4.1/src/zope/app/preference preview svn://svn.zope.org/repos/main/zope.app.preview/tags/3.4.0/src/zope/app/preview principalannotation svn://svn.zope.org/repos/main/zope.app.principalannotation/tags/3.4.0/src/zope/app/principalannotation publication svn://svn.zope.org/repos/main/zope.app.publication/tags/3.4.2/src/zope/app/publication publisher svn://svn.zope.org/repos/main/zope.app.publisher/tags/3.4.1/src/zope/app/publisher rdb svn://svn.zope.org/repos/main/Zope3/branches/3.4/src/zope/app/rdb renderer svn://svn.zope.org/repos/main/zope.app.renderer/tags/3.4.0/src/zope/app/renderer rotterdam svn://svn.zope.org/repos/main/zope.app.rotterdam/tags/3.4.1/src/zope/app/rotterdam schema svn://svn.zope.org/repos/main/zope.app.schema/tags/3.4.0/src/zope/app/schema security svn://svn.zope.org/repos/main/zope.app.security/tags/3.4.0/src/zope/app/security securitypolicy svn://svn.zope.org/repos/main/zope.app.securitypolicy/tags/3.4.6/src/zope/app/security
[Zope-Checkins] SVN: Zope/branches/2.11/lib/python/ removed empty line
Log message for revision 89699: removed empty line Changed: _U Zope/branches/2.11/lib/python/ -=- Property changes on: Zope/branches/2.11/lib/python ___ Name: svn:externals - BTrees svn://svn.zope.org/repos/main/ZODB/tags/3.8.0/src/BTrees ClientForm svn://svn.zope.org/repos/main/Zope3/trunk/src/ClientForm RestrictedPython svn://svn.zope.org/repos/main/RestrictedPython/tags/3.4.2/src/RestrictedPython ThreadedAsync svn://svn.zope.org/repos/main/ZODB/tags/3.8.0/src/ThreadedAsync ZConfig svn://svn.zope.org/repos/main/ZConfig/tags/2.5.1/ZConfig ZEO svn://svn.zope.org/repos/main/ZODB/tags/3.8.0/src/ZEO ZODB svn://svn.zope.org/repos/main/ZODB/tags/3.8.0/src/ZODB ZopeUndo svn://svn.zope.org/repos/main/ZODB/tags/3.8.0/src/ZopeUndo docutils svn://svn.zope.org/repos/main/docutils/tags/0.4.0 mechanizesvn://svn.zope.org/repos/main/Zope3/trunk/src/mechanize persistent svn://svn.zope.org/repos/main/ZODB/tags/3.8.0/src/persistent pytz svn://svn.zope.org/repos/main/Zope3/trunk/src/pytz transaction svn://svn.zope.org/repos/main/ZODB/tags/3.8.0/src/transaction zdaemon svn://svn.zope.org/repos/main/zdaemon/tags/2.0.2/src/zdaemon zodbcode svn://svn.zope.org/repos/main/zodbcode/tags/3.4.0/src/zodbcode + BTrees svn://svn.zope.org/repos/main/ZODB/tags/3.8.0/src/BTrees ClientForm svn://svn.zope.org/repos/main/Zope3/trunk/src/ClientForm RestrictedPython svn://svn.zope.org/repos/main/RestrictedPython/tags/3.4.2/src/RestrictedPython ThreadedAsync svn://svn.zope.org/repos/main/ZODB/tags/3.8.0/src/ThreadedAsync ZConfig svn://svn.zope.org/repos/main/ZConfig/tags/2.5.1/ZConfig ZEO svn://svn.zope.org/repos/main/ZODB/tags/3.8.0/src/ZEO ZODB svn://svn.zope.org/repos/main/ZODB/tags/3.8.0/src/ZODB ZopeUndo svn://svn.zope.org/repos/main/ZODB/tags/3.8.0/src/ZopeUndo docutils svn://svn.zope.org/repos/main/docutils/tags/0.4.0 mechanizesvn://svn.zope.org/repos/main/Zope3/trunk/src/mechanize persistent svn://svn.zope.org/repos/main/ZODB/tags/3.8.0/src/persistent pytz svn://svn.zope.org/repos/main/Zope3/trunk/src/pytz transaction svn://svn.zope.org/repos/main/ZODB/tags/3.8.0/src/transaction zdaemon svn://svn.zope.org/repos/main/zdaemon/tags/2.0.2/src/zdaemon zodbcode svn://svn.zope.org/repos/main/zodbcode/tags/3.4.0/src/zodbcode ___ Zope-Checkins maillist - Zope-Checkins@zope.org http://mail.zope.org/mailman/listinfo/zope-checkins