Index: Lib/SimpleXMLRPCServer.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/SimpleXMLRPCServer.py,v
retrieving revision 1.2
diff -c -r1.2 SimpleXMLRPCServer.py
*** Lib/SimpleXMLRPCServer.py	29 Sep 2001 04:54:33 -0000	1.2
--- Lib/SimpleXMLRPCServer.py	3 Feb 2005 05:34:18 -0000
***************
*** 161,167 ****
                      try:
                          func = _resolve_dotted_attribute(
                              self.server.instance,
!                             method
                              )
                      except AttributeError:
                          pass
--- 161,168 ----
                      try:
                          func = _resolve_dotted_attribute(
                              self.server.instance,
!                             method,
!                             self.allow_dotted_names
                              )
                      except AttributeError:
                          pass
***************
*** 178,188 ****
              BaseHTTPServer.BaseHTTPRequestHandler.log_request(self, code, size)
  
  
! def _resolve_dotted_attribute(obj, attr):
      """Resolves a dotted attribute name to an object.  Raises
      an AttributeError if any attribute in the chain starts with a '_'.
      """
!     for i in attr.split('.'):
          if i.startswith('_'):
              raise AttributeError(
                  'attempt to access private attribute "%s"' % i
--- 179,198 ----
              BaseHTTPServer.BaseHTTPRequestHandler.log_request(self, code, size)
  
  
! def _resolve_dotted_attribute(obj, attr, allow_dotted_names=True):
      """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).
      """
! 
!     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
***************
*** 206,212 ****
          self.instance = None
          SocketServer.TCPServer.__init__(self, addr, requestHandler)
  
!     def register_instance(self, instance):
          """Registers an instance to respond to XML-RPC requests.
  
          Only one instance can be installed at a time.
--- 216,222 ----
          self.instance = None
          SocketServer.TCPServer.__init__(self, addr, requestHandler)
  
!     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.
***************
*** 225,233 ****
--- 235,257 ----
  
          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.
