summaryrefslogtreecommitdiffstats
path: root/ipaserver
diff options
context:
space:
mode:
authorJan Cholasta <jcholast@redhat.com>2014-03-28 09:51:10 +0100
committerPetr Viktorin <pviktori@redhat.com>2014-04-18 14:59:20 +0200
commit8b6dc819d5e1a74935b270593ca0e6d3f5e5d9d7 (patch)
treecfb83a335b08e993bf719d90ecdbe64fcf617faa /ipaserver
parent4314d02fbf9ef1cb9543ecf76a8d22e79d250214 (diff)
downloadfreeipa-8b6dc819d5e1a74935b270593ca0e6d3f5e5d9d7.tar.gz
freeipa-8b6dc819d5e1a74935b270593ca0e6d3f5e5d9d7.tar.xz
freeipa-8b6dc819d5e1a74935b270593ca0e6d3f5e5d9d7.zip
Support API version-specific RPC marshalling.
Reviewed-By: Tomas Babej <tbabej@redhat.com>
Diffstat (limited to 'ipaserver')
-rw-r--r--ipaserver/rpcserver.py21
1 files changed, 13 insertions, 8 deletions
diff --git a/ipaserver/rpcserver.py b/ipaserver/rpcserver.py
index c05740ded..821eed226 100644
--- a/ipaserver/rpcserver.py
+++ b/ipaserver/rpcserver.py
@@ -31,7 +31,8 @@ import urlparse
import time
import json
-from ipalib import plugable, capabilities, errors
+from ipalib import plugable, errors
+from ipalib.capabilities import VERSION_WITHOUT_CAPABILITIES
from ipalib.backend import Executioner
from ipalib.errors import (PublicError, InternalError, CommandError, JSONError,
CCacheError, RefererError, InvalidSessionPassword, NotFound, ACIError,
@@ -378,7 +379,8 @@ class WSGIExecutioner(Executioner):
name,
type(e).__name__)
- return self.marshal(result, error, _id)
+ version = options.get('version', VERSION_WITHOUT_CAPABILITIES)
+ return self.marshal(result, error, _id, version)
def simple_unmarshal(self, environ):
name = environ['PATH_INFO'].strip('/')
@@ -415,7 +417,8 @@ class WSGIExecutioner(Executioner):
def unmarshal(self, data):
raise NotImplementedError('%s.unmarshal()' % self.fullname)
- def marshal(self, result, error, _id=None):
+ def marshal(self, result, error, _id=None,
+ version=VERSION_WITHOUT_CAPABILITIES):
raise NotImplementedError('%s.marshal()' % self.fullname)
@@ -439,7 +442,8 @@ class jsonserver(WSGIExecutioner, HTTP_Status):
response = super(jsonserver, self).__call__(environ, start_response)
return response
- def marshal(self, result, error, _id=None):
+ def marshal(self, result, error, _id=None,
+ version=VERSION_WITHOUT_CAPABILITIES):
if error:
assert isinstance(error, PublicError)
error = dict(
@@ -455,7 +459,7 @@ class jsonserver(WSGIExecutioner, HTTP_Status):
principal=unicode(principal),
version=unicode(VERSION),
)
- response = json_encode_binary(response)
+ response = json_encode_binary(response, version)
return json.dumps(response, sort_keys=True, indent=4)
def unmarshal(self, data):
@@ -712,10 +716,11 @@ class xmlserver(KerberosWSGIExecutioner):
# Keep backwards compatibility with client containing
# bug https://fedorahosted.org/freeipa/ticket/3294:
# If `version` is not given in XML-RPC, assume an old version
- options['version'] = capabilities.VERSION_WITHOUT_CAPABILITIES
+ options['version'] = VERSION_WITHOUT_CAPABILITIES
return (name, args, options, None)
- def marshal(self, result, error, _id=None):
+ def marshal(self, result, error, _id=None,
+ version=VERSION_WITHOUT_CAPABILITIES):
if error:
self.debug('response: %s: %s', error.__class__.__name__, str(error))
response = Fault(error.errno, error.strerror)
@@ -723,7 +728,7 @@ class xmlserver(KerberosWSGIExecutioner):
if isinstance(result, dict):
self.debug('response: entries returned %d', result.get('count', 1))
response = (result,)
- return xml_dumps(response, methodresponse=True)
+ return xml_dumps(response, version, methodresponse=True)
class jsonserver_session(jsonserver, KerberosSession):