From b67460318fe4f08f848e8ab2e2b91975200573ef Mon Sep 17 00:00:00 2001 From: drochner Date: Fri, 4 Feb 2005 15:39:04 +0000 Subject: apply the security fix from http://www.python.org/security/PSF-2005-001/ This disables hierarchical object lookups in SimpleXMLRPCServer. Unfortunately, this breaks some applications (eg kenosis). Don't shoot me for this. bump PKGREVISION --- lang/python23/patches/patch-an | 82 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 lang/python23/patches/patch-an (limited to 'lang/python23/patches') diff --git a/lang/python23/patches/patch-an b/lang/python23/patches/patch-an new file mode 100644 index 00000000000..a0822ac0372 --- /dev/null +++ b/lang/python23/patches/patch-an @@ -0,0 +1,82 @@ +$NetBSD: patch-an,v 1.3 2005/02/04 15:39:04 drochner Exp $ + +--- Lib/SimpleXMLRPCServer.py.orig 2003-06-29 06:19:37.000000000 +0200 ++++ Lib/SimpleXMLRPCServer.py +@@ -107,14 +107,22 @@ import sys + import types + import os + +-def resolve_dotted_attribute(obj, attr): ++def resolve_dotted_attribute(obj, attr, allow_dotted_names=True): + """resolve_dotted_attribute(a, 'b.c.d') => a.b.c.d + + Resolves a dotted attribute name to an object. Raises + an AttributeError if any attribute in the chain starts with a '_'. ++ ++ If the optional allow_dotted_names argument is false, dots are not ++ supported and this function operates similar to getattr(obj, attr). + """ + +- for i in attr.split('.'): ++ if allow_dotted_names: ++ attrs = attr.split('.') ++ else: ++ attrs = [attr] ++ ++ for i in attrs: + if i.startswith('_'): + raise AttributeError( + 'attempt to access private attribute "%s"' % i +@@ -156,7 +164,7 @@ class SimpleXMLRPCDispatcher: + self.funcs = {} + self.instance = None + +- def register_instance(self, instance): ++ def register_instance(self, instance, allow_dotted_names=False): + """Registers an instance to respond to XML-RPC requests. + + Only one instance can be installed at a time. +@@ -174,9 +182,23 @@ class SimpleXMLRPCDispatcher: + + If a registered function matches a XML-RPC request, then it + will be called instead of the registered instance. ++ ++ If the optional allow_dotted_names argument is true and the ++ instance does not have a _dispatch method, method names ++ containing dots are supported and resolved, as long as none of ++ the name segments start with an '_'. ++ ++ *** SECURITY WARNING: *** ++ ++ Enabling the allow_dotted_names options allows intruders ++ to access your module's global variables and may allow ++ intruders to execute arbitrary code on your machine. Only ++ use this option on a secure, closed network. ++ + """ + + self.instance = instance ++ self.allow_dotted_names = allow_dotted_names + + def register_function(self, function, name = None): + """Registers a function to respond to XML-RPC requests. +@@ -295,7 +317,8 @@ class SimpleXMLRPCDispatcher: + try: + method = resolve_dotted_attribute( + self.instance, +- method_name ++ method_name, ++ self.allow_dotted_names + ) + except AttributeError: + pass +@@ -374,7 +397,8 @@ class SimpleXMLRPCDispatcher: + try: + func = resolve_dotted_attribute( + self.instance, +- method ++ method, ++ self.allow_dotted_names + ) + except AttributeError: + pass -- cgit v1.2.3