aboutsummaryrefslogtreecommitdiff
path: root/rpkid
diff options
context:
space:
mode:
authorRob Austein <sra@hactrn.net>2008-05-22 21:14:40 +0000
committerRob Austein <sra@hactrn.net>2008-05-22 21:14:40 +0000
commitd14fc63a0f334c256835933a72adfa97e79a5144 (patch)
treeb653c380284f2e6d01d97a965a8e9949b1489a5e /rpkid
parentbb2d3b6174e34544498fa91b3605a17e36ddb873 (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.py56
-rwxr-xr-xrpkid/xml-parse-test.py2
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)