summaryrefslogtreecommitdiffstats
path: root/ipalib
diff options
context:
space:
mode:
authorRob Crittenden <rcritten@redhat.com>2011-01-17 16:23:53 -0500
committerSimo Sorce <ssorce@redhat.com>2011-01-18 10:03:55 -0500
commit886e417fd76b25a28cde70be8de2851047ed0338 (patch)
tree3eeeae423ce3f9fb199dcf415f8143039af33eee /ipalib
parentec3e7f1202935e4c82fd8b7c76a4d03d9ee6a19b (diff)
downloadfreeipa-886e417fd76b25a28cde70be8de2851047ed0338.tar.gz
freeipa-886e417fd76b25a28cde70be8de2851047ed0338.tar.xz
freeipa-886e417fd76b25a28cde70be8de2851047ed0338.zip
Set the default Int maxvalue to the maximum XML-RPC can handle.
Also handle marshalling errors thrown by xmlrpclib more gracefully. ticket 770
Diffstat (limited to 'ipalib')
-rw-r--r--ipalib/errors.py14
-rw-r--r--ipalib/parameters.py3
-rw-r--r--ipalib/rpc.py4
3 files changed, 19 insertions, 2 deletions
diff --git a/ipalib/errors.py b/ipalib/errors.py
index 2cafb0109..225019041 100644
--- a/ipalib/errors.py
+++ b/ipalib/errors.py
@@ -420,6 +420,20 @@ class JSONError(PublicError):
format = _('Invalid JSON-RPC request: %(error)s')
+class XMLRPCMarshallError(PublicError):
+ """
+ **910** Raised when the XML-RPC lib cannot marshall the request
+
+ For example:
+
+ >>> raise XMLRPCMarshallError(error='int exceeds XML-RPC limits')
+ Traceback (most recent call last):
+ ...
+ XMLRPCMarshallError: error marshalling data for XML-RPC transport: int exceeds XML-RPC limits
+ """
+
+ errno = 910
+ format = _('error marshalling data for XML-RPC transport: %(error)s')
##############################################################################
# 1000 - 1999: Authentication errors
diff --git a/ipalib/parameters.py b/ipalib/parameters.py
index 78eacde25..0d6c69029 100644
--- a/ipalib/parameters.py
+++ b/ipalib/parameters.py
@@ -109,6 +109,7 @@ from errors import PasswordMismatch
from constants import NULLS, TYPE_ERROR, CALLABLE_ERROR
from text import Gettext, FixMe
import csv
+from xmlrpclib import MAXINT
class DefaultFrom(ReadOnly):
@@ -1002,7 +1003,7 @@ class Int(Number):
kwargs = Param.kwargs + (
('minvalue', int, None),
- ('maxvalue', int, None),
+ ('maxvalue', int, int(MAXINT)),
)
def __init__(self, name, *rules, **kw):
diff --git a/ipalib/rpc.py b/ipalib/rpc.py
index dd8507630..3457640e4 100644
--- a/ipalib/rpc.py
+++ b/ipalib/rpc.py
@@ -38,7 +38,7 @@ import errno
from xmlrpclib import Binary, Fault, dumps, loads, ServerProxy, Transport, ProtocolError
import kerberos
from ipalib.backend import Connectible
-from ipalib.errors import public_errors, PublicError, UnknownError, NetworkError, KerberosError
+from ipalib.errors import public_errors, PublicError, UnknownError, NetworkError, KerberosError, XMLRPCMarshallError
from ipalib import errors
from ipalib.request import context
from ipapython import ipautil, dnsclient
@@ -373,3 +373,5 @@ class xmlclient(Connectible):
raise NetworkError(uri=server, error=e.errmsg)
except socket.error, e:
raise NetworkError(uri=server, error=str(e))
+ except (OverflowError, TypeError), e:
+ raise XMLRPCMarshallError(error=str(e))