aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Elkins <melkins@tislabs.com>2010-07-10 01:15:41 +0000
committerMichael Elkins <melkins@tislabs.com>2010-07-10 01:15:41 +0000
commitef461322d28618d7b1e2d9f9256bcd8940e86480 (patch)
tree5f584a457ce0a1560569ee24319b309f22fbcadb
parente1b926ad40a412734185ec1012ba3ae203b6e4fb (diff)
properly handle issuing roas for subdivided prefixes
svn path=/portal-gui/rpkigui/myrpki/views.py; revision=3373
-rw-r--r--portal-gui/rpkigui/myrpki/views.py26
1 files changed, 17 insertions, 9 deletions
diff --git a/portal-gui/rpkigui/myrpki/views.py b/portal-gui/rpkigui/myrpki/views.py
index 748e1a22..dcddeeb9 100644
--- a/portal-gui/rpkigui/myrpki/views.py
+++ b/portal-gui/rpkigui/myrpki/views.py
@@ -328,21 +328,29 @@ def prefix_allocate_view(request, pk):
return render('myrpki/prefix_view.html', { 'form': form,
'addr': prefix, 'form': form, 'parent': parent_set }, request)
+def top_parent(prefix):
+ while prefix.parent:
+ prefix = prefix.parent
+ return prefix
+
+def find_roa(handle, prefix, asid):
+ # find all roas with prefixes from the same resource cert
+ roa_set = handle.roas.filter(asn=asid)
+ for c in top_parent(prefix).from_cert.all():
+ for r in roa_set:
+ for req in r.from_roa_request.all():
+ if c in top_parent(req.prefix).from_cert.all():
+ return r
+ return None
+
def add_roa_requests(handle, prefix, asns, max_length):
for asid in asns:
req_set = prefix.roa_requests.filter(roa__asn=asid,
max_length=max_length)
if not req_set:
- # no req is present for this (ASN, prefix, max_length).
-
- # find all roas with prefixes from the same resource cert
- roa_set = handle.roas.filter(asn=asid,
- from_roa_request__prefix__from_cert__in=prefix.from_cert.all())
- if roa_set:
- roa = roa_set[0]
- else:
+ roa = find_roa(handle, prefix, asid)
+ if not roa:
# no roa is present for this ASN, create a new one
- print 'creating new roa for asn %d' % (asid,)
roa = models.Roa.objects.create(asn=asid, conf=handle,
active=False)
roa.save()