diff options
author | Michael Elkins <melkins@tislabs.com> | 2013-03-18 15:57:11 +0000 |
---|---|---|
committer | Michael Elkins <melkins@tislabs.com> | 2013-03-18 15:57:11 +0000 |
commit | e612d70bdef358121a9c3f7e422e662dcc32fdf3 (patch) | |
tree | 86e183782cf5ade3fbea63b47e3a4d694f367d69 /rpkid/rpki/gui/cacheview/util.py | |
parent | 05f8d3e67ed099d7272f6d106743f02664990c8a (diff) |
merge work for #460
svn path=/trunk/; revision=5166
Diffstat (limited to 'rpkid/rpki/gui/cacheview/util.py')
-rw-r--r-- | rpkid/rpki/gui/cacheview/util.py | 50 |
1 files changed, 32 insertions, 18 deletions
diff --git a/rpkid/rpki/gui/cacheview/util.py b/rpkid/rpki/gui/cacheview/util.py index 2f5cfd90..dffa591f 100644 --- a/rpkid/rpki/gui/cacheview/util.py +++ b/rpkid/rpki/gui/cacheview/util.py @@ -52,26 +52,40 @@ def rcynic_cert(cert, obj): obj.asns.clear() obj.addresses.clear() - for asr in cert.resources.asn: - logger.debug('processing %s' % asr) - - attrs = {'min': asr.min, 'max': asr.max} - q = models.ASRange.objects.filter(**attrs) - if not q: - obj.asns.create(**attrs) - else: - obj.asns.add(q[0]) - - for cls, addr_obj, addrset in (models.AddressRange, obj.addresses, cert.resources.v4), (models.AddressRangeV6, obj.addresses_v6, cert.resources.v6): - for rng in addrset: - logger.debug('processing %s' % rng) - - attrs = {'prefix_min': rng.min, 'prefix_max': rng.max} - q = cls.objects.filter(**attrs) + if cert.resources.asn.inherit: + # FIXME: what happens when the parent's resources change and the child + # cert is not reissued? + obj.asns.add(*obj.issuer.asns.all()) + else: + for asr in cert.resources.asn: + logger.debug('processing %s' % asr) + + attrs = {'min': asr.min, 'max': asr.max} + q = models.ASRange.objects.filter(**attrs) if not q: - addr_obj.create(**attrs) + obj.asns.create(**attrs) else: - addr_obj.add(q[0]) + obj.asns.add(q[0]) + + for cls, addr_obj, addrset, parentset in ( + models.AddressRange, obj.addresses, cert.resources.v4, + obj.issuer.addresses + ), ( + models.AddressRangeV6, obj.addresses_v6, cert.resources.v6, + obj.issuer.addresses_v6 + ): + if addrset.inherit: + addr_obj.add(*parentset.all()) + else: + for rng in addrset: + logger.debug('processing %s' % rng) + + attrs = {'prefix_min': rng.min, 'prefix_max': rng.max} + q = cls.objects.filter(**attrs) + if not q: + addr_obj.create(**attrs) + else: + addr_obj.add(q[0]) def rcynic_roa(roa, obj): |