diff options
author | Michael Elkins <melkins@tislabs.com> | 2010-07-04 17:36:15 +0000 |
---|---|---|
committer | Michael Elkins <melkins@tislabs.com> | 2010-07-04 17:36:15 +0000 |
commit | 60cf2b285c35807ae68ad8fe5b9013dd31b84c6f (patch) | |
tree | ad28479a779b6665518955a1c87c7d860769bbb0 /portal-gui/rpkigui/myrpki/forms.py | |
parent | fa59bb562d7cbec79899faaa84be5f4441a61028 (diff) |
improve validation for prefix split form
svn path=/portal-gui/rpkigui/myrpki/forms.py; revision=3333
Diffstat (limited to 'portal-gui/rpkigui/myrpki/forms.py')
-rw-r--r-- | portal-gui/rpkigui/myrpki/forms.py | 40 |
1 files changed, 32 insertions, 8 deletions
diff --git a/portal-gui/rpkigui/myrpki/forms.py b/portal-gui/rpkigui/myrpki/forms.py index f86f40dd..fbd02df9 100644 --- a/portal-gui/rpkigui/myrpki/forms.py +++ b/portal-gui/rpkigui/myrpki/forms.py @@ -2,6 +2,7 @@ from django import forms import models +from rpkigui.myrpki.misc import str_to_addr def ConfCertForm(request): class CertForm(forms.ModelForm): @@ -177,23 +178,46 @@ def PrefixSplitForm(prefix, *args, **kwargs): def clean_lo(self): lo = self.cleaned_data.get('lo') - if lo > prefix.hi: + # convert from string to long representation + try: + loaddr = str_to_addr(lo) + except socket.error: + raise forms.ValidationError, 'Invalid IP address string' + pfx_loaddr = str_to_addr(prefix.lo) + pfx_hiaddr = str_to_addr(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') - if hi < prefix.lo: + # convert from string to long representation + try: + hiaddr = str_to_addr(hi) + except socket.error: + raise forms.ValidationError, 'Invalid IP address string' + pfx_loaddr = str_to_addr(prefix.lo) + pfx_hiaddr = str_to_addr(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['hi'] - lo = self.cleaned_data['lo'] - if hi < lo: - raise forms.ValidationError, 'Invalid upper range' - if prefix.allocated: - raise forms.ValidationError, 'Prefix is assigned to child' + 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 = str_to_addr(hi) + loaddr = str_to_addr(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) |