aboutsummaryrefslogtreecommitdiff
path: root/rpki
diff options
context:
space:
mode:
Diffstat (limited to 'rpki')
-rw-r--r--rpki/pubd.py18
-rw-r--r--rpki/publication.py20
-rw-r--r--rpki/rpkid.py2
-rw-r--r--rpki/sql_schemas.py2
4 files changed, 25 insertions, 17 deletions
diff --git a/rpki/pubd.py b/rpki/pubd.py
index 4548265d..647b0f68 100644
--- a/rpki/pubd.py
+++ b/rpki/pubd.py
@@ -306,7 +306,7 @@ class session_obj(rpki.sql.sql_persistent):
xml.text = "\n"
for obj in self.objects:
DERSubElement(xml, rrdp_xmlns + "publish",
- der = obj.payload,
+ der = obj.der,
uri = obj.uri)
rpki.relaxng.rrdp.assertValid(xml)
self.snapshot = ElementToString(xml, pretty_print = True)
@@ -401,14 +401,14 @@ class delta_obj(rpki.sql.sql_persistent):
del self.deltas
self.sql_mark_dirty()
- def publish(self, client, obj, uri, hash):
+ def publish(self, client, der, uri, hash):
if hash is not None:
self.withdraw(client, uri, hash)
elif object_obj.current_object_at_uri(client, self, uri) is not None:
raise rpki.exceptions.ExistingObjectAtURI("Object already published at %s" % uri)
logger.debug("Publishing %s", uri)
- object_obj.create(client, self, obj, uri)
- se = DERSubElement(self.deltas[0], rrdp_xmlns + "publish", obj.get_DER(), uri = uri)
+ object_obj.create(client, self, der, uri)
+ se = DERSubElement(self.deltas[0], rrdp_xmlns + "publish", der = der, uri = uri)
if hash is not None:
se.set("hash", hash)
rpki.relaxng.rrdp.assertValid(self.deltas)
@@ -434,8 +434,8 @@ class object_obj(rpki.sql.sql_persistent):
"object",
"object_id",
"uri",
+ "der",
"hash",
- "payload",
"client_id",
"session_id")
@@ -453,13 +453,13 @@ class object_obj(rpki.sql.sql_persistent):
return rpki.publication_control.client_elt.sql_fetch(self.gctx, self.client_id)
@classmethod
- def create(cls, client, delta, obj, uri):
+ def create(cls, client, delta, der, uri):
self = cls()
self.gctx = delta.gctx
self.uri = uri
- self.payload = obj.get_DER()
- self.hash = rpki.x509.sha256(self.payload).encode("hex")
- logger.debug("Computed hash %s for %r", self.hash, obj)
+ self.der = der
+ self.hash = rpki.x509.sha256(der).encode("hex")
+ logger.debug("Computed hash %s for %s", self.hash, self.uri)
self.session_id = delta.session_id
self.client_id = client.client_id
self.sql_mark_dirty()
diff --git a/rpki/publication.py b/rpki/publication.py
index f619d0d9..5d9daf20 100644
--- a/rpki/publication.py
+++ b/rpki/publication.py
@@ -52,12 +52,20 @@ class base_publication_elt(rpki.xml_utils.base_elt, publication_namespace):
tag = None
uri = None
+ der = None
hash = None
- payload = None
+
+ _payload = None
def __repr__(self):
return rpki.log.log_repr(self, self.tag, self.uri, self.hash, self.payload)
+ @property
+ def payload(self):
+ if self._payload is None and self.der is not None:
+ self._payload = rpki.x509.uri_dispatch(self.uri)(DER = self.der)
+ return self._payload
+
def uri_to_filename(self):
"""
Convert a URI to a local filename.
@@ -96,7 +104,7 @@ class publish_elt(base_publication_elt):
assert name == self.element_name, "Unexpected name %s, stack %s" % (name, stack)
if text:
- self.payload = rpki.x509.uri_dispatch(self.uri)(Base64 = text)
+ self.der = text.decode("base64")
stack.pop()
def toXML(self):
@@ -105,8 +113,8 @@ class publish_elt(base_publication_elt):
"""
elt = self.make_elt()
- if self.payload != None:
- elt.text = self.payload.get_Base64()
+ if self.der is not None:
+ elt.text = self.der.encode("base64")
return elt
def serve_action(self, delta):
@@ -115,14 +123,14 @@ class publish_elt(base_publication_elt):
"""
logger.info("Publishing %s", self.payload.tracking_data(self.uri))
- delta.publish(self.client, self.payload, self.uri, self.hash)
+ delta.publish(self.client, self.der, self.uri, self.hash)
filename = self.uri_to_filename()
filename_tmp = filename + ".tmp"
dirname = os.path.dirname(filename)
if not os.path.isdir(dirname):
os.makedirs(dirname)
with open(filename_tmp, "wb") as f:
- f.write(self.payload.get_DER())
+ f.write(self.der)
os.rename(filename_tmp, filename)
diff --git a/rpki/rpkid.py b/rpki/rpkid.py
index b5044b2a..9a9429e5 100644
--- a/rpki/rpkid.py
+++ b/rpki/rpkid.py
@@ -2544,7 +2544,7 @@ class publication_queue(object):
if new_obj is None:
pdu = rpki.publication.withdraw_elt.make_pdu(uri = uri, hash = hash)
else:
- pdu = rpki.publication.publish_elt.make_pdu( uri = uri, hash = hash, payload = new_obj)
+ pdu = rpki.publication.publish_elt.make_pdu( uri = uri, hash = hash, der = new_obj.get_DER())
if handler is not None:
self.handlers[id(pdu)] = handler
diff --git a/rpki/sql_schemas.py b/rpki/sql_schemas.py
index 6cb95819..6778ecd9 100644
--- a/rpki/sql_schemas.py
+++ b/rpki/sql_schemas.py
@@ -315,8 +315,8 @@ CREATE TABLE delta (
CREATE TABLE object (
object_id SERIAL NOT NULL,
uri VARCHAR(255) NOT NULL,
+ der LONGBLOB NOT NULL,
hash CHAR(64) NOT NULL,
- payload LONGBLOB NOT NULL,
client_id BIGINT UNSIGNED NOT NULL,
session_id BIGINT UNSIGNED NOT NULL,
PRIMARY KEY (object_id),