diff options
-rw-r--r-- | rpkid/rpki/left_right.py | 2 | ||||
-rw-r--r-- | rpkid/rpki/rpki_engine.py | 34 | ||||
-rw-r--r-- | rpkid/rpki/up_down.py | 4 |
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): |