diff options
author | Michael Elkins <melkins@tislabs.com> | 2010-07-27 20:45:21 +0000 |
---|---|---|
committer | Michael Elkins <melkins@tislabs.com> | 2010-07-27 20:45:21 +0000 |
commit | 0b23a6b2f42a37db3e615a828d148e274221c8f4 (patch) | |
tree | f9a8f873db0d3054cfebe54081cf054abdb94d75 /portal-gui/rpkigui/myrpki/forms.py | |
parent | 25665694c204d928d6b78bebfa7d84c421a11e18 (diff) |
strictly enforce non-overlapping resource ranges in AddressRange and Asn object trees.
add cert member to Roa class to hold a pointer to the resource cert from which all prefixes in the roa derive
svn path=/portal-gui/rpkigui/myrpki/forms.py; revision=3418
Diffstat (limited to 'portal-gui/rpkigui/myrpki/forms.py')
-rw-r--r-- | portal-gui/rpkigui/myrpki/forms.py | 70 |
1 files changed, 14 insertions, 56 deletions
diff --git a/portal-gui/rpkigui/myrpki/forms.py b/portal-gui/rpkigui/myrpki/forms.py index e66d8f6d..959d5a20 100644 --- a/portal-gui/rpkigui/myrpki/forms.py +++ b/portal-gui/rpkigui/myrpki/forms.py @@ -60,70 +60,28 @@ def PrefixSplitForm(parent, *args, **kwargs): except ValueError, err: print err raise forms.ValidationError, 'invalid prefix or range' + # we get AssertionError is the range is misordered (hi before lo) + except AssertionError, err: + print err + raise forms.ValidationError, 'invalid prefix or range' pr = parent.as_resource_range() if r.min < pr.min or r.max > pr.max: raise forms.ValidationError, \ 'range is outside parent range' + if r.min == pr.min and r.max == pr.max: + raise forms.ValidationError, \ + 'range is equal to parent' if parent.allocated: - raise forms.ValidationError, 'Prefix is assigned to child' + raise forms.ValidationError, 'prefix is assigned to child' + for p in parent.children.all(): + c = p.as_resource_range() + if c.min <= r.min <= c.max or c.min <= r.max <= c.max: + raise forms.ValidationError, \ + 'overlap with another child prefix: %s' % (c,) + return self.cleaned_data return _wrapper(*args, **kwargs) -#def PrefixSplitForm(prefix, *args, **kwargs): -# class _wrapper(forms.Form): -# lo = forms.IPAddressField() -# hi = forms.IPAddressField() -# -# def clean_lo(self): -# lo = self.cleaned_data.get('lo') -# # convert from string to long representation -# try: -# loaddr = rpki.ipaddrs.parse(lo) -# except socket.error: -# raise forms.ValidationError, 'Invalid IP address string' -# pfx_loaddr = rpki.ipaddrs.parse(prefix.lo) -# pfx_hiaddr = rpki.ipaddrs.parse(prefix.hi) -# if type(loaddr) != type(pfx_hiaddr): -# raise forms.ValidationError, \ -# 'Not the same IP address type as parent' -# if loaddr < pfx_loaddr or loaddr > pfx_hiaddr: -# raise forms.ValidationError, \ -# 'Value out of range of parent prefix' -# return lo -# -# def clean_hi(self): -# hi = self.cleaned_data.get('hi') -# # convert from string to long representation -# try: -# hiaddr = rpki.ipaddrs.parse(hi) -# except socket.error: -# raise forms.ValidationError, 'Invalid IP address string' -# pfx_loaddr = rpki.ipaddrs.parse(prefix.lo) -# pfx_hiaddr = rpki.ipaddrs.parse(prefix.hi) -# if type(hiaddr) != type(pfx_loaddr): -# raise forms.ValidationError, \ -# 'Not the same IP address type as parent' -# if hiaddr < pfx_loaddr or hiaddr > pfx_hiaddr: -# raise forms.ValidationError, \ -# 'Value out of range of parent prefix' -# return hi -# -# def clean(self): -# hi = self.cleaned_data.get('hi') -# lo = self.cleaned_data.get('lo') -# # hi or lo may be None if field validation failed -# if hi and lo: -# # convert from string to long representation -# hiaddr = rpki.ipaddrs.parse(hi) -# loaddr = rpki.ipaddrs.parse(lo) -# if hiaddr < loaddr: -# raise forms.ValidationError, 'Hi value is smaller than Lo' -# if prefix.allocated: -# raise forms.ValidationError, 'Prefix is assigned to child' -# return self.cleaned_data -# -# return _wrapper(*args, **kwargs) - def PrefixAllocateForm(iv, child_set, *args, **kwargs): class _wrapper(forms.Form): child = forms.ModelChoiceField(initial=iv, queryset=child_set, |