aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Austein <sra@hactrn.net>2010-03-05 00:12:22 +0000
committerRob Austein <sra@hactrn.net>2010-03-05 00:12:22 +0000
commitdac9c84f9f8484fe1b8dc3533a1b5a26d301e785 (patch)
treec64d460b81885d789169fe1d6e4e9fa13767e5cc
parentb2ccb870642c76fae7e8c2a95144a3e00db7540a (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.py6
-rw-r--r--myrpki.rototill/myrpki.py4
-rw-r--r--myrpki.rototill/setup.py40
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)