aboutsummaryrefslogtreecommitdiff
path: root/myrpki
diff options
context:
space:
mode:
Diffstat (limited to 'myrpki')
-rw-r--r--myrpki/Makefile3
-rw-r--r--myrpki/myrpki.py116
2 files changed, 72 insertions, 47 deletions
diff --git a/myrpki/Makefile b/myrpki/Makefile
index 723d45e0..b0cdc6b1 100644
--- a/myrpki/Makefile
+++ b/myrpki/Makefile
@@ -14,3 +14,6 @@ myrpki.rng: myrpki.rnc
parse: myrpki.xml myrpki.rng
python xml-parse-test.py
+
+clean:
+ rm -f *.xml *.pem
diff --git a/myrpki/myrpki.py b/myrpki/myrpki.py
index e4dd7409..d6841041 100644
--- a/myrpki/myrpki.py
+++ b/myrpki/myrpki.py
@@ -23,29 +23,12 @@ OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
"""
-import subprocess, csv, re, os, ConfigParser
+import subprocess, csv, re, os, getopt, sys, ConfigParser
from xml.etree.ElementTree import Element, SubElement, ElementTree
-cfg_file = "myrpki.conf"
-myrpki_section = "myrpki"
namespace = "http://www.hactrn.net/uris/rpki/myrpki/"
-cfg = ConfigParser.RawConfigParser()
-cfg.read(cfg_file)
-
-my_handle = cfg.get(myrpki_section, "handle")
-roa_csv_file = cfg.get(myrpki_section, "roa_csv")
-validity_csv_file = cfg.get(myrpki_section, "validity_csv")
-prefix_csv_file = cfg.get(myrpki_section, "prefix_csv")
-asn_csv_file = cfg.get(myrpki_section, "asn_csv")
-bpki_ca_cert_file = cfg.get(myrpki_section, "bpki_ca_certificate")
-bpki_ca_key_file = cfg.get(myrpki_section, "bpki_ca_key")
-bpki_ee_cert_file = cfg.get(myrpki_section, "bpki_ee_certificate")
-bpki_ee_req_file = cfg.get(myrpki_section, "bpki_ee_pkcs10")
-output_filename = cfg.get(myrpki_section, "output_filename")
-relaxng_schema = cfg.get(myrpki_section, "relaxng_schema")
-
class comma_set(set):
def __str__(self):
@@ -86,6 +69,14 @@ class roa_requests(dict):
for r in self.itervalues():
r.xml(e)
+ @classmethod
+ def from_csv(cls, roa_csv_file):
+ self = cls()
+ # format: p/n-m asn
+ for pnm, asn in csv_open(roa_csv_file):
+ self.add(asn = asn, prefix = pnm)
+ return self
+
class child(object):
v4re = re.compile("^(([0-9]{1,3}\.){3}[0-9]{1,3}/[0-9]+)|(([0-9]{1,3}\.){3}[0-9]{1,3}-([0-9]{1,3}\.){3}[0-9]{1,3})$", re.I)
@@ -130,6 +121,20 @@ class children(dict):
for c in self.itervalues():
c.xml(e)
+ @classmethod
+ def from_csv(cls, validity_csv_file, prefix_csv_file, asn_csv_file):
+ self = cls()
+ # childname date
+ for handle, date in csv_open(validity_csv_file):
+ self.add(handle = handle, validity = date)
+ # childname p/n
+ for handle, pn in csv_open(prefix_csv_file):
+ self.add(handle = handle, prefix = pn)
+ # childname asn
+ for handle, asn in csv_open(asn_csv_file):
+ self.add(handle = handle, asn = asn)
+ return self
+
def csv_open(filename, delimiter = "\t", dialect = None):
return csv.reader(open(filename, "rb"), dialect = dialect, delimiter = delimiter)
@@ -137,7 +142,7 @@ def PEMElement(e, tag, filename):
e = SubElement(e, tag)
e.text = "".join(p.strip() for p in open(filename).readlines()[1:-1])
-def bpki_ca(e):
+def bpki_ca(e, bpki_ca_key_file, bpki_ca_cert_file, cfg_file):
if not os.path.exists(bpki_ca_key_file):
subprocess.check_call(("openssl", "genrsa",
@@ -153,7 +158,7 @@ def bpki_ca(e):
PEMElement(e, "bpki_ca_certificate", bpki_ca_cert_file)
-def bpki_ee(e):
+def bpki_ee(e, bpki_ee_req_file, bpki_ee_cert_file):
if os.path.exists(bpki_ee_req_file):
@@ -170,30 +175,47 @@ def bpki_ee(e):
def extract_resources():
pass
-roas = roa_requests()
-kids = children()
-
-# format: p/n-m asn
-for pnm, asn in csv_open(roa_csv_file):
- roas.add(asn = asn, prefix = pnm)
-
-# childname date
-for handle, date in csv_open(validity_csv_file):
- kids.add(handle = handle, validity = date)
-
-# childname p/n
-for handle, pn in csv_open(prefix_csv_file):
- kids.add(handle = handle, prefix = pn)
-
-# childname asn
-for handle, asn in csv_open(asn_csv_file):
- kids.add(handle = handle, asn = asn)
-
-e = Element("myrpki", xmlns = namespace, version = "1", handle = my_handle)
-roas.xml(e)
-kids.xml(e)
-bpki_ca(e)
-bpki_ee(e)
-
-ElementTree(e).write(output_filename + ".tmp")
-os.rename(output_filename + ".tmp", output_filename)
+def main():
+
+ cfg_file = "myrpki.conf"
+ myrpki_section = "myrpki"
+
+ opts, argv = getopt.getopt(sys.argv[1:], "c:h:?", ["config=", "help"])
+ for o, a in opts:
+ if o in ("-h", "--help", "-?"):
+ print __doc__
+ sys.exit(0)
+ elif o in ("-c", "--config"):
+ cfg_file = a
+ if argv:
+ raise RuntimeError, "Unexpected arguments %s" % argv
+
+ cfg = ConfigParser.RawConfigParser()
+ cfg.read(cfg_file)
+
+ my_handle = cfg.get(myrpki_section, "handle")
+ roa_csv_file = cfg.get(myrpki_section, "roa_csv")
+ validity_csv_file = cfg.get(myrpki_section, "validity_csv")
+ prefix_csv_file = cfg.get(myrpki_section, "prefix_csv")
+ asn_csv_file = cfg.get(myrpki_section, "asn_csv")
+ bpki_ca_cert_file = cfg.get(myrpki_section, "bpki_ca_certificate")
+ bpki_ca_key_file = cfg.get(myrpki_section, "bpki_ca_key")
+ bpki_ee_cert_file = cfg.get(myrpki_section, "bpki_ee_certificate")
+ bpki_ee_req_file = cfg.get(myrpki_section, "bpki_ee_pkcs10")
+ output_filename = cfg.get(myrpki_section, "output_filename")
+ relaxng_schema = cfg.get(myrpki_section, "relaxng_schema")
+
+ roas = roa_requests.from_csv(roa_csv_file)
+ kids = children.from_csv(validity_csv_file, prefix_csv_file, asn_csv_file)
+
+ e = Element("myrpki", xmlns = namespace, version = "1", handle = my_handle)
+ roas.xml(e)
+ kids.xml(e)
+ bpki_ca(e, bpki_ca_key_file, bpki_ca_cert_file, cfg_file)
+ bpki_ee(e, bpki_ee_req_file, bpki_ee_cert_file)
+
+ ElementTree(e).write(output_filename + ".tmp")
+ os.rename(output_filename + ".tmp", output_filename)
+
+if __name__ == "__main__":
+ main()