aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Austein <sra@hactrn.net>2007-09-14 00:17:26 +0000
committerRob Austein <sra@hactrn.net>2007-09-14 00:17:26 +0000
commitb953478844243d06a48bdaff5edf6158ec2b4015 (patch)
tree4df802024875d14197e84911635aa9bdf0edf2e5
parent768e027933343e8ed5180589d2e240919fd91df5 (diff)
Implement many-to-many links for child object, ouch
svn path=/scripts/rpki/left_right.py; revision=953
-rw-r--r--scripts/rpki/left_right.py23
-rw-r--r--scripts/rpki/sql.py7
2 files changed, 30 insertions, 0 deletions
diff --git a/scripts/rpki/left_right.py b/scripts/rpki/left_right.py
index 9dc721d3..657efcd6 100644
--- a/scripts/rpki/left_right.py
+++ b/scripts/rpki/left_right.py
@@ -244,6 +244,29 @@ class child_elt(base_elt, rpki.sql.sql_persistant):
"child_id" : self.child_id,
"ta" : self.peer_ta.get_DER() }
+ def sql_fetch_hook(self, db, cur):
+ cur.execute("""SELECT ca_id FROM child_ca_link WHERE child_id = %s""", self.child_id)
+ self.cas = [rpki.sql.ca.sql_cache_find(ca_id) for (ca_id,) in cur.fetchall()]
+ for ca in self.cas:
+ ca.children.append(self)
+ cur.execute("""SELECT ca_detail_id, cert FROM child_ca_certificate WHERE child_id = %s""", self.child_id)
+ self.certs = []
+ for (ca_detail_id, cert) in cur.fetchall():
+ ca_detail = rpki.sql.ca_detail.sql_cache_find(ca_detail_id)
+ c = rpki.x509.X509(DER=cert)
+ c.child_id = self.child_id
+ c.ca_detail_id = ca_detail_id
+ self.certs.append(c)
+ ca_detail.certs.append(c)
+
+ def sql_insert_hook(self, db, cur):
+ cur.executemany("""INSERT child_ca_link (ca_id, child_id) VALUES (%s, %s)""", [(x.ca_id, self.child_id) for x in self.cas])
+ cur.executemany("""INSERT child_ca_certificate (child_id, ca_detail_id, cert) VALUES (%s, %s, %s)""", [(self.child_id, c.ca_detail_id, c) for c in self.certs])
+
+ def sql_delete_hook(self, db, cur):
+ cur.execute("""DELETE FROM child_ca_link where child_id = %s""", self.child_id)
+ cur.execute("""DELETE FROM child_ca_certificate where child_id = %s""", self.child_id)
+
peer_ta = None
def startElement(self, stack, name, attrs):
diff --git a/scripts/rpki/sql.py b/scripts/rpki/sql.py
index 02593930..ad44b9e8 100644
--- a/scripts/rpki/sql.py
+++ b/scripts/rpki/sql.py
@@ -205,6 +205,10 @@ class ca_detail_obj(sql_persistant):
sql_delete_cmd = """DELETE FROM ca_detail WHERE ca_detail_id = %(ca_detail_id)s"""
+
+ def __init__(self):
+ self.certs = []
+
def sql_decode(self, sql_parent, ca_detail_id, priv_key_handle, pub_key, latest_ca_cert_over_pubkey,
manifest_ee_priv_key_handle, manifest_ee_pub_key, latest_manifest_ee_cert, latest_manifest, latest_crl, ca_id):
assert isinstance(sql_parent, ca_obj)
@@ -248,6 +252,9 @@ class ca_obj(sql_persistant):
sql_children = (("ca_details", ca_detail_obj),)
+ def __init__(self):
+ self.children = []
+
def sql_decode(self, sql_parent, ca_id, last_crl_sn, next_crl_update, last_issued_sn, last_manifest_sn, next_manifest_update, sia_uri, parent_id):
assert isinstance(sql_parent, rpki.left_right.parent_elt)
self.parent_obj = sql_parent