diff options
author | Rob Austein <sra@hactrn.net> | 2007-10-03 04:06:27 +0000 |
---|---|---|
committer | Rob Austein <sra@hactrn.net> | 2007-10-03 04:06:27 +0000 |
commit | d41b9578692a2eaf4e7eef95f216299bb2b8a24b (patch) | |
tree | 6b615fbcc115b699054ae22c752d5210e7d1bc9e /scripts/rpki/up_down.py | |
parent | 2c5dfca16386daa00afca77b8c7edd042a0f27a8 (diff) |
Handle revoke PDU
svn path=/scripts/rpki/up_down.py; revision=1081
Diffstat (limited to 'scripts/rpki/up_down.py')
-rw-r--r-- | scripts/rpki/up_down.py | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/scripts/rpki/up_down.py b/scripts/rpki/up_down.py index ff1a67c8..fe799a73 100644 --- a/scripts/rpki/up_down.py +++ b/scripts/rpki/up_down.py @@ -309,7 +309,21 @@ class revoke_pdu(revoke_syntax): """Up-Down protocol "revoke" PDU.""" def serve_pdu(self, gctx, q_msg, r_msg, child): - raise NotImplementedError + if not self.class_name.isdigit(): + raise rpki.exceptions.BadClassNameSyntax, "Bad class name %s" % self.class_name + ca_id = long(self.class_name) + ca = rpki.sql.ca_obj.sql_fetch(gctx.db, gctx.cur, ca_id) + ca_detail = rpki.sql.ca_detail_elt.sql_fetch_active(gctx.db, gctx.cur, ca_id) + if ca is None or ca_detail is None: + raise rpki.exceptions.NotInDatabase + ski = base64.b64decode(self.ski.replace("_", "/").replace("-", "+")) + # This next search loop might be an argument for a child_cert.ski column + for c in rpki.sql.child_cert_obj.sql_fetch_where(gctx.db, gctx.cur, "child_id = %s AND ca_detail_id = %s" % (child.child_id, ca_detail.ca_detail_id)): + if c.cert.get_SKI() == ski: + c.sql_delete() + r_msg.payload = revoke_response_pdu() + r_msg.payload.class_name = self.class_name + r_msg.payload.ski = self.ski class revoke_response_pdu(revoke_syntax): """Up-Down protocol "revoke_response" PDU.""" |