summaryrefslogtreecommitdiffstats
path: root/lite-xmlrpc.py
diff options
context:
space:
mode:
Diffstat (limited to 'lite-xmlrpc.py')
-rwxr-xr-xlite-xmlrpc.py80
1 files changed, 31 insertions, 49 deletions
diff --git a/lite-xmlrpc.py b/lite-xmlrpc.py
index 7e9c69a8..3483ceb5 100755
--- a/lite-xmlrpc.py
+++ b/lite-xmlrpc.py
@@ -34,14 +34,10 @@ from ipalib import api
from ipalib import config
from ipa_server import conn
from ipa_server.servercore import context
-import ipalib.load_plugins
from ipalib.util import xmlrpc_unmarshal
import traceback
import krbV
-
-PORT=8888
-
class StoppableXMLRPCServer(SimpleXMLRPCServer.SimpleXMLRPCServer):
"""Override of TIME_WAIT"""
allow_reuse_address = True
@@ -65,31 +61,25 @@ class LoggingSimpleXMLRPCRequestHandler(SimpleXMLRPCServer.SimpleXMLRPCRequestHa
return (args, kw)
def _dispatch(self, method, params):
- """Dispatches the XML-RPC method.
+ """
+ Dispatches the XML-RPC method.
Methods beginning with an '_' are considered private and will
not be called.
"""
-
+ if method not in funcs:
+ logger.error('no such method %r', method)
+ raise Exception('method "%s" is not supported' % method)
+ func = funcs[method]
krbccache = krbV.default_context().default_ccache().name
-
- func = None
- try:
- try:
- # check to see if a matching function has been registered
- func = funcs[method]
- except KeyError:
- raise Exception('method "%s" is not supported' % method)
- (args, kw) = xmlrpc_unmarshal(*params)
- # FIXME: don't hardcode host and port
- context.conn = conn.IPAConn(api.env.ldaphost, api.env.ldapport, krbccache)
- logger.info("calling %s" % method)
- return func(*args, **kw)
- finally:
- # Clean up any per-request data and connections
-# for k in context.__dict__.keys():
-# del context.__dict__[k]
- pass
+ context.conn = conn.IPAConn(
+ api.env.ldap_host,
+ api.env.ldap_port,
+ krbccache,
+ )
+ logger.info('calling %s', method)
+ (args, kw) = xmlrpc_unmarshal(*params)
+ return func(*args, **kw)
def _marshaled_dispatch(self, data, dispatch_method = None):
try:
@@ -117,7 +107,7 @@ class LoggingSimpleXMLRPCRequestHandler(SimpleXMLRPCServer.SimpleXMLRPCRequestHa
def do_POST(self):
clientIP, port = self.client_address
- # Log client IP and Port
+ # Log client IP and Port
logger.info('Client IP: %s - Port: %s' % (clientIP, port))
try:
# get arguments
@@ -127,14 +117,14 @@ class LoggingSimpleXMLRPCRequestHandler(SimpleXMLRPCServer.SimpleXMLRPCRequestHa
params, method = xmlrpclib.loads(data)
# Log client request
- logger.info('Client request: \n%s\n' % data)
+ logger.info('Client request: \n%s\n' % data)
response = self._marshaled_dispatch(
data, getattr(self, '_dispatch', None))
- # Log server response
+ # Log server response
logger.info('Server response: \n%s\n' % response)
- except Exception, e:
+ except Exception, e:
# This should only happen if the module is buggy
# internal error, report as HTTP server error
print e
@@ -154,37 +144,29 @@ class LoggingSimpleXMLRPCRequestHandler(SimpleXMLRPCServer.SimpleXMLRPCRequestHa
if __name__ == '__main__':
- # Set up our logger
- logger = logging.getLogger('xmlrpcserver')
- hdlr = logging.FileHandler('xmlrpcserver.log')
- formatter = logging.Formatter("%(asctime)s %(levelname)s %(message)s")
- hdlr.setFormatter(formatter)
- logger.addHandler(hdlr)
- logger.setLevel(logging.INFO)
+ api.bootstrap(context='server')
+ api.load_plugins()
+ api.finalize()
+ logger = api.logger
# Set up the server
- XMLRPCServer = StoppableXMLRPCServer(("",PORT), LoggingSimpleXMLRPCRequestHandler)
-
+ XMLRPCServer = StoppableXMLRPCServer(
+ ('', api.env.lite_xmlrpc_port),
+ LoggingSimpleXMLRPCRequestHandler
+ )
XMLRPCServer.register_introspection_functions()
- api.finalize()
-
- # Initialize our environment
- config.set_default_env(api.env)
- env_dict = config.read_config()
- env_dict['server_context'] = True
- api.env.update(env_dict)
-
# Get and register all the methods
+
for cmd in api.Command:
- logger.info("registering %s" % cmd)
+ logger.debug('registering %s', cmd)
XMLRPCServer.register_function(api.Command[cmd], cmd)
-
funcs = XMLRPCServer.funcs
- print "Listening on port %d" % PORT
+ logger.info('Logging to file %r', api.env.log)
+ logger.info('Listening on port %d', api.env.lite_xmlrpc_port)
try:
XMLRPCServer.serve_forever()
except KeyboardInterrupt:
XMLRPCServer.server_close()
- print "Server shutdown."
+ logger.info('Server shutdown.')