diff options
-rw-r--r-- | rpki/gui/cacheview/util.py | 24 | ||||
-rw-r--r-- | rpki/left_right.py | 125 | ||||
-rw-r--r-- | rpki/publication_control.py | 1 | ||||
-rw-r--r-- | rpki/rpkid.py | 20 |
4 files changed, 27 insertions, 143 deletions
diff --git a/rpki/gui/cacheview/util.py b/rpki/gui/cacheview/util.py index 31ad8b8b..21430091 100644 --- a/rpki/gui/cacheview/util.py +++ b/rpki/gui/cacheview/util.py @@ -32,6 +32,7 @@ from django.db import transaction import django.db.models import rpki +import rpki.left_right import rpki.gui.app.timestamp from rpki.gui.app.models import Conf, Alert from rpki.gui.cacheview import models @@ -39,6 +40,8 @@ from rpki.rcynic import rcynic_xml_iterator, label_iterator from rpki.sundial import datetime from rpki.irdb.zookeeper import Zookeeper +from lxml.etree import Element, SubElement + logger = logging.getLogger(__name__) @@ -315,18 +318,21 @@ def fetch_published_objects(): logger.info('querying for published objects') handles = [conf.handle for conf in Conf.objects.all()] - req = [rpki.left_right.list_published_objects_elt.make_pdu(action='list', self_handle=h, tag=h) for h in handles] + q_msg = Element(rpki.left_right.tag_msg, nsmap = rpki.left_right.nsmap, + type = "query", version = rpki.left_right.version) + for h in handles: + SubElement(q_msg, rpki.left_right.tag_list_published_objects, action="list", self_handle=h, tag=h) z = Zookeeper() - pdus = z.call_rpkid(*req) - for pdu in pdus: - if isinstance(pdu, rpki.left_right.list_published_objects_elt): + r_msg = z.call_rpkid(q_msg) + for r_pdu in r_msg: + if r_pdu.tag == rpki.left_right.tag_list_published_objects: # Look up the object in the rcynic cache - qs = models.RepositoryObject.objects.filter(uri=pdu.uri) + qs = models.RepositoryObject.objects.filter(uri=r_pdu.get("uri")) if qs: # get the current validity state valid = qs[0].statuses.filter(status=object_accepted).exists() - uris[pdu.uri] = (pdu.self_handle, valid, False, None) - logger.debug('adding ' + pdu.uri) + uris[r_pdu.get("uri")] = (r_pdu.get("self_handle"), valid, False, None) + logger.debug('adding %s', r_pdu.get("uri")) else: # this object is not in the cache. it was either published # recently, or disappared previously. if it disappeared @@ -334,8 +340,8 @@ def fetch_published_objects(): # omit the uri from the list since we are interested only in # objects which were valid and are no longer valid pass - elif isinstance(pdu, rpki.left_right.report_error_elt): - logging.error('rpkid reported an error: %s', pdu.error_code) + elif r_pdu.tag == rpki.left_right.tag_report_error: + logging.error('rpkid reported an error: %s', r_pdu.get("error_code")) class Handle(object): diff --git a/rpki/left_right.py b/rpki/left_right.py index 653a2eaf..fff3404d 100644 --- a/rpki/left_right.py +++ b/rpki/left_right.py @@ -1276,131 +1276,6 @@ class child_elt(data_elt): lose(e) -class list_resources_elt(rpki.xml_utils.base_elt, left_right_namespace): - """ - <list_resources/> element. - """ - - element_name = "list_resources" - - valid_until = None - - attributes = dict(valid_until = rpki.sundial.datetime.fromXMLtime, - asn = rpki.resource_set.resource_set_as, - ipv4 = rpki.resource_set.resource_set_ipv4, - ipv6 = rpki.resource_set.resource_set_ipv6) - attributes.update((_, None) for _ in ("self_handle", "tag", "child_handle")) - - def __repr__(self): - return rpki.log.log_repr(self, self.self_handle, self.child_handle, self.asn, self.ipv4, self.ipv6) - - def toXML(self): - """ - Generate <list_resources/> element. This requires special - handling due to the data types of some of the attributes. - """ - - elt = self.make_elt() - if isinstance(self.valid_until, int): - elt.set("valid_until", self.valid_until.toXMLtime()) - return elt - -class list_roa_requests_elt(rpki.xml_utils.base_elt, left_right_namespace): - """ - <list_roa_requests/> element. - """ - - element_name = "list_roa_requests" - - attributes = dict(asn = rpki.resource_set.resource_set_as, - ipv4 = rpki.resource_set.resource_set_ipv4, - ipv6 = rpki.resource_set.resource_set_ipv6) - attributes.update((_, None) for _ in ("self_handle", "tag")) - - def __repr__(self): - return rpki.log.log_repr(self, self.self_handle, self.asn, self.ipv4, self.ipv6) - -class list_ghostbuster_requests_elt(rpki.xml_utils.text_elt, left_right_namespace): - """ - <list_ghostbuster_requests/> element. - """ - - element_name = "list_ghostbuster_requests" - attributes = ("self_handle", "tag", "parent_handle") - text_attribute = "vcard" - - vcard = None - - def __repr__(self): - return rpki.log.log_repr(self, self.self_handle, self.parent_handle) - -class list_ee_certificate_requests_elt(rpki.xml_utils.base_elt, left_right_namespace): - """ - <list_ee_certificate_requests/> element. - """ - - element_name = "list_ee_certificate_requests" - - attributes = dict(valid_until = rpki.sundial.datetime.fromXMLtime, - asn = rpki.resource_set.resource_set_as, - ipv4 = rpki.resource_set.resource_set_ipv4, - ipv6 = rpki.resource_set.resource_set_ipv6, - eku = lambda x: x.split(",")) - attributes.update((_, None) for _ in ("self_handle", "tag", "gski", "cn", "sn")) - - elements = collections.OrderedDict(( - ("pkcs10", rpki.x509.PKCS10),)) - - pkcs10 = None - valid_until = None - eku = None - - def __repr__(self): - return rpki.log.log_repr(self, self.self_handle, self.gski, self.cn, self.sn, self.asn, self.ipv4, self.ipv6) - - def toXML(self): - """ - Generate <list_ee_certificate_requests/> element. This requires special - handling due to the data types of some of the attributes. - """ - - if isinstance(self.eku, (tuple, list)): - self.eku = ",".join(self.eku) - elt = self.make_elt() - for i in self.elements: - self.make_b64elt(elt, i, getattr(self, i, None)) - if isinstance(self.valid_until, int): - elt.set("valid_until", self.valid_until.toXMLtime()) - return elt - -class report_error_elt(rpki.xml_utils.text_elt, left_right_namespace): - """ - <report_error/> element. - """ - - element_name = "report_error" - attributes = ("tag", "self_handle", "error_code") - text_attribute = "error_text" - - error_text = None - - def __repr__(self): - return rpki.log.log_repr(self, self.self_handle, self.error_code) - - @classmethod - def from_exception(cls, e, self_handle = None, tag = None): - """ - Generate a <report_error/> element from an exception. - """ - - self = cls() - self.self_handle = self_handle - self.tag = tag - self.error_code = e.__class__.__name__ - self.error_text = str(e) - return self - - class cms_msg(rpki.x509.XML_CMS_object): """ CMS-signed left-right PDU. diff --git a/rpki/publication_control.py b/rpki/publication_control.py index a863dc34..06e7aa2d 100644 --- a/rpki/publication_control.py +++ b/rpki/publication_control.py @@ -30,7 +30,6 @@ import rpki.resource_set import rpki.x509 import rpki.sql import rpki.exceptions -import rpki.xml_utils import rpki.http import rpki.up_down import rpki.relaxng diff --git a/rpki/rpkid.py b/rpki/rpkid.py index ce7368df..6cbbc7dd 100644 --- a/rpki/rpkid.py +++ b/rpki/rpkid.py @@ -406,15 +406,19 @@ class main(object): # Compatability kludge if isinstance(q_pdu, rpki.left_right.data_elt): - r_msg.append(rpki.left_right.report_error_elt.from_exception( - e, self_handle = q_pdu.self_handle, tag = q_pdu.tag).toXML()) + error_self_handle = q_pdu.self_handle + error_tag = q_pdu.tag else: - r_pdu = rpki.left_right.report_error_elt.from_exception(e, self_handle = q_pdu.get("self_handle")) - tag = q_pdu.get("tag") - if tag: - r_pdu.set("tag", tag) - r_msg.append(r_pdu.toXML()) - + error_self_handle = q_pdu.get("self_handle") + error_tag = q_pdu.get("tag") + + r_pdu = SubElement(r_msg, rpki.left_right.tag_report_error, error_code = e.__class__.__name__) + r_pdu.text = str(e) + if error_tag is not None: + r_pdu.set("tag", error_tag) + if error_self_handle is not None: + r_pdu.set("self_handle", error_self_handle) + self.sql.sweep() cb(200, body = rpki.left_right.cms_msg().wrap(r_msg, self.rpkid_key, self.rpkid_cert)) |