diff options
-rw-r--r-- | myrpki/Makefile | 16 | ||||
-rw-r--r-- | myrpki/myrpki.py | 20 | ||||
l--------- | myrpki/rpki | 1 | ||||
-rwxr-xr-x | myrpki/xml-parse-test.py | 28 |
4 files changed, 37 insertions, 28 deletions
diff --git a/myrpki/Makefile b/myrpki/Makefile new file mode 100644 index 00000000..723d45e0 --- /dev/null +++ b/myrpki/Makefile @@ -0,0 +1,16 @@ +# $Id$ + +all: myrpki.xml lint parse + + +myrpki.xml: myrpki.py asns.csv prefixes.csv roas.csv validity.csv + python myrpki.py + +lint: myrpki.xml myrpki.rng + xmllint --noout --relaxng myrpki.rng myrpki.xml + +myrpki.rng: myrpki.rnc + trang myrpki.rnc myrpki.rng + +parse: myrpki.xml myrpki.rng + python xml-parse-test.py diff --git a/myrpki/myrpki.py b/myrpki/myrpki.py index 4c5df830..e4dd7409 100644 --- a/myrpki/myrpki.py +++ b/myrpki/myrpki.py @@ -46,9 +46,6 @@ 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") -v4regexp = re.compile("^[-0-9./]+$", re.I) -v6regexp = re.compile("^[-0-9a-f:/]+$", re.I) - class comma_set(set): def __str__(self): @@ -56,15 +53,18 @@ class comma_set(set): class roa_request(object): + v4re = re.compile("^([0-9]{1,3}\.){3}[0-9]{1,3}/[0-9]+(-[0-9]+)?$", re.I) + v6re = re.compile("^([0-9a-f]{0,4}:){0,15}[0-9a-f]{0,4}/[0-9]+(-[0-9]+)?$", re.I) + def __init__(self, asn): self.asn = asn self.v4 = comma_set() self.v6 = comma_set() def add(self, prefix): - if v4regexp.match(prefix): + if self.v4re.match(prefix): self.v4.add(prefix) - elif v6regexp.match(prefix): + elif self.v6re.match(prefix): self.v6.add(prefix) else: raise RuntimeError, 'Bad prefix syntax: "%s"' % prefix @@ -88,6 +88,9 @@ class roa_requests(dict): 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) + v6re = re.compile("^(([0-9a-f]{0,4}:){0,15}[0-9a-f]{0,4}/[0-9]+)|(([0-9a-f]{0,4}:){0,15}[0-9a-f]{0,4}-([0-9a-f]{0,4}:){0,15}[0-9a-f]{0,4})$", re.I) + def __init__(self, handle): self.handle = handle self.asns = comma_set() @@ -97,9 +100,9 @@ class child(object): def add(self, prefix = None, asn = None, validity = None): if prefix is not None: - if v4regexp.match(prefix): + if self.v4re.match(prefix): self.v4.add(prefix) - elif v6regexp.match(prefix): + elif self.v6re.match(prefix): self.v6.add(prefix) else: raise RuntimeError, 'Bad prefix syntax: "%s"' % prefix @@ -194,6 +197,3 @@ bpki_ee(e) ElementTree(e).write(output_filename + ".tmp") os.rename(output_filename + ".tmp", output_filename) - -subprocess.check_call(("xmllint", "-relaxng", relaxng_schema, - "-noout", output_filename)) diff --git a/myrpki/rpki b/myrpki/rpki new file mode 120000 index 00000000..168548eb --- /dev/null +++ b/myrpki/rpki @@ -0,0 +1 @@ +../rpkid/rpki
\ No newline at end of file diff --git a/myrpki/xml-parse-test.py b/myrpki/xml-parse-test.py index 3afb38a7..6fb9b583 100755 --- a/myrpki/xml-parse-test.py +++ b/myrpki/xml-parse-test.py @@ -7,23 +7,15 @@ rng = lxml.etree.RelaxNG(lxml.etree.parse("myrpki.rng")) tree = lxml.etree.parse("myrpki.xml").getroot() if False: - print lxml.etree.tostring( - tree, - pretty_print = True, - encoding = "us-ascii", - xml_declaration = True) + print lxml.etree.tostring(tree, pretty_print = True, encoding = "us-ascii", xml_declaration = True) rng.assertValid(tree) -if False: - for x in tree.getiterator(): - print x - # print x.get("handle") +def showitems(x): + if False: for k, v in x.items(): if v: print " ", k, v - if x.text: - print " ", x.text def tag(t): return "{http://www.hactrn.net/uris/rpki/myrpki/}" + t @@ -36,16 +28,16 @@ for x in tree.getiterator(tag("child")): print " Handle:", x.get("handle") print " ASNS: ", rpki.resource_set.resource_set_as(x.get("asns")) print " IPv4: ", rpki.resource_set.resource_set_ipv4(x.get("v4")) - for k, v in x.items(): - if v: - print " ", k, v + print " Valid: ", x.get("valid_until") + showitems(x) print "ROA requests:" for x in tree.getiterator(tag("roa_request")): - print x - for k, v in x.items(): - if v: - print " ", k, v + print " ", x + print " ASN: ", x.get("asn") + print " IPv4:", rpki.resource_set.roa_prefix_set_ipv4(x.get("v4")) + print " IPv6:", rpki.resource_set.roa_prefix_set_ipv6(x.get("v6")) + showitems(x) ca = tree.findtext(tag("bpki_ca_certificate")) if ca: |