Set the default Int maxvalue to the maximum XML-RPC can handle.

Also handle marshalling errors thrown by xmlrpclib more gracefully.

ticket 770
This commit is contained in:
Rob Crittenden 2011-01-17 16:23:53 -05:00 committed by Simo Sorce
parent ec3e7f1202
commit 886e417fd7
3 changed files with 19 additions and 2 deletions

View File

@ -420,6 +420,20 @@ class JSONError(PublicError):
format = _('Invalid JSON-RPC request: %(error)s') 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 # 1000 - 1999: Authentication errors

View File

@ -109,6 +109,7 @@ from errors import PasswordMismatch
from constants import NULLS, TYPE_ERROR, CALLABLE_ERROR from constants import NULLS, TYPE_ERROR, CALLABLE_ERROR
from text import Gettext, FixMe from text import Gettext, FixMe
import csv import csv
from xmlrpclib import MAXINT
class DefaultFrom(ReadOnly): class DefaultFrom(ReadOnly):
@ -1002,7 +1003,7 @@ class Int(Number):
kwargs = Param.kwargs + ( kwargs = Param.kwargs + (
('minvalue', int, None), ('minvalue', int, None),
('maxvalue', int, None), ('maxvalue', int, int(MAXINT)),
) )
def __init__(self, name, *rules, **kw): def __init__(self, name, *rules, **kw):

View File

@ -38,7 +38,7 @@ import errno
from xmlrpclib import Binary, Fault, dumps, loads, ServerProxy, Transport, ProtocolError from xmlrpclib import Binary, Fault, dumps, loads, ServerProxy, Transport, ProtocolError
import kerberos import kerberos
from ipalib.backend import Connectible 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 import errors
from ipalib.request import context from ipalib.request import context
from ipapython import ipautil, dnsclient from ipapython import ipautil, dnsclient
@ -373,3 +373,5 @@ class xmlclient(Connectible):
raise NetworkError(uri=server, error=e.errmsg) raise NetworkError(uri=server, error=e.errmsg)
except socket.error, e: except socket.error, e:
raise NetworkError(uri=server, error=str(e)) raise NetworkError(uri=server, error=str(e))
except (OverflowError, TypeError), e:
raise XMLRPCMarshallError(error=str(e))