aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--rpkid/rpki/left_right.py25
-rw-r--r--rpkid/rpki/publication.py28
-rw-r--r--rpkid/rpki/xml_utils.py8
3 files changed, 24 insertions, 37 deletions
diff --git a/rpkid/rpki/left_right.py b/rpkid/rpki/left_right.py
index 64519fbf..900d5e16 100644
--- a/rpkid/rpki/left_right.py
+++ b/rpkid/rpki/left_right.py
@@ -21,24 +21,18 @@ import rpki.resource_set, rpki.x509, rpki.sql, rpki.exceptions, rpki.xml_utils
import rpki.https, rpki.up_down, rpki.relaxng, rpki.sundial, rpki.log, rpki.roa
import rpki.publication
-left_right_xmlns = "http://www.hactrn.net/uris/rpki/left-right-spec/"
-left_right_nsmap = { None : left_right_xmlns }
-
# Enforce strict checking of XML "sender" field in up-down protocol
enforce_strict_up_down_xml_sender = False
-class base_elt(rpki.xml_utils.base_elt):
- """Virtual class for left-right protocol PDUs."""
+class left_right_namespace(object):
+ """XML namespace parameters for left-right protocol."""
- xmlns = left_right_xmlns
- nsmap = left_right_nsmap
+ xmlns = "http://www.hactrn.net/uris/rpki/left-right-spec/"
+ nsmap = { None : xmlns }
-class data_elt(rpki.xml_utils.data_elt, rpki.sql.sql_persistant):
+class data_elt(rpki.xml_utils.data_elt, rpki.sql.sql_persistant, left_right_namespace):
"""Virtual class for top-level left-right protocol data elements."""
- xmlns = left_right_xmlns
- nsmap = left_right_nsmap
-
def self(this):
"""Fetch self object to which this object links."""
return self_elt.sql_fetch(this.gctx, this.self_id)
@@ -882,7 +876,7 @@ class route_origin_elt(data_elt):
"""Return the publication URI for this route_origin's ROA's EE certificate."""
return ca.sia_uri + self.ee_uri_tail()
-class list_resources_elt(base_elt):
+class list_resources_elt(rpki.xml_utils.base_elt, left_right_namespace):
"""<list_resources/> element."""
element_name = "list_resources"
@@ -909,7 +903,7 @@ class list_resources_elt(base_elt):
elt.set("valid_until", self.valid_until.toXMLtime())
return elt
-class report_error_elt(base_elt):
+class report_error_elt(rpki.xml_utils.base_elt, left_right_namespace):
"""<report_error/> element."""
element_name = "report_error"
@@ -932,12 +926,9 @@ class report_error_elt(base_elt):
self.error_code = exc.__class__.__name__
return self
-class msg(rpki.xml_utils.msg):
+class msg(rpki.xml_utils.msg, left_right_namespace):
"""Left-right PDU."""
- xmlns = left_right_xmlns
- nsmap = left_right_nsmap
-
## @var version
# Protocol version
version = 1
diff --git a/rpkid/rpki/publication.py b/rpkid/rpki/publication.py
index 09ed0aac..07fffa83 100644
--- a/rpkid/rpki/publication.py
+++ b/rpkid/rpki/publication.py
@@ -20,21 +20,15 @@ import base64, lxml.etree, time, traceback, os
import rpki.resource_set, rpki.x509, rpki.sql, rpki.exceptions, rpki.xml_utils
import rpki.https, rpki.up_down, rpki.relaxng, rpki.sundial, rpki.log, rpki.roa
-publication_xmlns = "http://www.hactrn.net/uris/rpki/publication-spec/"
-publication_nsmap = { None : publication_xmlns }
+class publication_namespace(object):
+ """XML namespace parameters for publication protocol."""
-class data_elt(rpki.xml_utils.base_elt):
- """Virtual class for publication protocol PDUs."""
+ xmlns = "http://www.hactrn.net/uris/rpki/publication-spec/"
+ nsmap = { None : xmlns }
- xmlns = publication_xmlns
- nsmap = publication_nsmap
-
-class client_elt(rpki.xml_utils.data_elt, rpki.sql.sql_persistant):
+class client_elt(rpki.xml_utils.data_elt, rpki.sql.sql_persistant, publication_namespace):
"""<client/> element."""
- xmlns = publication_xmlns
- nsmap = publication_nsmap
-
element_name = "client"
attributes = ("action", "tag", "client_id", "base_uri")
elements = ("bpki_cert", "bpki_glue")
@@ -103,7 +97,7 @@ class client_elt(rpki.xml_utils.data_elt, rpki.sql.sql_persistant):
if not uri.startswith(self.base_uri):
raise rpki.exceptions.ForbiddenURI
-class publication_object_elt(data_elt):
+class publication_object_elt(rpki.xml_utils.base_elt, publication_namespace):
"""Virtual class for publishable objects. These have very similar
syntax, differences lie in underlying datatype and methods.
"""
@@ -200,12 +194,9 @@ class roa_elt(publication_object_elt):
obj2elt = dict((e.payload_type, e) for e in (certificate_elt, crl_elt, manifest_elt, roa_elt))
-class report_error_elt(rpki.xml_utils.base_elt):
+class report_error_elt(rpki.xml_utils.base_elt, publication_namespace):
"""<report_error/> element."""
- xmlns = publication_xmlns
- nsmap = publication_nsmap
-
element_name = "report_error"
attributes = ("tag", "error_code")
@@ -225,12 +216,9 @@ class report_error_elt(rpki.xml_utils.base_elt):
self.error_code = exc.__class__.__name__
return self
-class msg(rpki.xml_utils.msg):
+class msg(rpki.xml_utils.msg, publication_namespace):
"""Publication PDU."""
- xmlns = publication_xmlns
- nsmap = publication_nsmap
-
## @var version
# Protocol version
version = 1
diff --git a/rpkid/rpki/xml_utils.py b/rpkid/rpki/xml_utils.py
index 9a2f6f61..97f9c5f7 100644
--- a/rpkid/rpki/xml_utils.py
+++ b/rpkid/rpki/xml_utils.py
@@ -103,8 +103,16 @@ class base_elt(object):
protocol does not, due to different design assumptions.
"""
+ ## @var attributes
+ # XML attributes for this element.
attributes = ()
+
+ ## @var elements
+ # XML elements contained by this element.
elements = ()
+
+ ## @var booleans
+ # Boolean attributes (value "yes" or "no") for this element.
booleans = ()
def startElement(self, stack, name, attrs):