diff options
author | Rob Austein <sra@hactrn.net> | 2007-07-12 01:18:31 +0000 |
---|---|---|
committer | Rob Austein <sra@hactrn.net> | 2007-07-12 01:18:31 +0000 |
commit | 0c615497e477b40d1a7b68b5575ae5d0b1ed6b80 (patch) | |
tree | 683b0faec0ab193a6f9083b9c2ecd1c2e1704911 | |
parent | 2702e7702442df3f44d8f70d11add746d6b94fd1 (diff) |
Checkpoint
svn path=/docs/left-right-xml; revision=753
-rw-r--r-- | docs/left-right-xml | 416 | ||||
-rw-r--r-- | scripts/rpki/left_right.py | 120 | ||||
-rw-r--r-- | scripts/rpki/sax_utils.py | 22 | ||||
-rw-r--r-- | scripts/rpki/up_down.py | 33 |
4 files changed, 322 insertions, 269 deletions
diff --git a/docs/left-right-xml b/docs/left-right-xml index 2f172503..f6db4a1e 100644 --- a/docs/left-right-xml +++ b/docs/left-right-xml @@ -10,151 +10,151 @@ - Could make an argument either way on consistancy. --> -<completely-gratuitous-wrapper-element-to-let-me-run-this-through-xmllint> +<completely_gratuitous_wrapper_element_to_let_me_run_this_through_xmllint> - <msg type="control-request"> + <msg type="control_request"> <self action="create"> - <extension-preference name="name">Launcelot</extension-preference> - <extension-preference name="quest">Holy Grail</extension-preference> + <extension_preference name="name">Launcelot</extension_preference> + <extension_preference name="quest">Holy Grail</extension_preference> </self> </msg> - <msg type="control-response"> - <self self-id="42"/> + <msg type="control_response"> + <self self_id="42"/> </msg> - <msg type="control-request"> - <self action="set" self-id="42"> - <extension-preference name="color">Blue</extension-preference> + <msg type="control_request"> + <self action="set" self_id="42"> + <extension_preference name="color">Blue</extension_preference> <rekey/> <reissue/> <revoke/> - <run-now/> - <publish-world-now/> + <run_now/> + <publish_world_now/> </self> </msg> - <msg type="control-response"> - <self self-id="42"/> + <msg type="control_response"> + <self self_id="42"/> </msg> - <msg type="control-request"> - <self action="get" self-id="42"/> + <msg type="control_request"> + <self action="get" self_id="42"/> </msg> - <msg type="control-response"> - <self self-id="42"> - <extension-preference name="name">Launcelot</extension-preference> - <extension-preference name="quest">Holy Grail</extension-preference> - <extension-preference name="color">Blue</extension-preference> + <msg type="control_response"> + <self self_id="42"> + <extension_preference name="name">Launcelot</extension_preference> + <extension_preference name="quest">Holy Grail</extension_preference> + <extension_preference name="color">Blue</extension_preference> </self> </msg> - <msg type="control-request"> + <msg type="control_request"> <self action="list"/> </msg> - <msg type="control-response"> - <self self-id="42"> - <extension-preference name="name">Launcelot</extension-preference> - <extension-preference name="quest">Holy Grail</extension-preference> - <extension-preference name="color">Blue</extension-preference> + <msg type="control_response"> + <self self_id="42"> + <extension_preference name="name">Launcelot</extension_preference> + <extension_preference name="quest">Holy Grail</extension_preference> + <extension_preference name="color">Blue</extension_preference> </self> - <self self-id="99"> - <extension-preference name="name">Arthur, King of the Britons</extension-preference> - <extension-preference name="quest">Holy Grail</extension-preference> - <extension-preference name="airspeed-velocity-of-an-unladen-swallow">African or European swallow?</extension-preference> + <self self_id="99"> + <extension_preference name="name">Arthur, King of the Britons</extension_preference> + <extension_preference name="quest">Holy Grail</extension_preference> + <extension_preference name="airspeed_velocity_of_an_unladen_swallow">African or European swallow?</extension_preference> </self> </msg> - <msg type="control-request"> - <self action="destroy" self-id="42"/> + <msg type="control_request"> + <self action="destroy" self_id="42"/> </msg> - <msg type="control-response"> - <self self-id="42"/> + <msg type="control_response"> + <self self_id="42"/> </msg> <!-- ==== --> - <msg type="control-request"> - <biz-signing-context action="create" self-id="42"> - <signing-cert>cert1</signing-cert> - <generate-keypair key-type="rsa" hash-alg="sha1" key-length="2048"/> - </biz-signing-context> + <msg type="control_request"> + <biz_signing_context action="create" self_id="42"> + <signing_cert>cert1</signing_cert> + <generate_keypair key_type="rsa" hash_alg="sha1" key_length="2048"/> + </biz_signing_context> </msg> - <msg type="control-response"> - <biz-signing-context biz-signing-context-id="17"> - <pkcs10-cert-request>req</pkcs10-cert-request> - </biz-signing-context> + <msg type="control_response"> + <biz_signing_context biz_signing_context_id="17"> + <pkcs10_cert_request>req</pkcs10_cert_request> + </biz_signing_context> </msg> - <msg type="control-request"> - <biz-signing-context action="set" self-id="42" biz-signing-context-id="17"> - <signing-cert>cert2</signing-cert> - </biz-signing-context> + <msg type="control_request"> + <biz_signing_context action="set" self_id="42" biz_signing_context_id="17"> + <signing_cert>cert2</signing_cert> + </biz_signing_context> </msg> - <msg type="control-response"> - <biz-signing-context biz-signing-context-id="17"/> + <msg type="control_response"> + <biz_signing_context biz_signing_context_id="17"/> </msg> - <msg type="control-request"> - <biz-signing-context action="get" self-id="42" biz-signing-context-id="17"/> + <msg type="control_request"> + <biz_signing_context action="get" self_id="42" biz_signing_context_id="17"/> </msg> - <msg type="control-response"> - <biz-signing-context biz-signing-context-id="17"> - <signing-cert>cert1</signing-cert> - <signing-cert>cert2</signing-cert> - <public-key>key</public-key> - </biz-signing-context> + <msg type="control_response"> + <biz_signing_context biz_signing_context_id="17"> + <signing_cert>cert1</signing_cert> + <signing_cert>cert2</signing_cert> + <public_key>key</public_key> + </biz_signing_context> </msg> - <msg type="control-request"> - <biz-signing-context action="list" self-id="42"/> + <msg type="control_request"> + <biz_signing_context action="list" self_id="42"/> </msg> - <msg type="control-response"> - <biz-signing-context biz-signing-context-id="17"> - <signing-cert>cert1</signing-cert> - <signing-cert>cert2</signing-cert> - <public-key>key</public-key> - </biz-signing-context> + <msg type="control_response"> + <biz_signing_context biz_signing_context_id="17"> + <signing_cert>cert1</signing_cert> + <signing_cert>cert2</signing_cert> + <public_key>key</public_key> + </biz_signing_context> </msg> - <msg type="control-request"> - <biz-signing-context action="destroy" self-id="42" biz-signing-context-id="17"/> + <msg type="control_request"> + <biz_signing_context action="destroy" self_id="42" biz_signing_context_id="17"/> </msg> - <msg type="control-response"> - <biz-signing-context biz-signing-context-id="17"/> + <msg type="control_response"> + <biz_signing_context biz_signing_context_id="17"/> </msg> <!-- ==== --> - <msg type="control-request"> - <parent action="create" self-id="42"> + <msg type="control_request"> + <parent action="create" self_id="42"> <ta>ta</ta> <uri>uri</uri> - <sia-base>sia-base</sia-base> - <biz-signing-context>biz-signing-context</biz-signing-context> + <sia_base>sia_base</sia_base> + <biz_signing_context>biz_signing_context</biz_signing_context> <repository>repository</repository> </parent> </msg> - <msg type="control-response"> - <parent parent-id="666"/> + <msg type="control_response"> + <parent parent_id="666"/> </msg> - <msg type="control-request"> - <parent action="set" self-id="42" parent-id="666"> + <msg type="control_request"> + <parent action="set" self_id="42" parent_id="666"> <ta>ta</ta> <uri>uri</uri> - <sia-base>sia-base</sia-base> - <biz-signing-context>biz-signing-context</biz-signing-context> + <sia_base>sia_base</sia_base> + <biz_signing_context>biz_signing_context</biz_signing_context> <repository>repository</repository> <rekey/> <reissue/> @@ -162,253 +162,253 @@ </parent> </msg> - <msg type="control-response"> - <parent parent-id="666"/> + <msg type="control_response"> + <parent parent_id="666"/> </msg> - <msg type="control-request"> - <parent action="get" self-id="42" parent-id="666"/> + <msg type="control_request"> + <parent action="get" self_id="42" parent_id="666"/> </msg> - <msg type="control-response"> - <parent parent-id="666"> + <msg type="control_response"> + <parent parent_id="666"> <ta>ta</ta> <uri>uri</uri> - <sia-base>sia-base</sia-base> - <biz-signing-context>biz-signing-context</biz-signing-context> + <sia_base>sia_base</sia_base> + <biz_signing_context>biz_signing_context</biz_signing_context> <repository>repository</repository> </parent> </msg> - <msg type="control-request"> - <parent action="list" self-id="42"/> + <msg type="control_request"> + <parent action="list" self_id="42"/> </msg> - <msg type="control-response"> - <parent parent-id="666"> + <msg type="control_response"> + <parent parent_id="666"> <ta>ta</ta> <uri>uri</uri> - <sia-base>sia-base</sia-base> - <biz-signing-context>biz-signing-context</biz-signing-context> + <sia_base>sia_base</sia_base> + <biz_signing_context>biz_signing_context</biz_signing_context> <repository>repository</repository> </parent> </msg> - <msg type="control-request"> - <parent action="destroy" self-id="42" parent-id="666"/> + <msg type="control_request"> + <parent action="destroy" self_id="42" parent_id="666"/> </msg> - <msg type="control-response"> - <parent parent-id="666"/> + <msg type="control_response"> + <parent parent_id="666"/> </msg> <!-- ==== --> - <msg type="control-request"> - <child action="create" self-id="42"> + <msg type="control_request"> + <child action="create" self_id="42"> <ta>ta</ta> - <biz-signing-context>biz-signing-context</biz-signing-context> - <child-db-id>child-db-id</child-db-id> + <biz_signing_context>biz_signing_context</biz_signing_context> + <child_db_id>child_db_id</child_db_id> </child> </msg> - <msg type="control-response"> - <child child-id="3"/> + <msg type="control_response"> + <child child_id="3"/> </msg> - <msg type="control-request"> - <child action="set" self-id="42" child-id="3"> + <msg type="control_request"> + <child action="set" self_id="42" child_id="3"> <ta>ta</ta> - <biz-signing-context>biz-signing-context</biz-signing-context> - <child-db-id>child-db-id</child-db-id> + <biz_signing_context>biz_signing_context</biz_signing_context> + <child_db_id>child_db_id</child_db_id> <reissue/> </child> </msg> - <msg type="control-response"> - <child child-id="3"/> + <msg type="control_response"> + <child child_id="3"/> </msg> - <msg type="control-request"> - <child action="get" self-id="42" child-id="3"/> + <msg type="control_request"> + <child action="get" self_id="42" child_id="3"/> </msg> - <msg type="control-response"> - <child child-id="3"> + <msg type="control_response"> + <child child_id="3"> <ta>ta</ta> - <biz-signing-context>biz-signing-context</biz-signing-context> - <child-db-id>child-db-id</child-db-id> + <biz_signing_context>biz_signing_context</biz_signing_context> + <child_db_id>child_db_id</child_db_id> </child> </msg> - <msg type="control-request"> - <child action="list" self-id="42"/> + <msg type="control_request"> + <child action="list" self_id="42"/> </msg> - <msg type="control-response"> - <child child-id="3"> + <msg type="control_response"> + <child child_id="3"> <ta>ta</ta> - <biz-signing-context>biz-signing-context</biz-signing-context> - <child-db-id>child-db-id</child-db-id> + <biz_signing_context>biz_signing_context</biz_signing_context> + <child_db_id>child_db_id</child_db_id> </child> </msg> - <msg type="control-request"> - <child action="destroy" self-id="42" child-id="3"/> + <msg type="control_request"> + <child action="destroy" self_id="42" child_id="3"/> </msg> - <msg type="control-response"> - <child child-id="3"/> + <msg type="control_response"> + <child child_id="3"/> </msg> <!-- ==== --> - <msg type="control-request"> - <repository action="create" self-id="42"> + <msg type="control_request"> + <repository action="create" self_id="42"> <uri>uri</uri> <ta>ta</ta> - <biz-signing-context>biz-signing-context</biz-signing-context> + <biz_signing_context>biz_signing_context</biz_signing_context> </repository> </msg> - <msg type="control-response"> - <repository repository-id="120"/> + <msg type="control_response"> + <repository repository_id="120"/> </msg> - <msg type="control-request"> - <repository action="set" self-id="42" repository-id="120"> + <msg type="control_request"> + <repository action="set" self_id="42" repository_id="120"> <uri>uri</uri> <ta>ta</ta> - <biz-signing-context>biz-signing-context</biz-signing-context> + <biz_signing_context>biz_signing_context</biz_signing_context> </repository> </msg> - <msg type="control-response"> - <repository repository-id="120"/> + <msg type="control_response"> + <repository repository_id="120"/> </msg> - <msg type="control-request"> - <repository action="get" self-id="42" repository-id="120"/> + <msg type="control_request"> + <repository action="get" self_id="42" repository_id="120"/> </msg> - <msg type="control-response"> - <repository repository-id="120"> + <msg type="control_response"> + <repository repository_id="120"> <uri>uri</uri> <ta>ta</ta> - <biz-signing-context>biz-signing-context</biz-signing-context> + <biz_signing_context>biz_signing_context</biz_signing_context> </repository> </msg> - <msg type="control-request"> - <repository action="list" self-id="42"/> + <msg type="control_request"> + <repository action="list" self_id="42"/> </msg> - <msg type="control-response"> - <repository repository-id="120"> + <msg type="control_response"> + <repository repository_id="120"> <uri>uri</uri> <ta>ta</ta> - <biz-signing-context>biz-signing-context</biz-signing-context> + <biz_signing_context>biz_signing_context</biz_signing_context> </repository> </msg> - <msg type="control-request"> - <repository action="destroy" self-id="42" repository-id="120"/> + <msg type="control_request"> + <repository action="destroy" self_id="42" repository_id="120"/> </msg> - <msg type="control-response"> - <repository repository-id="120"/> + <msg type="control_response"> + <repository repository_id="120"/> </msg> <!-- ==== --> - <msg type="control-request"> - <route-origin action="create" self-id="42"/> + <msg type="control_request"> + <route_origin action="create" self_id="42"/> </msg> - <msg type="control-response"> - <route-origin route-origin-id="88"/> + <msg type="control_response"> + <route_origin route_origin_id="88"/> </msg> - <msg type="control-request"> - <route-origin action="set" self-id="42" route-origin-id="88"> - <suppress-publication/> - <as-number asn="12345"/> - <ipv4-prefix min="10.0.0.44" len="32"/> - <ipv4-range min="10.2.0.6" max="10.2.0.77"/> - <ipv6-prefix min="2002:a00::" len="48"/> - <ipv6-range min="2002:a02:6::" max="2002:a02:4d::"/> - </route-origin> + <msg type="control_request"> + <route_origin action="set" self_id="42" route_origin_id="88"> + <suppress_publication/> + <as_number asn="12345"/> + <ipv4_prefix min="10.0.0.44" len="32"/> + <ipv4_range min="10.2.0.6" max="10.2.0.77"/> + <ipv6_prefix min="2002:a00::" len="48"/> + <ipv6_range min="2002:a02:6::" max="2002:a02:4d::"/> + </route_origin> </msg> - <msg type="control-response"> - <route-origin route-origin-id="88"/> + <msg type="control_response"> + <route_origin route_origin_id="88"/> </msg> - <msg type="control-request"> - <route-origin action="get" self-id="42" route-origin-id="88"/> + <msg type="control_request"> + <route_origin action="get" self_id="42" route_origin_id="88"/> </msg> - <msg type="control-response"> - <route-origin route-origin-id="88"> - <as-number asn="12345"/> - <ipv4-prefix min="10.0.0.44" len="32"/> - <ipv4-range min="10.2.0.6" max="10.2.0.77"/> - <ipv6-prefix min="2002:a00::" len="48"/> - <ipv6-range min="2002:a02:6::" max="2002:a02:4d::"/> - </route-origin> + <msg type="control_response"> + <route_origin route_origin_id="88"> + <as_number asn="12345"/> + <ipv4_prefix min="10.0.0.44" len="32"/> + <ipv4_range min="10.2.0.6" max="10.2.0.77"/> + <ipv6_prefix min="2002:a00::" len="48"/> + <ipv6_range min="2002:a02:6::" max="2002:a02:4d::"/> + </route_origin> </msg> - <msg type="control-request"> - <route-origin action="list" self-id="42"/> + <msg type="control_request"> + <route_origin action="list" self_id="42"/> </msg> - <msg type="control-response"> - <route-origin route-origin-id="88"> - <as-number asn="12345"/> - <ipv4-prefix min="10.0.0.44" len="32"/> - <ipv4-range min="10.2.0.6" max="10.2.0.77"/> - <ipv6-prefix min="2002:a00::" len="48"/> - <ipv6-range min="2002:a02:6::" max="2002:a02:4d::"/> - </route-origin> + <msg type="control_response"> + <route_origin route_origin_id="88"> + <as_number asn="12345"/> + <ipv4_prefix min="10.0.0.44" len="32"/> + <ipv4_range min="10.2.0.6" max="10.2.0.77"/> + <ipv6_prefix min="2002:a00::" len="48"/> + <ipv6_range min="2002:a02:6::" max="2002:a02:4d::"/> + </route_origin> </msg> - <msg type="control-request"> - <route-origin action="destroy" self-id="42" route-origin-id="88"/> + <msg type="control_request"> + <route_origin action="destroy" self_id="42" route_origin_id="88"/> </msg> - <msg type="control-response"> - <route-origin route-origin-id="88"/> + <msg type="control_response"> + <route_origin route_origin_id="88"/> </msg> <!-- ==== --> <!-- ==== --> - <msg type="data-request"> - <list-resources self-id="42" child="id"/> + <msg type="data_request"> + <list_resources self_id="42" child_id="id"/> </msg> - <msg type="data-response"> - <list-resources self-id="42" child="id" valid-until="2008-04-01T00:00:00Z"> - <resource-class> - <ipv4-prefix min="10.0.0.44" len="32"/> - <ipv4-prefix min="10.3.0.44" len="32"/> - <ipv6-prefix min="fe80:dead:beef::" len="48"/> - <as-number asn="666"/> - </resource-class> - <resource-class subject-name="wombats are us"> - <subset-ipv4-prefix min="10.0.0.0" len="8"/> - <ipv4-prefix min="10.2..0.6" len="32"/> - <ipv6-prefix min="fe80:dead:beef::" len="48"/> - <ipv6-range min="fe80:dead:beef::" max="fe80:dead:beef::49"/> - <as-number asn="666"/> - </resource-class> - </list-resources> + <msg type="data_response"> + <list_resources self_id="42" child_id="id" valid_until="2008_04_01T00:00:00Z"> + <resource_class> + <ipv4_prefix min="10.0.0.44" len="32"/> + <ipv4_prefix min="10.3.0.44" len="32"/> + <ipv6_prefix min="fe80:dead:beef::" len="48"/> + <as_number asn="666"/> + </resource_class> + <resource_class subject_name="wombats are us"> + <subset_ipv4_prefix min="10.0.0.0" len="8"/> + <ipv4_prefix min="10.2..0.6" len="32"/> + <ipv6_prefix min="fe80:dead:beef::" len="48"/> + <ipv6_range min="fe80:dead:beef::" max="fe80:dead:beef::49"/> + <as_number asn="666"/> + </resource_class> + </list_resources> </msg> <!-- === --> <msg type="error"> - <report-error self-id="42" error-code="your-hair-is-on-fire">bag-of-data</report-error> + <report_error self_id="42" error_code="your_hair_is_on_fire">bag_of_data</report_error> </msg> -</completely-gratuitous-wrapper-element-to-let-me-run-this-through-xmllint> +</completely_gratuitous_wrapper_element_to_let_me_run_this_through_xmllint> diff --git a/scripts/rpki/left_right.py b/scripts/rpki/left_right.py index edc74fd0..53998d0e 100644 --- a/scripts/rpki/left_right.py +++ b/scripts/rpki/left_right.py @@ -2,6 +2,71 @@ import base64, sax_utils, resource_set +class base_elt(object): + """ + Base type for left-right message elements. + """ + + content_attr = False + base64_content = False + multivalue = () + + def __init__(self, up=None): + self.up = up + for key in self.multivalue: + setattr(self, key, []) + + def store(self, key, val): + if key in self.multivalue: + getattr(self, key).append(val) + else: + setattr(self, key, val) + + def startElement(self, name, attrs): + if name = self.name: + sax_utils.snarf_attribute(self, attrs, self.attributes) + + def endElement(self, name, text): + if name = self.name and self.content_attr: + if self.base64_content: + self.store(self.content_attr, base64.b64decode(text)) + else: + self.store(self.content_attr, text) + +class self_elt(base_elt): + name = "self" + attributes = ("action", "self_id") + +class child_elt(base_elt): + name = "child" + attributes = ("action", "self_id", "child_id") + +class parent_elt(base_elt): + name = "parent" + attributes = ("action", "self_id", "parent_id") + +class route_origin_elt(base_elt): + name = "route_origin" + attributes = ("action", "self_id", "route_origin_id") + +class repository_elt(base_elt): + name = "repository" + attributes = ("action", "self_id", "repository_id") + +class bsc_elt(base_elt): + name = "biz_signing_context" + attributes = ("action", "self_id", "biz_signing_context_id") + + + +class list_resources_elt(base_elt): + def startElement(self, name, attrs): + sax_utils.snarf_attribute(self, attrs, ("self_id", "child_id")) + +class report_error_elt(base_elt): + def startElement(self, name, attrs): + sax_utils.snarf_attribute(self, attrs, ("self_id", "error_code")) + class msg(list): """ Left-right PDU. @@ -11,44 +76,33 @@ class msg(list): version = 1 dispatch = { - ("control-request", "biz-signing-context") : bsc_q, - ("control-request", "child") : child_q, - ("control-request", "parent") : parent_q, - ("control-request", "repository") : repository_q, - ("control-request", "route-origin") : route_origin_q, - ("control-request", "self") : self_q, - ("control-response", "biz-signing-context") : bsc_r, - ("control-response", "child") : child_r, - ("control-response", "parent") : parent_r, - ("control-response", "repository") : repository_r, - ("control-response", "route-origin") : route_origin_r, - ("control-response", "self") : self_r, - ("data-request", "list-resources") : list_resources_q, - ("data-response", "list-resources") : list_resources_r, - ("error", "report-error") : report_error_q - } - - def __str__(self): - return ('\ -<?xml version="1.0" encoding="US-ASCII" ?>\n\ -<msg xmlns="%s"\n\ - version="%d"\n\ - type="%s">\n' \ - % (self.spec_uri, self.version, self.type) - ) + "".join(map(str,self)) + "</msg>\n" - - def endElement(self, name, text): - pass + "self" : self_elt, + "child" : child_elt, + "parent" : parent_elt, + "repository" : repository_elt, + "route_origin" : route_origin_elt, + "biz_signing_context" : bsc_elt, + "list_resources" : list_resources_elt, + "report_error" : report_error_elt } def startElement(self, name, attrs): if name == "msg": - sax_utils.snarf(self, attrs, "version", int) - sax_utils.snarf(self, attrs, "type") + sax_utils.snarf_attribute(self, attrs, "version", int) + sax_utils.snarf_attribute(self, attrs, "type") assert self.version == 1 else: - func = self.dispatch(self.type, name) - # hmm, proabbly want to look at action attribute but that's a - # layering violation, so maybe do it in the next handler down? + if name in self.dispatch: + self.append(self.dispatch[name](self)) + self[-1].startElement(name, attrs) + + def endElement(self, name, text): + self[-1].endElement(name, text) + + def __str__(self): + return ('<?xml version="1.0" encoding="US-ASCII" ?>\n' + '<msg xmlns="%s" version="%d" type="%s">\n' \ + % (self.spec_uri, self.version, self.type) + ) + "".join(map(str,self)) + "</msg>\n" class sax_handler(sax_utils.handler): """ diff --git a/scripts/rpki/sax_utils.py b/scripts/rpki/sax_utils.py index 6497699a..4d47f24a 100644 --- a/scripts/rpki/sax_utils.py +++ b/scripts/rpki/sax_utils.py @@ -2,20 +2,24 @@ import xml.sax -def snarf(obj, attrs, key, func=None): +def snarf_attribute(obj, attrs, key, func=None): """ Utility function to consolidate the steps needed to extract a field from the SAX XML parse and insert it as an object attribute of the same name. """ - try: - val = attrs.getValue(key).encode("ascii") - if func: - val = func(val) - except KeyError: - val = None - setattr(obj, key, val) + if isinstance(key, list) or isinstance(key, tuple): + for k in key: + snarf_attribute(obj, attrs, k, func) + else: + try: + val = attrs.getValue(key).encode("ascii") + if func: + val = func(val) + except KeyError: + val = None + setattr(obj, key, val) class handler(xml.sax.handler.ContentHandler): """ @@ -38,7 +42,7 @@ class handler(xml.sax.handler.ContentHandler): self.text += content def get_text(self): - val = self.text + val = self.text.encode("ascii") self.text = "" return val diff --git a/scripts/rpki/up_down.py b/scripts/rpki/up_down.py index 8d900c42..37635418 100644 --- a/scripts/rpki/up_down.py +++ b/scripts/rpki/up_down.py @@ -33,10 +33,10 @@ class cert_elt(object): """ def __init__(self, attrs): - sax_utils.snarf(self, attrs, "cert_url") - sax_utils.snarf(self, attrs, "req_resource_set_as", resource_set.resource_set_as) - sax_utils.snarf(self, attrs, "req_resource_set_ipv4", resource_set.resource_set_ipv4) - sax_utils.snarf(self, attrs, "req_resource_set_ipv6", resource_set.resource_set_ipv6) + sax_utils.snarf_attribute(self, attrs, "cert_url") + sax_utils.snarf_attribute(self, attrs, "req_resource_set_as", resource_set.resource_set_as) + sax_utils.snarf_attribute(self, attrs, "req_resource_set_ipv4", resource_set.resource_set_ipv4) + sax_utils.snarf_attribute(self, attrs, "req_resource_set_ipv6", resource_set.resource_set_ipv6) def __str__(self): xml = (' <certificate cert_url="%s"' % (self.cert_url)) @@ -55,12 +55,10 @@ class class_elt(object): """ def __init__(self, attrs): - sax_utils.snarf(self, attrs, "class_name") - sax_utils.snarf(self, attrs, "cert_url") - sax_utils.snarf(self, attrs, "resource_set_as", resource_set.resource_set_as) - sax_utils.snarf(self, attrs, "resource_set_ipv4", resource_set.resource_set_ipv4) - sax_utils.snarf(self, attrs, "resource_set_ipv6", resource_set.resource_set_ipv6) - sax_utils.snarf(self, attrs, "suggested_sia_head") + sax_utils.snarf_attribute(self, attrs, ("class_name", "cert_url", "suggested_sia_head")) + sax_utils.snarf_attribute(self, attrs, "resource_set_as", resource_set.resource_set_as) + sax_utils.snarf_attribute(self, attrs, "resource_set_ipv4", resource_set.resource_set_ipv4) + sax_utils.snarf_attribute(self, attrs, "resource_set_ipv6", resource_set.resource_set_ipv6) self.certs = [] def __str__(self): @@ -116,10 +114,10 @@ class issue_pdu(msg_pdu): def startElement(self, name, attrs): assert name == "request" - sax_utils.snarf(self, attrs, "class_name") - sax_utils.snarf(self, attrs, "req_resource_set_as", resource_set.resource_set_as) - sax_utils.snarf(self, attrs, "req_resource_set_ipv4", resource_set.resource_set_ipv4) - sax_utils.snarf(self, attrs, "req_resource_set_ipv6", resource_set.resource_set_ipv6) + sax_utils.snarf_attribute(self, attrs, "class_name") + sax_utils.snarf_attribute(self, attrs, "req_resource_set_as", resource_set.resource_set_as) + sax_utils.snarf_attribute(self, attrs, "req_resource_set_ipv4", resource_set.resource_set_ipv4) + sax_utils.snarf_attribute(self, attrs, "req_resource_set_ipv6", resource_set.resource_set_ipv6) def endElement(self, name, text): assert name == "request" @@ -150,8 +148,7 @@ class revoke_pdu(msg_pdu): """ def startElement(self, name, attrs): - sax_utils.snarf(self, attrs, "class_name") - sax_utils.snarf(self, attrs, "ski") + sax_utils.snarf_attribute(self, attrs, ("class_name", "ski")) def toXML(self): return (' <key class_name="%s" ski="%s" />\n' % (self.class_name, self.ski)) @@ -195,9 +192,7 @@ class sax_handler(sax_utils.handler): "revoke_response" : revoke_response_pdu(), "error_response" : error_response_pdu() }[attrs.getValue("type").encode("ascii")]) - sax_utils.snarf(self.obj, attrs, "sender") - sax_utils.snarf(self.obj, attrs, "recipient") - sax_utils.snarf(self.obj, attrs, "type") + sax_utils.snarf_attribute(self.obj, attrs, ("sender", "recipient", "type")) else: self.obj.startElement(name, attrs) |