aboutsummaryrefslogtreecommitdiff
path: root/rpki
diff options
context:
space:
mode:
Diffstat (limited to 'rpki')
-rw-r--r--rpki/irdb/zookeeper.py20
-rw-r--r--rpki/rpkic.py20
2 files changed, 31 insertions, 9 deletions
diff --git a/rpki/irdb/zookeeper.py b/rpki/irdb/zookeeper.py
index 9d40263c..bca56926 100644
--- a/rpki/irdb/zookeeper.py
+++ b/rpki/irdb/zookeeper.py
@@ -150,15 +150,27 @@ class PEM_writer(object):
def etree_read(filename_or_etree_wrapper, schema = rpki.relaxng.oob_setup):
"""
Read an etree from a file, verifying then stripping XML namespace
- cruft. As a convenience, we also accept an etree_wrapper object in
- place of a filename, in which case we deepcopy the etree directly
- from the etree_wrapper and there's no need for a file.
+ cruft.
+
+ As a convenience, we also accept an etree_wrapper object in place
+ of a filename, in which case we deepcopy the etree directly from
+ the etree_wrapper and there's no need for a file.
+
+ As a further convenience, we also accept an Element object,
+ in which case we just validate and return it.
+
+ This function's behavior has changed over time, and the code which
+ calls it is overdue for refactoring, but the relevant code in
+ rpki.gui.app.views is a bit complex, so that yak will have to take
+ a number and wait for its shave, today we have a bug to fix.
"""
if isinstance(filename_or_etree_wrapper, etree_wrapper):
e = copy.deepcopy(filename_or_etree_wrapper.etree)
- else:
+ elif isinstance(filename_or_etree_wrapper, (str, unicode)):
e = ElementTree(file = filename_or_etree_wrapper).getroot()
+ else:
+ e = filename_or_etree_wrapper
schema.assertValid(e)
return e
diff --git a/rpki/rpkic.py b/rpki/rpkic.py
index 199a685d..51a4d6d2 100644
--- a/rpki/rpkic.py
+++ b/rpki/rpkic.py
@@ -64,6 +64,16 @@ class swap_uids(object):
return False
+def read_xml_swapped_uids(filename):
+ """
+ Read an XML file with UIDs swapped.
+ """
+
+ from lxml.etree import ElementTree
+
+ with swap_uids():
+ return ElementTree(file = filename).getroot()
+
class main(Cmd):
prompt = "rpkic> "
@@ -368,7 +378,7 @@ class main(Cmd):
up-down protocol service URI.
"""
- r, child_handle = self.zoo.configure_child(args.child_xml, args.child_handle, args.valid_until)
+ r, child_handle = self.zoo.configure_child(read_xml_swapped_uids(args.child_xml), args.child_handle, args.valid_until)
with swap_uids():
r.save("%s.%s.parent-response.xml" % (self.zoo.handle, child_handle), sys.stdout)
self.zoo.synchronize_ca()
@@ -415,7 +425,7 @@ class main(Cmd):
synchronize here, run the synchronize command yourself.
"""
- r, parent_handle = self.zoo.configure_parent(args.parent_xml, args.parent_handle)
+ r, parent_handle = self.zoo.configure_parent(read_xml_swapped_uids(args.parent_xml), args.parent_handle)
with swap_uids():
r.save("%s.%s.repository-request.xml" % (self.zoo.handle, parent_handle), sys.stdout)
@@ -486,7 +496,7 @@ class main(Cmd):
message containing the repository's BPKI data and service URI.
"""
- r, client_handle = self.zoo.configure_publication_client(args.client_xml, args.sia_base, args.flat)
+ r, client_handle = self.zoo.configure_publication_client(read_xml_swapped_uids(args.client_xml), args.sia_base, args.flat)
with swap_uids():
r.save("%s.repository-response.xml" % client_handle.replace("/", "."), sys.stdout)
try:
@@ -527,7 +537,7 @@ class main(Cmd):
corresponding parent data in our local database.
"""
- self.zoo.configure_repository(args.repository_xml, args.parent_handle)
+ self.zoo.configure_repository(read_xml_swapped_uids(args.repository_xml), args.parent_handle)
self.zoo.synchronize_ca()
@@ -773,7 +783,7 @@ class main(Cmd):
Load router certificate request(s) into IRDB from XML file.
"""
- self.zoo.add_router_certificate_request(args.router_certificate_request_xml, args.valid_until)
+ self.zoo.add_router_certificate_request(read_xml_swapped_uids(args.router_certificate_request_xml), args.valid_until)
if self.autosync:
self.zoo.run_rpkid_now()