diff options
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/rpki/left_right.py | 17 | ||||
-rwxr-xr-x | scripts/rpkid.py | 13 |
2 files changed, 18 insertions, 12 deletions
diff --git a/scripts/rpki/left_right.py b/scripts/rpki/left_right.py index 5611eaac..35d8fd65 100644 --- a/scripts/rpki/left_right.py +++ b/scripts/rpki/left_right.py @@ -3,7 +3,7 @@ """RPKI "left-right" protocol.""" import base64, lxml.etree, time -import rpki.sax_utils, rpki.resource_set, rpki.x509, rpki.sql, rpki.exceptions, rpki.pkcs10, rpki.https +import rpki.sax_utils, rpki.resource_set, rpki.x509, rpki.sql, rpki.exceptions, rpki.pkcs10, rpki.https, rpki.up_down, rpki.relaxng xmlns = "http://www.hactrn.net/uris/rpki/left-right-spec/" @@ -372,6 +372,21 @@ class child_elt(data_elt): self.make_b64elt(elt, "peer_ta", self.peer_ta.get_DER()) return elt + def serve_up_down(self, gctx, query): + """Outer layer of server handling for one up-down PDU from this child.""" + bsc = bsc_elt.sql_fetch(gctx.db, gctx.cur, self.bsc_id) + if bsc is None: + raise rpki.exceptions.NotFound, "Could not find BSC %s" % self.bsc_id + q_elt = rpki.cms.xml_decode(query, self.peer_ta) + rpki.relaxng.up_down.assertValid(q_elt) + q_msg = rpki.up_down.sax_handler.saxify(q_elt) + if q_msg.sender != str(self.child_id): + raise rpki.exceptions.NotFound, "Unexpected XML sender %s" % q_msg.sender + r_msg = q_msg.serve_top_level(gctx, self) + r_elt = r_msg.toXML() + rpki.relaxng.up_down.assertValid(r_elt) + return rpki.cms.xml_encode(r_elt, bsc.private_key_id, bsc.signing_cert) + class repository_elt(data_elt): """<repository/> element.""" diff --git a/scripts/rpkid.py b/scripts/rpkid.py index a23c8a70..95632ba6 100755 --- a/scripts/rpkid.py +++ b/scripts/rpkid.py @@ -28,17 +28,8 @@ def up_down_handler(query, path): raise rpki.exceptions.BadContactURL, "Bad path: %s" % path child = rpki.left_right.child_elt.sql_fetch(gctx.db, gctx.cur, long(child_id)) if child is None: - raise rpki.exceptions.NotFound, "Could not find CMS TA to verify request" - bsc = rpki.left_right.bsc_elt.sql_fetch(gctx.db, gctx.cur, child.bsc_id) - q_elt = rpki.cms.xml_decode(query, child.peer_ta) - rpki.relaxng.up_down.assertValid(q_elt) - q_msg = rpki.up_down.sax_handler.saxify(q_elt) - if q_msg.sender != child_id: - raise rpki.exceptions.NotFound, "Unexpected XML sender %s" % q_msg.sender - r_msg = q_msg.serve_top_level(gctx) - r_elt = r_msg.toXML() - rpki.relaxng.up_down.assertValid(r_elt) - return 200, rpki.cms.xml_encode(r_elt, bsc.private_key_id, bsc.signing_cert) + raise rpki.exceptions.NotFound, "Could not find child %s" % child_id + return 200, child.serve_up_down(gctx, query) except Exception, data: traceback.print_exc() return 500, "Unhandled exception %s" % data |