summaryrefslogtreecommitdiffstats
path: root/ipaserver
diff options
context:
space:
mode:
authorPetr Viktorin <pviktori@redhat.com>2013-02-21 16:38:58 +0100
committerMartin Kosek <mkosek@redhat.com>2013-02-21 16:38:58 +0100
commit81c53c3d3225e4268453edea5bc28f5a473732c6 (patch)
tree9bccf69ce2338770fabf392d6a33abe7e3d9a00e /ipaserver
parent941b88e19ea1e4b96544d684d0d642ff1ab74b01 (diff)
downloadfreeipa.git-81c53c3d3225e4268453edea5bc28f5a473732c6.tar.gz
freeipa.git-81c53c3d3225e4268453edea5bc28f5a473732c6.tar.xz
freeipa.git-81c53c3d3225e4268453edea5bc28f5a473732c6.zip
Add client capabilities, enable messages
The API version the client sends can now be used to check what the client expects or is capable of. All version tests IPA does will be be named and listed in one module, ipalib.capabilities, which includes a function to test a specific capability against an API version. Similarly to Python's __future__ module, capabilities.py also serves as documentation of backwards-incompatible changes to the API. The first capability to be defined is "messages". Recent enough clients can accept a list of warnings or other info under the "messages" key in the result dict. If a JSON client does not send the API version, it is assumed this is a testing client (e.g. curl from the command line). Such a client "has" all capabilities, but it will always receive a warning mentioning that forward compatibility is not guaranteed. If a XML client does not send the API version, it is assumed it uses the API version before capabilities were introduced. (This is to keep backwards compatibility with clients containing bug https://fedorahosted.org/freeipa/ticket/3294) Whenever a capability is added, the API version must be incremented. To ensure that, capabilities are written to API.txt and checked by `makeapi --validate`. Design page: http://freeipa.org/page/V3/Messages Ticket: https://fedorahosted.org/freeipa/ticket/2732
Diffstat (limited to 'ipaserver')
-rw-r--r--ipaserver/rpcserver.py7
1 files changed, 6 insertions, 1 deletions
diff --git a/ipaserver/rpcserver.py b/ipaserver/rpcserver.py
index 8bce48be..ac86fadd 100644
--- a/ipaserver/rpcserver.py
+++ b/ipaserver/rpcserver.py
@@ -35,7 +35,7 @@ from decimal import Decimal
import urlparse
import time
-from ipalib import plugable
+from ipalib import plugable, capabilities
from ipalib.backend import Executioner
from ipalib.errors import PublicError, InternalError, CommandError, JSONError, ConversionError, CCacheError, RefererError, InvalidSessionPassword, NotFound, ACIError, ExecutionError
from ipalib.request import context, Connection, destroy_context
@@ -732,6 +732,11 @@ class xmlserver(WSGIExecutioner, HTTP_Status, KerberosSession):
def unmarshal(self, data):
(params, name) = xml_loads(data)
(args, options) = params_2_args_options(params)
+ if 'version' not in options:
+ # 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
return (name, args, options, None)
def marshal(self, result, error, _id=None):