aboutsummaryrefslogtreecommitdiff
path: root/scripts/rpki/left_right.py
diff options
context:
space:
mode:
authorRob Austein <sra@hactrn.net>2007-11-06 17:34:51 +0000
committerRob Austein <sra@hactrn.net>2007-11-06 17:34:51 +0000
commit40d178f47ef51b6ac6ebe9f1842f3a96e27769fd (patch)
tree4064d4b052ba20060d40274cb290cfbd26d09945 /scripts/rpki/left_right.py
parentc663c800f9500f4f35deaf10fab356a7168a3cf5 (diff)
Enforce self_id constraint on non-self objects.
svn path=/scripts/rpki/left_right.py; revision=1244
Diffstat (limited to 'scripts/rpki/left_right.py')
-rw-r--r--scripts/rpki/left_right.py32
1 files changed, 27 insertions, 5 deletions
diff --git a/scripts/rpki/left_right.py b/scripts/rpki/left_right.py
index 60efdce4..b9d96415 100644
--- a/scripts/rpki/left_right.py
+++ b/scripts/rpki/left_right.py
@@ -108,9 +108,16 @@ class data_elt(base_elt, rpki.sql.sql_persistant):
self.serve_post_save_hook(self, r_pdu)
r_msg.append(r_pdu)
+ def serve_fetch_one(self, gctx):
+ """Find the object on which a get, set, or destroy method should
+ operate. This is a separate method because the self object needs
+ to override it.
+ """
+ return self.sql_fetch_where1(gctx, "%s = %s AND self_id = %s" % (self.sql_template.index, getattr(self, self.sql_template.index), self.self_id))
+
def serve_set(self, gctx, r_msg):
"""Handle a set action."""
- db_pdu = self.sql_fetch(gctx, getattr(self, self.sql_template.index))
+ db_pdu = self.serve_fetch_one(gctx)
if db_pdu is not None:
r_pdu = self.make_reply()
for a in db_pdu.sql_template.columns[1:]:
@@ -127,7 +134,7 @@ class data_elt(base_elt, rpki.sql.sql_persistant):
def serve_get(self, gctx, r_msg):
"""Handle a get action."""
- r_pdu = self.sql_fetch(gctx, getattr(self, self.sql_template.index))
+ r_pdu = self.serve_fetch_one(gctx)
if r_pdu is not None:
self.make_reply(r_pdu)
r_msg.append(r_pdu)
@@ -135,14 +142,14 @@ class data_elt(base_elt, rpki.sql.sql_persistant):
r_msg.append(make_error_report(self))
def serve_list(self, gctx, r_msg):
- """Handle a list action."""
- for r_pdu in self.sql_fetch_all(gctx):
+ """Handle a list action for non-self objects."""
+ for r_pdu in self.sql_fetch_where(gctx, "self_id = %s" % self.self_id):
self.make_reply(r_pdu)
r_msg.append(r_pdu)
def serve_destroy(self, gctx, r_msg):
"""Handle a destroy action."""
- db_pdu = self.sql_fetch(gctx, getattr(self, self.sql_template.index))
+ db_pdu = self.serve_fetch_one(gctx)
if db_pdu is not None:
db_pdu.sql_delete(gctx)
r_msg.append(self.make_reply())
@@ -233,6 +240,21 @@ class self_elt(data_elt):
"run_now", "publish_world_now")
if getattr(self, b))
+ def serve_fetch_one(self, gctx):
+ """Find the self object on which a get, set, or destroy method
+ should operate.
+ """
+ return self.sql_fetch(gctx, self.self_id)
+
+ def serve_list(self, gctx, r_msg):
+ """Handle a list action for self objects. This is different from
+ the list action for all other objects, where list only works
+ within a given self_id context.
+ """
+ for r_pdu in self.sql_fetch_all(gctx):
+ self.make_reply(r_pdu)
+ r_msg.append(r_pdu)
+
def startElement(self, stack, name, attrs):
"""Handle <self/> element."""
if name == "extension_preference":