diff options
author | Rob Austein <sra@hactrn.net> | 2010-03-05 00:12:22 +0000 |
---|---|---|
committer | Rob Austein <sra@hactrn.net> | 2010-03-05 00:12:22 +0000 |
commit | dac9c84f9f8484fe1b8dc3533a1b5a26d301e785 (patch) | |
tree | c64d460b81885d789169fe1d6e4e9fa13767e5cc | |
parent | b2ccb870642c76fae7e8c2a95144a3e00db7540a (diff) |
I had forgotten just how much I loath XML namespaces.
svn path=/myrpki.rototill/myirbe.py; revision=3025
-rw-r--r-- | myrpki.rototill/myirbe.py | 6 | ||||
-rw-r--r-- | myrpki.rototill/myrpki.py | 4 | ||||
-rw-r--r-- | myrpki.rototill/setup.py | 40 |
3 files changed, 33 insertions, 17 deletions
diff --git a/myrpki.rototill/myirbe.py b/myrpki.rototill/myirbe.py index 6321ef35..98fc91be 100644 --- a/myrpki.rototill/myirbe.py +++ b/myrpki.rototill/myirbe.py @@ -56,11 +56,7 @@ if hasattr(warnings, "catch_warnings"): else: import MySQLdb -def tag(t): - """ - Wrap an element name in the right XML namespace goop. - """ - return "{http://www.hactrn.net/uris/rpki/myrpki/}" + t +tag = myrpki.tag def findbase64(tree, name, b64type = rpki.x509.X509): """ diff --git a/myrpki.rototill/myrpki.py b/myrpki.rototill/myrpki.py index f87a9273..434266de 100644 --- a/myrpki.rototill/myrpki.py +++ b/myrpki.rototill/myrpki.py @@ -609,7 +609,9 @@ def etree_read(filename, verbose = False): def tag(t): """ - Wrap an element name in the right XML namespace goop. + Wrap an element name in the right XML namespace goop. We probably + should be using a QName, but it doesn't work correctly with the + etree search functions """ #return QName(namespace, t) return "{" + namespace + "}" + t diff --git a/myrpki.rototill/setup.py b/myrpki.rototill/setup.py index 9caabc9d..cf5d3351 100644 --- a/myrpki.rototill/setup.py +++ b/myrpki.rototill/setup.py @@ -21,6 +21,9 @@ import myrpki, rpki.config, rpki.cli from xml.etree.ElementTree import Element, SubElement, ElementTree +namespace = myrpki.namespace +tag = myrpki.tag + def read_xml_handle_tree(filename): handle = os.path.splitext(os.path.split(filename)[-1])[0] etree = myrpki.etree_read(filename) @@ -69,13 +72,16 @@ class main(rpki.cli.Cmd): rpki.cli.Cmd.__init__(self, argv) def load_xml(self): - handle, self.me = read_xml_handle_tree(self.handle + ".xml") + handle, self.me = read_xml_handle_tree("%s.xml" % self.handle) self.parents = dict(read_xml_handle_tree(i) for i in glob.glob("parents/*.xml")) self.children = dict(read_xml_handle_tree(i) for i in glob.glob("children/*.xml")) self.repositories = dict(read_xml_handle_tree(i) for i in glob.glob("repositories/*.xml")) assert handle == self.handle def do_initialize(self, arg): + if arg: + raise RuntimeError, "This command takes no arguments" + self.bpki_myrpki.setup(self.cfg.get("bpki_myrpki_ta_dn", "/CN=%s BPKI Resource Trust Anchor" % self.handle)) if self.run_rpkid or self.run_pubd or self.run_rootd: @@ -112,25 +118,30 @@ class main(rpki.cli.Cmd): # Build the me.xml file. Need to check for existing file so we don't # overwrite? Worry about that later. - e = Element("me", xmlns = myrpki.namespace, version = "1", handle = self.handle) + e = Element("me", xmlns = namespace, version = "1", handle = self.handle) myrpki.PEMElement(e, "bpki_ca_certificate", self.bpki_myrpki.cer) - myrpki.etree_write(e, self.handle + ".xml") + myrpki.etree_write(e, "%s.xml" % self.handle) + + # If we're running pubd, construct repository entry for it. + + if self.run_pubd: + r = Element("repository", type = "offer", + service_url = "https://%s:%s/" % (self.cfg.get("pubd_server_host"), + self.cfg.get("pubd_server_port"))) # If we're running rootd, construct a fake parent to go with it, # and cross-certify in both directions so we can talk to rootd. if self.run_rootd: - e = Element("parent", xmlns = myrpki.namespace, version = "1", + e = Element(tag("parent"), version = "1", parent_handle = "rootd", child_handle = self.handle, service_url = "https://localhost:%s/" % self.cfg.get("rootd_server_port")) - myrpki.PEMElement(e, "bpki_resource_ca", self.bpki_myirbe.cer) - myrpki.PEMElement(e, "bpki_server_ca", self.bpki_myirbe.cer) + myrpki.PEMElement(e, tag("bpki_resource_ca"), self.bpki_myirbe.cer) + myrpki.PEMElement(e, tag("bpki_server_ca"), self.bpki_myirbe.cer) - SubElement(e, "repository", type = "offer", - service_url = "https://%s:%s/" % (self.cfg.get("pubd_server_host"), - self.cfg.get("pubd_server_port"))) + e.append(r) myrpki.etree_write(e, "parents/rootd.xml") self.bpki_myrpki.xcert(self.bpki_myirbe.cer) @@ -139,6 +150,13 @@ class main(rpki.cli.Cmd): if not os.path.exists(rootd_child_fn): os.link(self.bpki_myirbe.xcert(self.bpki_myrpki.cer), rootd_child_fn) + # Save repository entry. + + if self.run_pubd: + r.set("xmlns", namespace) + r.set("version", "1") + myrpki.etree_write(r, "repositories/%s.xml" % self.handle) + def do_receive_from_child(self, arg): self.load_xml() @@ -165,7 +183,7 @@ class main(rpki.cli.Cmd): self.bpki_myirbe.fxcert(c.findtext(myrpki.tag("bpki_ca_certificate"))) - e = Element("parent", xmlns = myrpki.namespace, version = "1", + e = Element("parent", xmlns = namespace, version = "1", parent_handle = self.handle, child_handle = child_handle, service_url = "https://%s:%s/up-down/%s/%s" % (self.cfg.get("rpkid_server_host"), self.cfg.get("rpkid_server_port"), @@ -220,7 +238,7 @@ class main(rpki.cli.Cmd): r = p.find(myrpki.tag("repository")) if r is not None and r.get("type") == "offer": - e = Element("repository", xmlns = myrpki.namespace, version = "1", + e = Element("repository", xmlns = namespace, version = "1", service_url = r.get("service_url")) myrpki.PEMElement(e, "bpki_server_ca", b) myrpki.etree_write(e, "repositories/%s.xml" % repository_handle) |