diff options
author | Rob Austein <sra@hactrn.net> | 2010-08-29 03:39:59 +0000 |
---|---|---|
committer | Rob Austein <sra@hactrn.net> | 2010-08-29 03:39:59 +0000 |
commit | 376316916567bf253a57a909d0cd53d2bd53583d (patch) | |
tree | b76113eb3c4d5dc6dfd13ae401c9e0f1cc4a076e | |
parent | 64de2f733ac0c0d1ceffe52209ebde2f60cb6f5f (diff) |
Break XML packet dumps into multiple lines when logging schema
validation errors.
svn path=/rpkid/rpki/publication.py; revision=3431
-rw-r--r-- | rpkid/rpki/publication.py | 2 | ||||
-rw-r--r-- | rpkid/rpki/up_down.py | 17 | ||||
-rw-r--r-- | rpkid/rpki/x509.py | 22 | ||||
-rw-r--r-- | rpkid/rpki/xml_utils.py | 12 |
4 files changed, 26 insertions, 27 deletions
diff --git a/rpkid/rpki/publication.py b/rpkid/rpki/publication.py index 59db3ded..1af4be10 100644 --- a/rpkid/rpki/publication.py +++ b/rpkid/rpki/publication.py @@ -190,7 +190,7 @@ class publication_object_elt(rpki.xml_utils.base_elt, publication_namespace): """ elt = self.make_elt() if self.payload: - elt.text = base64.b64encode(self.payload.get_DER()) + elt.text = self.payload.get_Base64() return elt def serve_dispatch(self, r_msg, cb, eb): diff --git a/rpkid/rpki/up_down.py b/rpkid/rpki/up_down.py index 42dc4acb..225c0bd4 100644 --- a/rpkid/rpki/up_down.py +++ b/rpkid/rpki/up_down.py @@ -75,14 +75,12 @@ class base_elt(object): elt.set(key, str(val)) return elt - def make_b64elt(self, elt, name, value=None): + def make_b64elt(self, elt, name, value): """ Construct a sub-element with Base64 text content. """ - if value is None: - value = getattr(self, name, None) - if value is not None: - lxml.etree.SubElement(elt, "{%s}%s" % (xmlns, name), nsmap=nsmap).text = base64.b64encode(value) + if value is not None and not value.empty(): + lxml.etree.SubElement(elt, "{%s}%s" % (xmlns, name), nsmap=nsmap).text = value.get_Base64() def serve_pdu(self, q_msg, r_msg, child, callback, errback): """Default PDU handler to catch unexpected types.""" @@ -145,7 +143,7 @@ class certificate_elt(base_elt): Handle text content of a <certificate/> element. """ assert name == "certificate", "Unexpected name %s, stack %s" % (name, stack) - self.cert = rpki.x509.X509(Base64=text) + self.cert = rpki.x509.X509(Base64 = text) stack.pop() def toXML(self): @@ -193,7 +191,7 @@ class class_elt(base_elt): Handle <class/> elements and their children. """ if name == "issuer": - self.issuer = rpki.x509.X509(Base64=text) + self.issuer = rpki.x509.X509(Base64 = text) else: assert name == "class", "Unexpected name %s, stack %s" % (name, stack) stack.pop() @@ -206,8 +204,7 @@ class class_elt(base_elt): "resource_set_ipv4", "resource_set_ipv6", "resource_set_notafter", "suggested_sia_head") elt.extend([i.toXML() for i in self.certs]) - if self.issuer is not None: - self.make_b64elt(elt, "issuer", self.issuer.get_DER()) + self.make_b64elt(elt, "issuer", self.issuer) return elt def to_resource_bag(self): @@ -334,7 +331,7 @@ class issue_pdu(base_elt): Handle "issue" PDU. """ assert name == "request", "Unexpected name %s, stack %s" % (name, stack) - self.pkcs10 = rpki.x509.PKCS10(Base64=text) + self.pkcs10 = rpki.x509.PKCS10(Base64 = text) stack.pop() def toXML(self): diff --git a/rpkid/rpki/x509.py b/rpkid/rpki/x509.py index b2350368..9d770ffa 100644 --- a/rpkid/rpki/x509.py +++ b/rpkid/rpki/x509.py @@ -48,6 +48,15 @@ import email.mime.application, email.utils, mailbox, time import rpki.exceptions, rpki.resource_set, rpki.oids, rpki.sundial import rpki.manifest, rpki.roa, rpki.log, rpki.async +def base64_with_linebreaks(der): + """ + Encode DER (really, anything) as Base64 text, with linebreaks to + keep the result (sort of) readable. + """ + b = base64.b64encode(der) + n = len(b) + return "\n" + "\n".join(b[i : min(i + 64, n)] for i in xrange(0, n, 64)) + "\n" + def calculate_SKI(public_key_der): """ Calculate the SKI value given the DER representation of a public @@ -95,12 +104,7 @@ class PEM_converter(object): """ Convert from DER to PEM. """ - b64 = base64.b64encode(der) - pem = self.b + "\n" - while len(b64) > 64: - pem += b64[0:64] + "\n" - b64 = b64[64:] - return pem + b64 + "\n" + self.e + "\n" + return self.b + base64_with_linebreaks(der) + self.e + "\n" def _find_xia_uri(extension, name): """ @@ -203,7 +207,7 @@ class DER_object(object): def get_Base64(self): """Get the Base64 encoding of the DER value of this object.""" - return base64.b64encode(self.get_DER()) + return base64_with_linebreaks(self.get_DER()) def get_PEM(self): """Get the PEM representation of this object.""" @@ -1093,7 +1097,9 @@ class XML_CMS_object(CMS_object): try: self.schema.assertValid(self.get_content()) except lxml.etree.DocumentInvalid: - rpki.log.error("PDU failed schema check: " + self.pretty_print_content()) + rpki.log.error("PDU failed schema check:") + for line in self.pretty_print_content().splitlines(): + rpki.log.error(line) raise def dump_to_disk(self, prefix): diff --git a/rpkid/rpki/xml_utils.py b/rpkid/rpki/xml_utils.py index 274eeea0..4933cda9 100644 --- a/rpkid/rpki/xml_utils.py +++ b/rpkid/rpki/xml_utils.py @@ -189,14 +189,12 @@ class base_elt(object): elt.set(key, "yes") return elt - def make_b64elt(self, elt, name, value = None): + def make_b64elt(self, elt, name, value): """ Constructor for Base64-encoded subelement. """ - if value is None: - value = getattr(self, name, None) - if value is not None: - lxml.etree.SubElement(elt, "{%s}%s" % (self.xmlns, name), nsmap = self.nsmap).text = base64.b64encode(value) + 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() def __str__(self): """ @@ -267,9 +265,7 @@ class data_elt(base_elt): """ elt = self.make_elt() for i in self.elements: - x = getattr(self, i, None) - if x and not x.empty(): - self.make_b64elt(elt, i, x.get_DER()) + self.make_b64elt(elt, i, getattr(self, i, None)) return elt def make_reply(self, r_pdu = None): |