diff options
-rw-r--r-- | ipalib/config.py | 4 | ||||
-rw-r--r-- | ipalib/frontend.py | 6 | ||||
-rw-r--r-- | ipalib/plugins/b_xmlrpc.py | 10 | ||||
-rwxr-xr-x | simple-server.py | 13 |
4 files changed, 22 insertions, 11 deletions
diff --git a/ipalib/config.py b/ipalib/config.py index 73d23c8e..f327cab7 100644 --- a/ipalib/config.py +++ b/ipalib/config.py @@ -23,7 +23,7 @@ DEFAULT_CONF='/etc/ipa/ipa.conf' def generate_env(d={}): default = dict( - server_context = True, + server_context = False, query_dns = True, verbose = False, servers = LazyIter(get_servers), @@ -35,7 +35,7 @@ def generate_env(d={}): default[key].set_value(value) else: default[key] = value - + return default diff --git a/ipalib/frontend.py b/ipalib/frontend.py index 7abb8fb0..651e4642 100644 --- a/ipalib/frontend.py +++ b/ipalib/frontend.py @@ -541,8 +541,10 @@ class Command(plugable.Plugin): print ' kw =', kw def forward(self, *args, **kw): - xmlrpc_client = self.api.Backend.xmlrpc.get_client() - return getattr(xmlrpc_client, self.name)(kw, *args) + """ + Forward call over XML-RPC. + """ + return self.api.Backend.xmlrpc.forward_call(self.name, *args, **kw) def __call__(self, *args, **kw): diff --git a/ipalib/plugins/b_xmlrpc.py b/ipalib/plugins/b_xmlrpc.py index afe76505..61935f01 100644 --- a/ipalib/plugins/b_xmlrpc.py +++ b/ipalib/plugins/b_xmlrpc.py @@ -25,6 +25,7 @@ Lightwieght XML-RPC client using Python standard library xmlrpclib. import xmlrpclib from ipalib.backend import Backend +from ipalib.util import xmlrpc_marshal from ipalib import api class xmlrpc(Backend): @@ -36,4 +37,13 @@ class xmlrpc(Backend): # FIXME: The server uri should come from self.api.env.server_uri return xmlrpclib.ServerProxy('http://localhost:8080', allow_none=True) + def forward_call(self, name, *args, **kw): + """ + Forward a call over XML-RPC to an IPA server. + """ + client = self.get_client() + command = getattr(client, name) + params = xmlrpc_marshal(*args, **kw) + return command(*params) + api.register(xmlrpc) diff --git a/simple-server.py b/simple-server.py index e0ff4f16..2f0d9226 100755 --- a/simple-server.py +++ b/simple-server.py @@ -26,9 +26,11 @@ The server will run at http://localhost:8080 """ from SimpleXMLRPCServer import SimpleXMLRPCServer +from ipalib.util import xmlrpc_unmarshal from ipalib import api from ipalib import load_plugins +api.env.server_context = True api.finalize() class Dispatch(object): @@ -36,15 +38,12 @@ class Dispatch(object): self.__cmd = cmd def __call__(self, *params): - if len(params) > 0: - kw = params[0] - else: - kw = {} - args = params[1:] - return cmd(*args, **kw) + print 'dispatch: %s%r' % (self.__cmd.name, params) + (args, kw) = xmlrpc_unmarshal(*params) + return self.__cmd(*args, **kw) -server = SimpleXMLRPCServer(('localhost', 8080)) +server = SimpleXMLRPCServer(('localhost', 8080), allow_none=True) server.register_introspection_functions() for cmd in api.Command(): server.register_function(Dispatch(cmd), cmd.name) |