aboutsummaryrefslogtreecommitdiff
path: root/scripts/rpki
diff options
context:
space:
mode:
authorRob Austein <sra@hactrn.net>2007-10-23 07:20:27 +0000
committerRob Austein <sra@hactrn.net>2007-10-23 07:20:27 +0000
commit66445ed4ac325b63a6f8b1138d02ffb4d6314b3b (patch)
treedc3692bb7782c9a47ccd743f4715bde8abfd818d /scripts/rpki
parent4eda44bbddd2bdf2963ed285746f9a197725f959 (diff)
Insomnia
svn path=/scripts/Makefile; revision=1188
Diffstat (limited to 'scripts/rpki')
-rw-r--r--scripts/rpki/left_right.py11
-rw-r--r--scripts/rpki/up_down.py21
2 files changed, 29 insertions, 3 deletions
diff --git a/scripts/rpki/left_right.py b/scripts/rpki/left_right.py
index 820f506e..a282a7b8 100644
--- a/scripts/rpki/left_right.py
+++ b/scripts/rpki/left_right.py
@@ -474,7 +474,16 @@ class child_elt(data_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)
+ try:
+ r_msg = q_msg.serve_top_level(gctx, self)
+ except Exception, data:
+ traceback.print_exc()
+ r_msg = q_msg.serve_error(data)
+ #
+ # Exceptions from this point on are problematic, as we have no
+ # sane way of reporting errors in the error reporting mechanism.
+ # May require refactoring, ignore the issue for now.
+ #
r_elt = r_msg.toXML()
rpki.relaxng.up_down.assertValid(r_elt)
return rpki.cms.xml_sign(r_elt, bsc.private_key_id, bsc.signing_cert)
diff --git a/scripts/rpki/up_down.py b/scripts/rpki/up_down.py
index 9eaddd20..268134ca 100644
--- a/scripts/rpki/up_down.py
+++ b/scripts/rpki/up_down.py
@@ -385,6 +385,17 @@ class error_response_pdu(base_elt):
1302 : "Revoke - no such key",
2001 : "Internal Server Error - Request not performed" }
+ exceptions = {}
+
+ def __init__(self, exception = None):
+ """Initialize an error_response PDU from an exception object."""
+ if exception is not None:
+ if exception in self.exceptions:
+ self.status = exceptions[exception]
+ else:
+ self.status = 2001
+ self.description = str(exception)
+
def endElement(self, stack, name, text):
"""Handle "error_response" PDU."""
if name == "status":
@@ -392,8 +403,6 @@ class error_response_pdu(base_elt):
if code not in self.codes:
raise rpki.exceptions.BadStatusCode, "%s is not a known status code"
self.status = code
- elif name == "last_message_processed":
- self.last_message_processed = text
elif name == "description":
self.description = text
else:
@@ -457,6 +466,14 @@ class message_pdu(base_elt):
self.payload.serve_pdu(gctx, self, r_msg, child)
return r_msg
+ def serve_error(self, exception):
+ """Generate an error_response message PDU."""
+ r_msg = message_pdu()
+ r_msg.sender = self.receiver
+ r_msg.receiver = self.sender
+ r_msg.payload = error_response_pdu(exception)
+ return r_msg
+
@classmethod
def make_query(cls, payload, sender = "tweedledee", recipient = "tweedledum"):
"""Construct one message PDU."""