aboutsummaryrefslogtreecommitdiff
path: root/rpki
diff options
context:
space:
mode:
Diffstat (limited to 'rpki')
-rw-r--r--rpki/gui/cacheview/util.py24
-rw-r--r--rpki/left_right.py125
-rw-r--r--rpki/publication_control.py1
-rw-r--r--rpki/rpkid.py20
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))