aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--rpkid/rpki/left_right.py2
-rw-r--r--rpkid/rpki/rpki_engine.py34
-rw-r--r--rpkid/rpki/up_down.py4
3 files changed, 27 insertions, 13 deletions
diff --git a/rpkid/rpki/left_right.py b/rpkid/rpki/left_right.py
index dae834b2..3fc20f07 100644
--- a/rpkid/rpki/left_right.py
+++ b/rpkid/rpki/left_right.py
@@ -342,7 +342,7 @@ class self_elt(data_elt):
child_certs = child.child_certs()
if child_certs:
- self.gctx.irdb_query(child.self().self_handle, child.child_handle, got_resources, irdb_lookup_failed)
+ self.gctx.irdb_query_child_resources(child.self().self_handle, child.child_handle, got_resources, irdb_lookup_failed)
else:
iterator1()
diff --git a/rpkid/rpki/rpki_engine.py b/rpkid/rpki/rpki_engine.py
index 5bbde36d..70fdea5b 100644
--- a/rpkid/rpki/rpki_engine.py
+++ b/rpkid/rpki/rpki_engine.py
@@ -58,7 +58,7 @@ class rpkid_context(object):
self.publication_kludge_base = cfg.get("publication-kludge-base", "publication/")
- def irdb_query(self, self_handle, child_handle, callback, errback):
+ def irdb_query(self, q_pdu, callback, errback):
"""
Perform an IRDB callback query.
"""
@@ -67,22 +67,16 @@ class rpkid_context(object):
q_msg = rpki.left_right.msg()
q_msg.type = "query"
- q_msg.append(rpki.left_right.list_resources_elt())
- q_msg[0].self_handle = self_handle
- q_msg[0].child_handle = child_handle
+ q_msg.append(q_pdu)
q_cms = rpki.left_right.cms_msg.wrap(q_msg, self.rpkid_key, self.rpkid_cert)
def unwrap(der):
r_msg = rpki.left_right.cms_msg.unwrap(der, (self.bpki_ta, self.irdb_cert))
- if len(r_msg) == 0 or not isinstance(r_msg[0], rpki.left_right.list_resources_elt) or r_msg.type != "reply":
+ if len(r_msg) == 0 or [r_pdu for r_pdu in r_msg if type(r_pdu) is not type(q_pdu)] or r_msg.type != "reply":
errback(rpki.exceptions.BadIRDBReply(
"Unexpected response to IRDB query: %s" % lxml.etree.tostring(r_msg.toXML(), pretty_print = True, encoding = "us-ascii")))
else:
- callback(rpki.resource_set.resource_bag(
- asn = r_msg[0].asn,
- v4 = r_msg[0].ipv4,
- v6 = r_msg[0].ipv6,
- valid_until = r_msg[0].valid_until))
+ callback(r_msg)
rpki.https.client(
server_ta = (self.bpki_ta, self.irdb_cert),
@@ -93,6 +87,26 @@ class rpkid_context(object):
callback = unwrap,
errback = errback)
+ def irdb_query_child_resources(self, self_handle, child_handle, callback, errback):
+ """
+ Ask IRDB about a child's resources.
+ """
+
+ rpki.log.trace()
+
+ q_pdu = rpki.left_right.list_resources_elt()
+ q_pdu.self_handle = self_handle
+ q_pdu.child_handle = child_handle
+
+ def done(r_msg):
+ callback(rpki.resource_set.resource_bag(
+ asn = r_msg[0].asn,
+ v4 = r_msg[0].ipv4,
+ v6 = r_msg[0].ipv6,
+ valid_until = r_msg[0].valid_until))
+
+ self.irdb_query(q_pdu, done, errback)
+
def left_right_handler(self, query, path, cb):
"""
Process one left-right PDU.
diff --git a/rpkid/rpki/up_down.py b/rpkid/rpki/up_down.py
index fbe10151..a7e14a43 100644
--- a/rpkid/rpki/up_down.py
+++ b/rpkid/rpki/up_down.py
@@ -269,7 +269,7 @@ class list_pdu(base_elt):
r_msg.payload.classes.append(rc)
callback()
- self.gctx.irdb_query(child.self().self_handle, child.child_handle, handle, errback)
+ self.gctx.irdb_query_child_resources(child.self().self_handle, child.child_handle, handle, errback)
@classmethod
def query(cls, parent, cb, eb):
@@ -403,7 +403,7 @@ class issue_pdu(base_elt):
callback = got_child_cert,
errback = errback)
- self.gctx.irdb_query(child.self().self_handle, child.child_handle, got_resources, errback)
+ self.gctx.irdb_query_child_resources(child.self().self_handle, child.child_handle, got_resources, errback)
@classmethod
def query(cls, parent, ca, ca_detail, callback, errback):