diff options
author | Rob Austein <sra@hactrn.net> | 2008-05-22 21:14:40 +0000 |
---|---|---|
committer | Rob Austein <sra@hactrn.net> | 2008-05-22 21:14:40 +0000 |
commit | d14fc63a0f334c256835933a72adfa97e79a5144 (patch) | |
tree | b653c380284f2e6d01d97a965a8e9949b1489a5e /rpkid | |
parent | bb2d3b6174e34544498fa91b3605a17e36ddb873 (diff) |
Add minimal parsing for rest of publication protocol PDUs.
svn path=/rpkid/rpki/publication.py; revision=1817
Diffstat (limited to 'rpkid')
-rw-r--r-- | rpkid/rpki/publication.py | 56 | ||||
-rwxr-xr-x | rpkid/xml-parse-test.py | 2 |
2 files changed, 55 insertions, 3 deletions
diff --git a/rpkid/rpki/publication.py b/rpkid/rpki/publication.py index 719dfdbd..fa5b4874 100644 --- a/rpkid/rpki/publication.py +++ b/rpkid/rpki/publication.py @@ -79,13 +79,65 @@ class client_elt(data_elt): self.make_b64elt(elt, "bpki_glue", self.bpki_glue.get_DER()) return elt +class publication_object_elt(data_elt): + """Virtual class for publishable objects. These have very similar + syntax, differences lie in underlying datatype and methods. + """ + + attributes = ("action", "tag", "client_id", "uri") + payload = None + + def startElement(self, stack, name, attrs): + """Handle a publishable element.""" + assert name == self.element_name, "Unexpected name %s, stack %s" % (name, stack) + self.read_attrs(attrs) + + def endElement(self, stack, name, text): + """Handle a publishable element element.""" + assert name == self.element_name, "Unexpected name %s, stack %s" % (name, stack) + if text: + self.payload = self.payload_type(Base64 = text) + stack.pop() + + def toXML(self): + """Generate <client/> element.""" + elt = self.make_elt() + if self.payload: + elt.text = base64.b64encode(self.payload.get_DER()) + return elt + +class certificate_elt(publication_object_elt): + """<certificate/> element.""" + + element_name = "certificate" + payload_type = rpki.x509.X509 + +class crl_elt(publication_object_elt): + """<crl/> element.""" + + element_name = "crl" + payload_type = rpki.x509.CRL + +class manifest_elt(publication_object_elt): + """<manifest/> element.""" + + element_name = "manifest" + payload_type = rpki.x509.SignedManifest + +class roa_elt(publication_object_elt): + """<roa/> element.""" + + element_name = "roa" + payload_type = rpki.x509.ROA + class report_error_elt(rpki.left_right.report_error_elt): """<report_error/> element. For now this is identical to its left_right equivilent. """ - pass + xmlns = publication_xmlns + nsmap = publication_nsmap class msg(rpki.left_right.msg): """Publication PDU.""" @@ -100,7 +152,7 @@ class msg(rpki.left_right.msg): ## @var pdus # Dispatch table of PDUs for this protocol. pdus = dict((x.element_name, x) - for x in (client_elt, report_error_elt)) + for x in (client_elt, certificate_elt, crl_elt, manifest_elt, roa_elt, report_error_elt)) class sax_handler(rpki.sax_utils.handler): """SAX handler for publication protocol.""" diff --git a/rpkid/xml-parse-test.py b/rpkid/xml-parse-test.py index 66abf967..0ebfb79c 100755 --- a/rpkid/xml-parse-test.py +++ b/rpkid/xml-parse-test.py @@ -17,7 +17,7 @@ import glob, xml.sax, lxml.etree, lxml.sax, POW, POW.pkix import rpki.up_down, rpki.left_right, rpki.publication, rpki.relaxng -verbose = True +verbose = False def test(fileglob, rng, sax_handler, encoding, tester = None): files = glob.glob(fileglob) |