aboutsummaryrefslogtreecommitdiff
path: root/rpkid/rpki/left_right.py
diff options
context:
space:
mode:
Diffstat (limited to 'rpkid/rpki/left_right.py')
-rw-r--r--rpkid/rpki/left_right.py29
1 files changed, 22 insertions, 7 deletions
diff --git a/rpkid/rpki/left_right.py b/rpkid/rpki/left_right.py
index c64204b5..7a9ef4f2 100644
--- a/rpkid/rpki/left_right.py
+++ b/rpkid/rpki/left_right.py
@@ -580,8 +580,14 @@ class repository_elt(data_elt):
def done(r_cms):
try:
r_msg = rpki.publication.cms_msg.unwrap(r_cms, bpki_ta_path)
- if len(r_msg) != 1 or isinstance(r_msg[0], rpki.publication.report_error_elt):
- raise rpki.exceptions.BadPublicationReply, "Unexpected response from pubd: %s" % str(r_msg)
+ if len(r_msg) != 1: # Some day we may allow this, but not today
+ raise rpki.exceptions.BadPublicationReply, "Unexpected response from pubd: %r" % r_msg
+ if isinstance(r_msg[0], rpki.publication.report_error_elt):
+ t = rpki.exceptions.__dict__.get(r_msg[0].error_code)
+ if isinstance(t, type) and issubclass(t, rpki.exceptions.RPKI_Exception):
+ raise t, getattr(r_msg[0], "text", None)
+ else:
+ raise rpki.exceptions.BadPublicationReply, "Unexpected response from pubd: %s" % r_msg[0]
callback()
except (rpki.async.ExitNow, SystemExit):
raise
@@ -601,17 +607,26 @@ class repository_elt(data_elt):
"""
Publish one object in the repository.
"""
+ def fail(e):
+ rpki.log.warn("Publication of %r as %r failed: %s" % (obj, uri, e))
+ errback(e)
rpki.log.trace()
- rpki.log.info("Publishing %s as %s" % (repr(obj), repr(uri)))
- self.call_pubd(callback, errback, rpki.publication.obj2elt[type(obj)].make_pdu(action = "publish", uri = uri, payload = obj))
+ rpki.log.info("Publishing %r as %r" % (obj, uri))
+ self.call_pubd(callback, fail, rpki.publication.obj2elt[type(obj)].make_pdu(action = "publish", uri = uri, payload = obj))
- def withdraw(self, obj, uri, callback, errback):
+ def withdraw(self, obj, uri, callback, errback, allow_failure = False):
"""
Withdraw one object from the repository.
"""
+ def fail(e):
+ rpki.log.warn("Withdrawal of %r from %r failed: %s" % (obj, uri, e))
+ if allow_failure and isinstance(e, rpki.exceptions.NoObjectAtURI):
+ callback()
+ else:
+ errback(e)
rpki.log.trace()
- rpki.log.info("Withdrawing %s from at %s" % (repr(obj), repr(uri)))
- self.call_pubd(callback, errback, rpki.publication.obj2elt[type(obj)].make_pdu(action = "withdraw", uri = uri))
+ rpki.log.info("Withdrawing %r from %r" % (obj, uri))
+ self.call_pubd(callback, fail, rpki.publication.obj2elt[type(obj)].make_pdu(action = "withdraw", uri = uri))
class parent_elt(data_elt):
"""