summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason Gerard DeRose <jderose@redhat.com>2009-01-30 23:46:51 -0700
committerRob Crittenden <rcritten@redhat.com>2009-02-03 15:29:05 -0500
commit3274577cd608f947d6b07e6dfcbde393edf5a249 (patch)
tree0e7ab0c0a89849a31539121b1a07e28084ad2eeb
parentc2b0c801400fcb59be8687f9faf061aa85bcffd2 (diff)
downloadfreeipa-3274577cd608f947d6b07e6dfcbde393edf5a249.tar.gz
freeipa-3274577cd608f947d6b07e6dfcbde393edf5a249.tar.xz
freeipa-3274577cd608f947d6b07e6dfcbde393edf5a249.zip
Finished small tweaks to get new ipaserver.xmlrpc() mod_python handler working
-rw-r--r--ipalib/config.py1
-rw-r--r--ipalib/rpc.py2
-rw-r--r--ipaserver/__init__.py30
-rwxr-xr-xipaserver/mod_python_xmlrpc.py2
-rw-r--r--ipaserver/rpcserver.py10
-rwxr-xr-xlite-xmlrpc.py15
-rwxr-xr-xsetup.py5
7 files changed, 40 insertions, 25 deletions
diff --git a/ipalib/config.py b/ipalib/config.py
index 42d7ab578..39c4238cf 100644
--- a/ipalib/config.py
+++ b/ipalib/config.py
@@ -433,7 +433,6 @@ class Env(object):
self.script = path.abspath(sys.argv[0])
self.bin = path.dirname(self.script)
self.home = os.environ.get('HOME', None)
- self.etc = path.join('/', 'etc', 'ipa')
self.dot_ipa = self._join('home', '.ipa')
self._merge(**overrides)
if 'in_tree' not in self:
diff --git a/ipalib/rpc.py b/ipalib/rpc.py
index 5a1f9e1ed..938c30e64 100644
--- a/ipalib/rpc.py
+++ b/ipalib/rpc.py
@@ -137,12 +137,14 @@ def xml_dumps(params, methodname=None, methodresponse=False, encoding='UTF-8'):
allow_none=True,
)
+
def decode_fault(e, encoding='UTF-8'):
assert isinstance(e, Fault)
if type(e.faultString) is str:
return Fault(e.faultCode, e.faultString.decode(encoding))
return e
+
def xml_loads(data, encoding='UTF-8'):
"""
Decode the XML-RPC packet in ``data``, transparently unwrapping its params.
diff --git a/ipaserver/__init__.py b/ipaserver/__init__.py
index 35f96c7f6..ec2a53649 100644
--- a/ipaserver/__init__.py
+++ b/ipaserver/__init__.py
@@ -24,27 +24,51 @@ Package containing server backend.
from xmlrpclib import dumps, Fault
from ipalib import api
+
+# This is a simple way to ensure that ipalib.api is only initialized
+# when ipaserver is imported from within the Apache process:
try:
from mod_python import apache
- api.bootstrap(context='server', log=None, debug=True)
+ api.bootstrap(context='server', debug=True, log=None)
api.finalize()
+ api.log.info('*** PROCESS START ***')
except ImportError:
pass
def xmlrpc(req):
+ """
+ mod_python handler for XML-RPC requests.
+ """
if req.method != 'POST':
req.allow_methods(['POST'], 1)
return apache.HTTP_METHOD_NOT_ALLOWED
if apache.mpm_query(apache.AP_MPMQ_IS_THREADED):
response = dumps(
- Fault(3, 'Apache must use the forked model'), methodresponse=True
+ Fault(3, 'Apache must use the forked model'),
+ methodresponse=True,
)
else:
- response = api.Backend.xmlserver.marshaled_dispatch(req.read(), None)
+ req.add_common_vars()
+ response = api.Backend.xmlserver.marshaled_dispatch(
+ req.read(),
+ req.subprocess_env.get('KRB5CCNAME'),
+ )
req.content_type = 'text/xml'
req.set_content_length(len(response))
req.write(response)
return apache.OK
+
+
+def jsonrpc(req):
+ """
+ mod_python handler for JSON-RPC requests (place holder).
+ """
+
+
+def webui(req):
+ """
+ mod_python handler for web-UI requests (place holder).
+ """
diff --git a/ipaserver/mod_python_xmlrpc.py b/ipaserver/mod_python_xmlrpc.py
index 42a7c28c7..0f631f744 100755
--- a/ipaserver/mod_python_xmlrpc.py
+++ b/ipaserver/mod_python_xmlrpc.py
@@ -25,6 +25,8 @@
"""
Production XML-RPC server using mod_python.
+
+This module is depreciated. See the `ipaserver.xmlrpc()` function.
"""
import sys
diff --git a/ipaserver/rpcserver.py b/ipaserver/rpcserver.py
index 36742b094..2ad233dc1 100644
--- a/ipaserver/rpcserver.py
+++ b/ipaserver/rpcserver.py
@@ -55,20 +55,20 @@ class xmlserver(Executioner):
super(xmlserver, self).finalize()
def listMethods(self, *params):
- return tuple(name.encode('UTF-8') for name in self.Command)
+ return tuple(name.decode('UTF-8') for name in self.Command)
def methodSignature(self, *params):
- return 'methodSignature not supported'
+ return u'methodSignature not implemented'
def methodHelp(self, *params):
- return 'methodHelp not supported'
+ return u'methodHelp not implemented'
def marshaled_dispatch(self, data, ccache):
"""
- Execute the XML-RPC request in contained in ``data``.
+ Execute the XML-RPC request contained in ``data``.
"""
try:
- #self.create_context(ccache=ccache)
+ self.create_context(ccache=ccache)
(params, name) = xml_loads(data)
if name in self.__system:
response = (self.__system[name](*params),)
diff --git a/lite-xmlrpc.py b/lite-xmlrpc.py
index 55babf9ef..976393738 100755
--- a/lite-xmlrpc.py
+++ b/lite-xmlrpc.py
@@ -29,18 +29,6 @@ import krbV
from ipalib import api
-class Instance(object):
- """
- Just used for `Instance._listMethods()`.
- """
-
- def _listMethods(self):
- """
- Provides list of names for ``system.listMethods``.
- """
- return list(api.Command)
-
-
class Server(SimpleXMLRPCServer):
"""
Custom server implementing `Server._marshaled_dispatch()`.
@@ -79,8 +67,7 @@ server = Server(('', api.env.lite_xmlrpc_port), **kw)
api.log.info('Logging to file %r', api.env.log)
api.log.info('Listening on port %d', api.env.lite_xmlrpc_port)
-server.register_introspection_functions()
-server.register_instance(Instance())
+
try:
server.serve_forever()
diff --git a/setup.py b/setup.py
index 012ad5036..6676b1786 100755
--- a/setup.py
+++ b/setup.py
@@ -23,11 +23,12 @@
Python-level packaging using distutils.
"""
-from distutils.core import setup
+from setuptools import setup
+import ipalib
setup(
name='freeipa',
- version='1.99.1',
+ version=ipalib.__version__,
license='GPLv2+',
url='http://freeipa.org/',
packages=[