diff options
author | Rob Austein <sra@hactrn.net> | 2016-04-26 22:58:04 +0000 |
---|---|---|
committer | Rob Austein <sra@hactrn.net> | 2016-04-26 22:58:04 +0000 |
commit | 883112a925885a7dcfcbdaaa4d748e16140f8389 (patch) | |
tree | dbed843daf1de3a1884f97e6aa9c9cfdbb3fdc8c /rpki | |
parent | 89245def44ce5d2f7fbf665155b42794484c507d (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.py | 6 | ||||
-rw-r--r-- | rpki/rpkic.py | 28 |
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, |