aboutsummaryrefslogtreecommitdiff
path: root/rpki
diff options
context:
space:
mode:
authorRob Austein <sra@hactrn.net>2016-04-26 22:58:04 +0000
committerRob Austein <sra@hactrn.net>2016-04-26 22:58:04 +0000
commit883112a925885a7dcfcbdaaa4d748e16140f8389 (patch)
treedbed843daf1de3a1884f97e6aa9c9cfdbb3fdc8c /rpki
parent89245def44ce5d2f7fbf665155b42794484c507d (diff)
Handle non-existant root certificate correctly in rpkic extract_root_* commands. Fixes #808.
svn path=/branches/tk705/; revision=6393
Diffstat (limited to 'rpki')
-rw-r--r--rpki/irdb/zookeeper.py6
-rw-r--r--rpki/rpkic.py28
2 files changed, 22 insertions, 12 deletions
diff --git a/rpki/irdb/zookeeper.py b/rpki/irdb/zookeeper.py
index f0fda08a..72daa952 100644
--- a/rpki/irdb/zookeeper.py
+++ b/rpki/irdb/zookeeper.py
@@ -392,7 +392,11 @@ class Zookeeper(object):
r_msg = self.call_rpkid(q_msg)
assert len(r_msg) == 1 and r_msg[0].tag == rpki.left_right.tag_parent
- cert = rpki.x509.X509(Base64 = r_msg[0].findtext(rpki.left_right.tag_rpki_root_cert))
+ b64 = r_msg[0].findtext(rpki.left_right.tag_rpki_root_cert)
+ if not b64:
+ return None, ()
+
+ cert = rpki.x509.X509(Base64 = b64)
caDirectory, rpkiManifest, signedObjectRepository, rpkiNotify = cert.get_SIA()
sia_base = r_msg[0].get("sia_base")
fn = cert.gSKI() + ".cer"
diff --git a/rpki/rpkic.py b/rpki/rpkic.py
index e297c4d8..d90ad690 100644
--- a/rpki/rpkic.py
+++ b/rpki/rpkic.py
@@ -450,10 +450,13 @@ class main(Cmd):
"""
cert, uris = self.zoo.extract_root_certificate_and_uris(args.root_handle)
- fn = args.output_file or (cert.gSKI() + ".cer")
- with open_swapped_uids(fn, "wb") as f:
- print "Writing", f.name
- f.write(cert.get_DER())
+ if cert is None:
+ print "No certificate currently available"
+ else:
+ fn = args.output_file or (cert.gSKI() + ".cer")
+ with open_swapped_uids(fn, "wb") as f:
+ print "Writing", f.name
+ f.write(cert.get_DER())
@parsecmd(argsubparsers,
@@ -465,13 +468,16 @@ class main(Cmd):
"""
cert, uris = self.zoo.extract_root_certificate_and_uris(args.root_handle)
- fn = args.output_file or (cert.gSKI() + ".tal")
- with open_swapped_uids(fn, "w") as f:
- print "Writing", f.name
- for uri in uris:
- f.write(uri + "\n")
- f.write("\n")
- f.write(cert.getPublicKey().get_Base64())
+ if cert is None:
+ print "No certificate currently available"
+ else:
+ fn = args.output_file or (cert.gSKI() + ".tal")
+ with open_swapped_uids(fn, "w") as f:
+ print "Writing", f.name
+ for uri in uris:
+ f.write(uri + "\n")
+ f.write("\n")
+ f.write(cert.getPublicKey().get_Base64())
@parsecmd(argsubparsers,