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.py34
1 files changed, 20 insertions, 14 deletions
diff --git a/rpkid/rpki/left_right.py b/rpkid/rpki/left_right.py
index 99786a29..784c8b7b 100644
--- a/rpkid/rpki/left_right.py
+++ b/rpkid/rpki/left_right.py
@@ -34,9 +34,9 @@ class left_right_namespace(object):
class data_elt(rpki.xml_utils.data_elt, rpki.sql.sql_persistant, left_right_namespace):
"""Virtual class for top-level left-right protocol data elements."""
- def self(this):
+ def self(self):
"""Fetch self object to which this object links."""
- return self_elt.sql_fetch(this.gctx, this.self_id)
+ return self_elt.sql_fetch(self.gctx, self.self_id)
def bsc(self):
"""Return BSC object to which this object links."""
@@ -161,6 +161,15 @@ class self_elt(data_elt):
ca_map = dict((ca.parent_resource_class, ca) for ca in parent.cas())
def class_loop(class_iterator, rc):
+
+ def class_update_failed(e):
+ rpki.log.warn("Couldn't update class, skipping: %s" % e)
+ class_iterator()
+
+ def class_create_failed(e):
+ rpki.log.warn("Couldn't create class, skipping: %s" % e)
+ class_iterator()
+
if rc.class_name in ca_map:
ca = ca_map[rc.class_name]
del ca_map[rc.class_name]
@@ -168,14 +177,6 @@ class self_elt(data_elt):
else:
rpki.rpki_engine.ca_obj.create(parent, rc, class_iterator, class_create_failed)
- def class_update_failed(e):
- rpki.log.warn("Couldn't update class, skipping: %s" % e)
- class_iterator()
-
- def class_create_failed(e):
- rpki.log.warn("Couldn't create class, skipping: %s" % e)
- class_iterator()
-
def class_done():
for ca in ca_map.values():
ca.delete(parent) # CA not listed by parent
@@ -572,9 +573,13 @@ class repository_elt(data_elt):
bpki_ta_path = (self.gctx.bpki_ta, self.self().bpki_cert, self.self().bpki_glue, self.bpki_https_cert, self.bpki_https_glue)
def done(r_cms):
- r_msg = rpki.publication.cms_msg.unwrap(r_cms, bpki_ta_path)
- assert len(r_msg) == 1
- callback(r_msg[0])
+ 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" % msg
+ callback()
+ except Exception, edata:
+ errback(edata)
rpki.https.client(
client_key = bsc.private_key_id,
@@ -582,7 +587,8 @@ class repository_elt(data_elt):
server_ta = bpki_ta_path,
url = self.peer_contact_uri,
msg = q_cms,
- callback = done)
+ callback = done,
+ errback = errback)
def publish(self, obj, uri, callback, errback):
"""Publish one object in the repository."""