aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--myrpki/myrpki.conf1
-rw-r--r--myrpki/myrpki.py48
-rw-r--r--myrpki/myrpki.rnc7
-rw-r--r--myrpki/myrpki.rng20
-rwxr-xr-xmyrpki/xml-parse-test.py6
5 files changed, 82 insertions, 0 deletions
diff --git a/myrpki/myrpki.conf b/myrpki/myrpki.conf
index fd9e54d3..f79fc3fb 100644
--- a/myrpki/myrpki.conf
+++ b/myrpki/myrpki.conf
@@ -11,6 +11,7 @@ children_csv = children.csv
parents_csv = parents.csv
prefix_csv = prefixes.csv
asn_csv = asns.csv
+repositories_csv = repositories.csv
xml_filename = myrpki.xml
bpki_directory = bpki.myrpki
diff --git a/myrpki/myrpki.py b/myrpki/myrpki.py
index 7a1fffea..697522fa 100644
--- a/myrpki/myrpki.py
+++ b/myrpki/myrpki.py
@@ -190,6 +190,49 @@ class parents(dict):
self.add(handle = handle, uri = uri, ta = xcert(pemfile))
return self
+class repository(object):
+
+ def __init__(self, handle):
+ self.handle = handle
+ self.uri = None
+ self.ta = None
+
+ def __repr__(self):
+ return "<%s uri %s ta %s>" % (self.__class__.__name__, self.uri, self.ta)
+
+ def add(self, uri = None, ta = None):
+ if uri is not None:
+ self.uri = uri
+ if ta is not None:
+ self.ta = ta
+
+ def xml(self, e):
+ e2 = SubElement(e, "repository",
+ handle = self.handle,
+ uri = self.uri)
+ if self.ta:
+ PEMElement(e2, "bpki_ta", self.ta)
+ return e2
+
+class repositories(dict):
+
+ def add(self, handle, uri = None, ta = None):
+ if handle not in self:
+ self[handle] = repository(handle)
+ self[handle].add(uri = uri, ta = ta)
+
+ def xml(self, e):
+ for r in self.itervalues():
+ r.xml(e)
+
+ @classmethod
+ def from_csv(cls, repositories_csv_file, xcert):
+ self = cls()
+ # repositoryname uri pemfile
+ for handle, uri, pemfile in csv_open(repositories_csv_file):
+ self.add(handle = handle, uri = uri, ta = xcert(pemfile))
+ return self
+
def csv_open(filename, delimiter = "\t", dialect = None):
return csv.reader(open(filename, "rb"), dialect = dialect, delimiter = delimiter)
@@ -358,6 +401,7 @@ def main():
parents_csv_file = cfg.get(myrpki_section, "parents_csv")
prefix_csv_file = cfg.get(myrpki_section, "prefix_csv")
asn_csv_file = cfg.get(myrpki_section, "asn_csv")
+ repositories_csv_file= cfg.get(myrpki_section, "repositories_csv")
bpki_dir = cfg.get(myrpki_section, "bpki_directory")
xml_filename = cfg.get(myrpki_section, "xml_filename")
@@ -384,6 +428,10 @@ def main():
parents_csv_file = parents_csv_file,
xcert = bpki.xcert).xml(e)
+ repositories.from_csv(
+ repositories_csv_file = repositories_csv_file,
+ xcert = bpki.xcert).xml(e)
+
PEMElement(e, "bpki_ca_certificate", bpki.cer)
PEMElement(e, "bpki_crl", bpki.crl)
diff --git a/myrpki/myrpki.rnc b/myrpki/myrpki.rnc
index 8ea93167..288095de 100644
--- a/myrpki/myrpki.rnc
+++ b/myrpki/myrpki.rnc
@@ -20,6 +20,7 @@ start = element myrpki {
roa_request_elt*,
child_elt*,
parent_elt*,
+ repository_elt*,
bpki_ca_certificate_elt?,
bpki_crl_elt?,
bpki_bsc_certificate_elt?,
@@ -47,6 +48,12 @@ parent_elt = element parent {
element bpki_ta { base64 }?
}
+repository_elt = element repository {
+ attribute handle { object_handle },
+ attribute uri { uri }?,
+ element bpki_ta { base64 }?
+}
+
bpki_ca_certificate_elt = element bpki_ca_certificate { base64 }
bpki_crl_elt = element bpki_crl { base64 }
bpki_bsc_certificate_elt = element bpki_bsc_certificate { base64 }
diff --git a/myrpki/myrpki.rng b/myrpki/myrpki.rng
index 96d5d289..064c2f53 100644
--- a/myrpki/myrpki.rng
+++ b/myrpki/myrpki.rng
@@ -61,6 +61,9 @@
<zeroOrMore>
<ref name="parent_elt"/>
</zeroOrMore>
+ <zeroOrMore>
+ <ref name="repository_elt"/>
+ </zeroOrMore>
<optional>
<ref name="bpki_ca_certificate_elt"/>
</optional>
@@ -137,6 +140,23 @@
</optional>
</element>
</define>
+ <define name="repository_elt">
+ <element name="repository">
+ <attribute name="handle">
+ <ref name="object_handle"/>
+ </attribute>
+ <optional>
+ <attribute name="uri">
+ <ref name="uri"/>
+ </attribute>
+ </optional>
+ <optional>
+ <element name="bpki_ta">
+ <ref name="base64"/>
+ </element>
+ </optional>
+ </element>
+ </define>
<define name="bpki_ca_certificate_elt">
<element name="bpki_ca_certificate">
<ref name="base64"/>
diff --git a/myrpki/xml-parse-test.py b/myrpki/xml-parse-test.py
index 14aa6fd7..479232e7 100755
--- a/myrpki/xml-parse-test.py
+++ b/myrpki/xml-parse-test.py
@@ -80,6 +80,12 @@ for x in tree.getiterator(tag("parent")):
if ta:
showpem("Parent", ta, "x509")
+for x in tree.getiterator(tag("repository")):
+ print "Repository URI:", x.get("uri")
+ ta = x.findtext(tag("bpki_ta"))
+ if ta:
+ showpem("Repository", ta, "x509")
+
ca = tree.findtext(tag("bpki_ca_certificate"))
if ca:
showpem("CA", ca, "x509")