aboutsummaryrefslogtreecommitdiff
path: root/rpki
diff options
context:
space:
mode:
authorRob Austein <sra@hactrn.net>2014-07-18 17:08:13 +0000
committerRob Austein <sra@hactrn.net>2014-07-18 17:08:13 +0000
commit0c945963b240cbc0b4155ead94205e9a6956fbf1 (patch)
treeaf08c2d0efc296584fb5d424bd402c425b8308e7 /rpki
parente2b9b042765d3e42bf9166d3f7980949a38a70b9 (diff)
parent4d78736439f3cf313d7f05ee59dbae3822dfbf40 (diff)
Pull changes from trunk.
svn path=/branches/tk705/; revision=5903
Diffstat (limited to 'rpki')
-rw-r--r--rpki/irdb/zookeeper.py24
-rw-r--r--rpki/left_right.py8
-rw-r--r--rpki/publication.py8
-rw-r--r--rpki/publication_control.py8
-rw-r--r--rpki/relaxng.py37
-rw-r--r--rpki/relaxng_parser.py42
-rw-r--r--rpki/sql_schemas.py2
-rw-r--r--rpki/up_down.py9
-rw-r--r--rpki/xml_utils.py6
9 files changed, 95 insertions, 49 deletions
diff --git a/rpki/irdb/zookeeper.py b/rpki/irdb/zookeeper.py
index 28197de0..0effe213 100644
--- a/rpki/irdb/zookeeper.py
+++ b/rpki/irdb/zookeeper.py
@@ -47,9 +47,8 @@ from rpki.csv_utils import csv_reader
# is historical and may change before we propose this as the basis for
# a standard.
-myrpki_namespace = "http://www.hactrn.net/uris/rpki/myrpki/"
-myrpki_version = "2"
-myrpki_namespaceQName = "{" + myrpki_namespace + "}"
+myrpki_xmlns = rpki.relaxng.myrpki.xmlns
+myrpki_version = rpki.relaxng.myrpki.version
# XML namespace and protocol version for router certificate requests.
# We probably ought to be pulling this sort of thing from the schema,
@@ -57,9 +56,8 @@ myrpki_namespaceQName = "{" + myrpki_namespace + "}"
# protocol version number, but just copy what we did for myrpki until
# I'm ready to rewrite the rpki.relaxng code.
-routercert_namespace = "http://www.hactrn.net/uris/rpki/router-certificate/"
-routercert_version = "1"
-routercert_namespaceQName = "{" + routercert_namespace + "}"
+routercert_xmlns = rpki.relaxng.router_certificate.xmlns
+routercert_version = rpki.relaxng.router_certificate.version
myrpki_section = "myrpki"
irdbd_section = "irdbd"
@@ -140,10 +138,10 @@ def etree_read(filename):
e = ElementTree(file = filename).getroot()
rpki.relaxng.myrpki.assertValid(e)
for i in e.getiterator():
- if i.tag.startswith(myrpki_namespaceQName):
- i.tag = i.tag[len(myrpki_namespaceQName):]
+ if i.tag.startswith(myrpki_xmlns):
+ i.tag = i.tag[len(myrpki_xmlns):]
else:
- raise BadXMLMessage("XML tag %r is not in namespace %r" % (i.tag, myrpki_namespace))
+ raise BadXMLMessage("XML tag %r is not in namespace %r" % (i.tag, myrpki_xmlns[1:-1]))
return e
@@ -159,8 +157,8 @@ class etree_wrapper(object):
e.set("version", myrpki_version)
for i in e.getiterator():
if i.tag[0] != "{":
- i.tag = myrpki_namespaceQName + i.tag
- assert i.tag.startswith(myrpki_namespaceQName)
+ i.tag = myrpki_xmlns + i.tag
+ assert i.tag.startswith(myrpki_xmlns)
if debug:
print ElementToString(e)
rpki.relaxng.myrpki.assertValid(e)
@@ -615,7 +613,7 @@ class Zookeeper(object):
proposed_sia_base = repo.sia_base + child.handle + "/"
referral_cert, created = rpki.irdb.Referral.objects.get_or_certify(issuer = self.resource_ca)
auth = rpki.x509.SignedReferral()
- auth.set_content(B64Element(None, myrpki_namespaceQName + "referral", child.ta,
+ auth.set_content(B64Element(None, myrpki_xmlns + "referral", child.ta,
version = myrpki_version,
authorized_sia_base = proposed_sia_base))
auth.schema_check()
@@ -1620,7 +1618,7 @@ class Zookeeper(object):
xml = ElementTree(file = router_certificate_request_xml).getroot()
rpki.relaxng.router_certificate.assertValid(xml)
- for req in xml.getiterator(routercert_namespaceQName + "router_certificate_request"):
+ for req in xml.getiterator(routercert_xmlns + "router_certificate_request"):
pkcs10 = rpki.x509.PKCS10(Base64 = req.text)
router_id = long(req.get("router_id"))
diff --git a/rpki/left_right.py b/rpki/left_right.py
index c90cac29..e4cf25fe 100644
--- a/rpki/left_right.py
+++ b/rpki/left_right.py
@@ -48,8 +48,8 @@ class left_right_namespace(object):
XML namespace parameters for left-right protocol.
"""
- xmlns = "http://www.hactrn.net/uris/rpki/left-right-spec/"
- nsmap = { None : xmlns }
+ xmlns = rpki.relaxng.left_right.xmlns
+ nsmap = rpki.relaxng.left_right.nsmap
class data_elt(rpki.xml_utils.data_elt, rpki.sql.sql_persistent, left_right_namespace):
"""
@@ -1287,7 +1287,7 @@ class msg(rpki.xml_utils.msg, left_right_namespace):
## @var version
# Protocol version
- version = 1
+ version = int(rpki.relaxng.left_right.version)
## @var pdus
# Dispatch table of PDUs for this protocol.
@@ -1335,7 +1335,7 @@ class sax_handler(rpki.xml_utils.sax_handler):
pdu = msg
name = "msg"
- version = "1"
+ version = rpki.relaxng.left_right.version
class cms_msg(rpki.x509.XML_CMS_object):
"""
diff --git a/rpki/publication.py b/rpki/publication.py
index 5d9daf20..8970ff7a 100644
--- a/rpki/publication.py
+++ b/rpki/publication.py
@@ -39,8 +39,8 @@ logger = logging.getLogger(__name__)
class publication_namespace(object):
- xmlns = "http://www.hactrn.net/uris/rpki/publication-spec/"
- nsmap = { None : xmlns }
+ xmlns = rpki.relaxng.publication.xmlns
+ nsmap = rpki.relaxng.publication.nsmap
class base_publication_elt(rpki.xml_utils.base_elt, publication_namespace):
@@ -230,7 +230,7 @@ class msg(rpki.xml_utils.msg, publication_namespace):
## @var version
# Protocol version
- version = 3
+ version = int(rpki.relaxng.publication.version)
## @var pdus
# Dispatch table of PDUs for this protocol.
@@ -244,7 +244,7 @@ class sax_handler(rpki.xml_utils.sax_handler):
pdu = msg
name = "msg"
- version = "3"
+ version = rpki.relaxng.publication.version
class cms_msg(rpki.x509.XML_CMS_object):
diff --git a/rpki/publication_control.py b/rpki/publication_control.py
index f1cc5f2c..4ddcd8b2 100644
--- a/rpki/publication_control.py
+++ b/rpki/publication_control.py
@@ -55,8 +55,8 @@ class publication_control_namespace(object):
XML namespace parameters for publication control protocol.
"""
- xmlns = "http://www.hactrn.net/uris/rpki/publication-control/"
- nsmap = { None : xmlns }
+ xmlns = rpki.relaxng.publication_control.xmlns
+ nsmap = rpki.relaxng.publication_control.nsmap
class client_elt(rpki.xml_utils.data_elt, rpki.sql.sql_persistent, publication_control_namespace):
@@ -190,7 +190,7 @@ class msg(rpki.xml_utils.msg, publication_control_namespace):
## @var version
# Protocol version
- version = 1
+ version = int(rpki.relaxng.publication_control.version)
## @var pdus
# Dispatch table of PDUs for this protocol.
@@ -234,7 +234,7 @@ class sax_handler(rpki.xml_utils.sax_handler):
pdu = msg
name = "msg"
- version = "1"
+ version = rpki.relaxng.publication_control.version
class cms_msg(rpki.x509.XML_CMS_object):
diff --git a/rpki/relaxng.py b/rpki/relaxng.py
index 5e86df7c..a7bc7578 100644
--- a/rpki/relaxng.py
+++ b/rpki/relaxng.py
@@ -1,10 +1,10 @@
# Automatically generated, do not edit.
-import lxml.etree
+from rpki.relaxng_parser import RelaxNGParser
## @var left_right
## Parsed RelaxNG left_right schema
-left_right = lxml.etree.RelaxNG(lxml.etree.fromstring(r'''<?xml version="1.0" encoding="UTF-8"?>
+left_right = RelaxNGParser(r'''<?xml version="1.0" encoding="UTF-8"?>
<!--
$Id: left-right.rnc 5881 2014-07-03 16:55:02Z sra $
@@ -28,6 +28,9 @@ left_right = lxml.etree.RelaxNG(lxml.etree.fromstring(r'''<?xml version="1.0" en
WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-->
<grammar ns="http://www.hactrn.net/uris/rpki/left-right-spec/" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <define name="version">
+ <value>1</value>
+ </define>
<!-- Top level PDU -->
<start>
<element name="msg">
@@ -1093,11 +1096,11 @@ left_right = lxml.etree.RelaxNG(lxml.etree.fromstring(r'''<?xml version="1.0" en
comment-start-skip: "#[ \t]*"
End:
-->
-'''))
+''')
## @var myrpki
## Parsed RelaxNG myrpki schema
-myrpki = lxml.etree.RelaxNG(lxml.etree.fromstring(r'''<?xml version="1.0" encoding="UTF-8"?>
+myrpki = RelaxNGParser(r'''<?xml version="1.0" encoding="UTF-8"?>
<!--
$Id: myrpki.rnc 5876 2014-06-26 19:00:12Z sra $
@@ -1476,11 +1479,11 @@ myrpki = lxml.etree.RelaxNG(lxml.etree.fromstring(r'''<?xml version="1.0" encodi
comment-start-skip: "#[ \t]*"
End:
-->
-'''))
+''')
## @var publication_control
## Parsed RelaxNG publication_control schema
-publication_control = lxml.etree.RelaxNG(lxml.etree.fromstring(r'''<?xml version="1.0" encoding="UTF-8"?>
+publication_control = RelaxNGParser(r'''<?xml version="1.0" encoding="UTF-8"?>
<!--
$Id: publication-control.rnc 5883 2014-07-03 19:21:31Z sra $
@@ -1504,6 +1507,9 @@ publication_control = lxml.etree.RelaxNG(lxml.etree.fromstring(r'''<?xml version
WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-->
<grammar ns="http://www.hactrn.net/uris/rpki/publication-control/" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <define name="version">
+ <value>1</value>
+ </define>
<!-- Top level PDU -->
<start>
<element name="msg">
@@ -1757,11 +1763,11 @@ publication_control = lxml.etree.RelaxNG(lxml.etree.fromstring(r'''<?xml version
comment-start-skip: "#[ \t]*"
End:
-->
-'''))
+''')
## @var publication
## Parsed RelaxNG publication schema
-publication = lxml.etree.RelaxNG(lxml.etree.fromstring(r'''<?xml version="1.0" encoding="UTF-8"?>
+publication = RelaxNGParser(r'''<?xml version="1.0" encoding="UTF-8"?>
<!--
$Id: publication.rnc 5896 2014-07-15 19:34:32Z sra $
@@ -1962,11 +1968,11 @@ publication = lxml.etree.RelaxNG(lxml.etree.fromstring(r'''<?xml version="1.0" e
comment-start-skip: "#[ \t]*"
End:
-->
-'''))
+''')
## @var router_certificate
## Parsed RelaxNG router_certificate schema
-router_certificate = lxml.etree.RelaxNG(lxml.etree.fromstring(r'''<?xml version="1.0" encoding="UTF-8"?>
+router_certificate = RelaxNGParser(r'''<?xml version="1.0" encoding="UTF-8"?>
<!--
$Id: router-certificate.rnc 5881 2014-07-03 16:55:02Z sra $
@@ -2064,11 +2070,11 @@ router_certificate = lxml.etree.RelaxNG(lxml.etree.fromstring(r'''<?xml version=
comment-start-skip: "#[ \t]*"
End:
-->
-'''))
+''')
## @var rrdp
## Parsed RelaxNG rrdp schema
-rrdp = lxml.etree.RelaxNG(lxml.etree.fromstring(r'''<?xml version="1.0" encoding="UTF-8"?>
+rrdp = RelaxNGParser(r'''<?xml version="1.0" encoding="UTF-8"?>
<!--
$Id: rrdp.rnc 5888 2014-07-09 05:39:54Z sra $
@@ -2231,11 +2237,11 @@ rrdp = lxml.etree.RelaxNG(lxml.etree.fromstring(r'''<?xml version="1.0" encoding
comment-start-skip: "#[ \t]*"
End:
-->
-'''))
+''')
## @var up_down
## Parsed RelaxNG up_down schema
-up_down = lxml.etree.RelaxNG(lxml.etree.fromstring(r'''<?xml version="1.0" encoding="UTF-8"?>
+up_down = RelaxNGParser(r'''<?xml version="1.0" encoding="UTF-8"?>
<!--
$Id: up-down.rnc 5881 2014-07-03 16:55:02Z sra $
@@ -2512,5 +2518,6 @@ up_down = lxml.etree.RelaxNG(lxml.etree.fromstring(r'''<?xml version="1.0" encod
comment-start-skip: "#[ \t]*"
End:
-->
-'''))
+''')
+del RelaxNGParser
diff --git a/rpki/relaxng_parser.py b/rpki/relaxng_parser.py
new file mode 100644
index 00000000..466b1a79
--- /dev/null
+++ b/rpki/relaxng_parser.py
@@ -0,0 +1,42 @@
+# $Id$
+#
+# Copyright (C) 2014 Dragon Research Labs ("DRL")
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND DRL DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS. IN NO EVENT SHALL DRL BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+"""
+Wrapper around lxml to extract various useful data and methods
+from an XML-format RelaxNG schema.
+"""
+
+import lxml.etree
+
+class RelaxNGParser(object):
+ """
+ Parse schema, extract XML namespace and protocol version (if any).
+ Method calls are just passed along to the parsed RelaxNG schema.
+ """
+
+ def __init__(self, text):
+ xml = lxml.etree.fromstring(text)
+ self.schema = lxml.etree.RelaxNG(xml)
+ ns = xml.get("ns")
+ self.xmlns = "{" + ns + "}"
+ self.nsmap = { None : ns }
+ x = xml.xpath("ns0:define[@name = 'version']/ns0:value",
+ namespaces = dict(ns0 = "http://relaxng.org/ns/structure/1.0"))
+ if len(x) == 1:
+ self.version = x[0].text
+
+ def __getattr__(self, name):
+ return getattr(self.schema, name)
diff --git a/rpki/sql_schemas.py b/rpki/sql_schemas.py
index 6778ecd9..ad469204 100644
--- a/rpki/sql_schemas.py
+++ b/rpki/sql_schemas.py
@@ -245,7 +245,7 @@ CREATE TABLE ee_cert (
## @var pubd
## SQL schema pubd
-pubd = '''-- $Id: pubd.sql 5898 2014-07-17 17:26:12Z sra $
+pubd = '''-- $Id: pubd.sql 5901 2014-07-17 21:57:36Z sra $
-- Copyright (C) 2012--2014 Dragon Research Labs ("DRL")
-- Portions copyright (C) 2009--2010 Internet Systems Consortium ("ISC")
diff --git a/rpki/up_down.py b/rpki/up_down.py
index df45c8c2..9fb627a1 100644
--- a/rpki/up_down.py
+++ b/rpki/up_down.py
@@ -33,9 +33,8 @@ import rpki.relaxng
logger = logging.getLogger(__name__)
-xmlns = "http://www.apnic.net/specs/rescerts/up-down/"
-
-nsmap = { None : xmlns }
+xmlns = rpki.relaxng.up_down.xmlns
+nsmap = rpki.relaxng.up_down.nsmap
class base_elt(object):
"""
@@ -68,7 +67,7 @@ class base_elt(object):
Construct a element, copying over a set of attributes.
"""
- elt = lxml.etree.Element("{%s}%s" % (xmlns, name), nsmap=nsmap)
+ elt = lxml.etree.Element(xmlns + name, nsmap = nsmap)
for key in attrs:
val = getattr(self, key, None)
if val is not None:
@@ -81,7 +80,7 @@ class base_elt(object):
"""
if value is not None and not value.empty():
- lxml.etree.SubElement(elt, "{%s}%s" % (xmlns, name), nsmap=nsmap).text = value.get_Base64()
+ lxml.etree.SubElement(elt, xmlns + name, nsmap = nsmap).text = value.get_Base64()
def serve_pdu(self, q_msg, r_msg, child, callback, errback):
"""
diff --git a/rpki/xml_utils.py b/rpki/xml_utils.py
index 11c2180e..3a7b919a 100644
--- a/rpki/xml_utils.py
+++ b/rpki/xml_utils.py
@@ -199,7 +199,7 @@ class base_elt(object):
XML element constructor.
"""
- elt = lxml.etree.Element("{%s}%s" % (self.xmlns, self.element_name), nsmap = self.nsmap)
+ elt = lxml.etree.Element(self.xmlns + self.element_name, nsmap = self.nsmap)
for key in self.attributes:
val = getattr(self, key, None)
if val is not None:
@@ -215,7 +215,7 @@ class base_elt(object):
"""
if value is not None and not value.empty():
- lxml.etree.SubElement(elt, "{%s}%s" % (self.xmlns, name), nsmap = self.nsmap).text = value.get_Base64()
+ lxml.etree.SubElement(elt, self.xmlns + name, nsmap = self.nsmap).text = value.get_Base64()
def __str__(self):
"""
@@ -493,7 +493,7 @@ class msg(list):
Generate top-level PDU.
"""
- elt = lxml.etree.Element("{%s}msg" % (self.xmlns), nsmap = self.nsmap, version = str(self.version), type = self.type)
+ elt = lxml.etree.Element(self.xmlns + "msg", nsmap = self.nsmap, version = str(self.version), type = self.type)
elt.extend(i.toXML() for i in self)
return elt