[Freeipa-devel] [PATCH] 300-301 Fix DNS SOA serial parameters boundaries

Petr Viktorin pviktori at redhat.com
Wed Sep 5 10:14:17 UTC 2012


This works well, but please see some comments below.

On 09/04/2012 04:22 PM, Martin Kosek wrote:
> To test, simply run the following command:
>
>   ipa dnszone-mod example.com --serial=4294967295
>
> This should work well on patched server&client. Web UI should work too as it
> reads the max limit dynamically.

Please put this in the test suite.

> ---
> [PATCH 2/2] Fix DNS SOA serial parameters boundaries:
>
> Set correct boundaries for DNS SOA serial parameters (see RFC 1035,
> 2181).
>
>
> [PATCH 1/2] Transfer long numbers over XMLRPC
>
> Numeric parameters in ipalib were limited by XMLRPC boundaries for
> integer (2^31-1) which is too low for some LDAP attributes like DNS
> SOA serial field.
>
> Transfer numbers which are not in XMLRPC boundary as a string and not
> as a number to workaround this limitation. Int parameter had to be
> updated to also accept Python's long type as valid int type.
>
>
> freeipa-mkosek-300-transfer-long-numbers-over-xmlrpc.patch
>
>
>>From 8782015a17b130c5ebae8b014a7241810b10dedd Mon Sep 17 00:00:00 2001
> From: Martin Kosek<mkosek at redhat.com>
> Date: Tue, 4 Sep 2012 15:49:26 +0200
> Subject: [PATCH 1/2] Transfer long numbers over XMLRPC
>
> Numeric parameters in ipalib were limited by XMLRPC boundaries for
> integer (2^31-1) which is too low for some LDAP attributes like DNS
> SOA serial field.
>
> Transfer numbers which are not in XMLRPC boundary as a string and not
> as a number to workaround this limitation. Int parameter had to be
> updated to also accept Python's long type as valid int type.
>
> https://fedorahosted.org/freeipa/ticket/2568
> ---
>   ipalib/parameters.py | 12 ++++++------
>   ipalib/rpc.py        |  5 ++++-
>   2 files changed, 10 insertions(+), 7 deletions(-)
>
> diff --git a/ipalib/parameters.py b/ipalib/parameters.py
> index de0d14faf08d1ab79c99e65dab9cc08f406e3a1d..21e30356b2a351bf7a3be7d47d7fabf0130cf6d4 100644
> --- a/ipalib/parameters.py
> +++ b/ipalib/parameters.py
> @@ -1077,7 +1077,7 @@ class Number(Param):
>           """
>           if type(value) is self.type:
>               return value
> -        if type(value) in (unicode, int, float):
> +        if type(value) in (unicode, int, long, float):


PEP8 says that "Object type comparisons should always use isinstance() 
instead of comparing types directly".
It would be nice to change the old code whenever it is touched. It's 
also in a few more places in the patch.

> diff --git a/ipalib/rpc.py b/ipalib/rpc.py
> index d1764e3e30492d5855450398e86689bfcad7aa39..85239ac65903acf447a4d971cce70f819979ce8d 100644
> --- a/ipalib/rpc.py
> +++ b/ipalib/rpc.py
> @@ -94,6 +95,8 @@ def xml_wrap(value):
>       if type(value) is Decimal:
>           # transfer Decimal as a string
>           return unicode(value)
> +    if isinstance(value, (int, long)) and (value < MININT or value > MAXINT):
> +        return unicode(value)
>       if isinstance(value, DN):
>           return str(value)
>       assert type(value) in (unicode, int, float, bool, NoneType)

`long` should also be included here.

 >>> api.Command.user_find(uidnumber=1511000000)
{'count': 1, 'truncated': False, 'result': ({...},), 'summary': u'1 user 
matched'}
 >>> api.Command.user_find(uidnumber=1511000000 + 0L)
Traceback (most recent call last):
   File "<console>", line 1, in <module>
...
   File "/usr/lib/python2.7/site-packages/ipalib/rpc.py", line 102, in 
xml_wrap
     assert type(value) in (unicode, int, float, bool, NoneType)
AssertionError




-- 
Petr³




More information about the Freeipa-devel mailing list