aboutsummaryrefslogtreecommitdiff
path: root/scripts/irbe-cli.py
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/irbe-cli.py')
-rwxr-xr-xscripts/irbe-cli.py38
1 files changed, 36 insertions, 2 deletions
diff --git a/scripts/irbe-cli.py b/scripts/irbe-cli.py
index 9c7c3cdf..8ebb149e 100755
--- a/scripts/irbe-cli.py
+++ b/scripts/irbe-cli.py
@@ -1,7 +1,9 @@
# $Id$
-"""
-Command line program to simulate behavior of the IR back-end.
+"""Command line program to simulate behavior of the IR back-end.
+
+This only handles the control channel. The query back-channel will be
+a separate program.
"""
import glob, rpki.left_right, rpki.relaxng, getopt, sys, lxml.etree, POW, POW.pkix, rpki.cms, rpki.https, xml.sax, lxml.sax
@@ -10,10 +12,16 @@ import glob, rpki.left_right, rpki.relaxng, getopt, sys, lxml.etree, POW, POW.pk
convert_from_pem = True
class command(object):
+ """Command processor mixin class for left-right protocol objects.
+
+ This class and its derived classes probably should be merged into
+ the left-right protocol classes, once this stuff is stable.
+ """
elements = ()
def getopt(self, argv):
+ """Parse options for this class."""
opts, args = getopt.getopt(argv, "", [x + "=" for x in self.attributes + self.elements] + [x for x in self.booleans])
for o, a in opts:
o = o[2:]
@@ -28,18 +36,26 @@ class command(object):
return args
def process(self, msg, argv):
+ """Parse options and add the current object into the msg we're building.
+
+ This is a separate method because at one point I needed to
+ override it.
+ """
argv = self.getopt(argv)
msg.append(self)
return argv
def handle_action(self, arg):
+ """Special handler for --action option."""
self.action = arg
self.type = "query"
def handle_peer_ta(self, arg):
+ """Special handler for --peer_ta option."""
self.peer_ta = read_cert(arg)
def read_cert(filename):
+ """Read a certificate file from disk."""
f = open(filename, "r")
der = f.read()
f.close()
@@ -50,10 +66,12 @@ def read_cert(filename):
return cert
class self(command, rpki.left_right.self_elt):
+ '''"self" command.'''
elements = ("extension_preference",)
def handle_extension_preference(self, arg):
+ """--extension_preferences option."""
k,v = arg.split("=", 1)
pref = rpki.left_right.extension_preference_elt()
pref.name = k
@@ -61,29 +79,39 @@ class self(command, rpki.left_right.self_elt):
self.prefs.append(pref)
class bsc(command, rpki.left_right.bsc_elt):
+ '''"bsc" command.'''
+
elements = ('signing_cert',)
def handle_signing_cert(self, arg):
+ """--signing_cert option."""
self.signing_cert.append(read_cert(arg))
class parent(command, rpki.left_right.parent_elt):
+ '''"parent" command.'''
elements = ("peer_ta",)
class child(command, rpki.left_right.child_elt):
+ '''"child" command.'''
elements = ("peer_ta",)
class repository(command, rpki.left_right.repository_elt):
+ '''"repository" command.'''
elements = ("peer_ta",)
class route_origin(command, rpki.left_right.route_origin_elt):
+ '''"route_origin" command.'''
def handle_asn(self, arg):
+ """Handle autonomous sequence numbers."""
self.asn = long(arg)
def handle_ipv4(self, arg):
+ """Handle IPv4 addresses."""
self.ipv4 = resource_set.resource_set_ipv4(arg)
def handle_ipv6(self, arg):
+ """Handle IPv6 addresses."""
self.ipv6 = resource_set.resource_set_ipv6(arg)
dispatch = dict((x.element_name, x) for x in (self, bsc, parent, child, repository, route_origin))
@@ -95,6 +123,12 @@ def usage():
sys.exit(1)
def main():
+ """Main program.
+
+ This is still a work in progress. At the moment it gets as
+ transmitting the generated request, but doesn't yet do anything with
+ responses.
+ """
rng = rpki.relaxng.RelaxNG("left-right-schema.rng")
httpsCerts = rpki.https.CertInfo("Bob")
pan class="w"> sha1WithRSAEncryption Issuer: CN=TEST ENTITY RIR Validity Not Before: Aug 1 14:05:29 2007 GMT Not After : Jul 31 14:05:29 2008 GMT Subject: CN=TEST ENTITY LIR2 Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:f1:18:b6:79:0b:35:c5:83:64:48:83:31:03:9e: e7:72:28:65:b1:ac:61:e1:77:2e:c0:4d:f0:b1:1c: 61:d8:cc:5a:2d:c7:0b:9b:78:7a:3e:fd:37:ad:fa: b0:73:0b:9c:fc:bb:6f:60:ea:38:ef:ae:d1:27:b8: 81:59:0f:b3:e7:d0:67:b2:a2:f5:4f:e2:04:c6:cc: 13:9f:33:28:35:96:7a:db:ce:ac:9d:d3:64:3d:b8: 44:bc:cb:43:22:92:d6:3c:2e:bf:97:6e:39:6a:6e: 68:93:5d:1c:a8:58:b7:a3:7a:26:44:fe:fe:30:ad: e2:05:89:4c:c9:ef:2c:e0:4e:31:69:3f:dd:91:1c: f0:b0:25:4c:3e:84:8a:ea:5e:03:b3:a8:cd:90:1a: 1e:c8:e0:af:fe:11:ed:21:06:bd:3c:5e:08:a1:93: e2:41:43:43:38:d3:21:b3:4c:fa:85:8b:43:57:60: 5d:bb:a0:78:e5:33:47:a8:33:76:be:df:6e:63:61: e3:31:8b:5d:8e:0c:c7:f5:c8:91:0c:be:57:c7:f2: bc:be:0b:ba:7a:1f:f6:19:f1:eb:00:74:c1:12:c2: dc:2b:2e:8d:f0:0a:ff:7f:e8:60:08:90:ba:51:fc: d0:90:11:37:f3:9e:44:b6:64:43:69:5d:61:d3:e1: 8d:77 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: 03:7A:DF:0C:DF:DC:93:3D:F7:A5:CC:27:7B:DC:22:F6:E9:55:97:F0 X509v3 Authority Key Identifier: keyid:FB:B8:A7:A3:36:48:0A:A0:9F:F0:2E:DC:8B:68:BC:B3:5C:45:25:D7 X509v3 Key Usage: critical Certificate Sign, CRL Sign Subject Information Access: 1.3.6.1.5.5.7.48.5 - URI:rsync://wombats-r-us.hactrn.net/LIR2/ Authority Information Access: CA Issuers - URI:rsync://wombats-r-us.hactrn.net/RIR.cer sbgp-autonomousSysNum: critical Autonomous System Numbers: 64544 sbgp-ipAddrBlock: critical IPv6: 2001:db8:0:0:0:0:0:44-2001:db8:0:0:0:0:0:100 2001:db8:0:0:0:10:0:44/128 Signature Algorithm: sha1WithRSAEncryption 2c:7e:f1:e6:b5:3f:58:22:09:5d:48:ab:9a:3b:67:b8:6c:c6: 3d:f4:2e:81:f5:63:42:a0:3f:78:4a:9c:0f:6d:d5:64:21:7a: a9:56:1c:2c:f6:d3:1e:7b:f8:c9:3a:69:09:18:4b:56:88:de: c7:51:19:bf:63:2f:8b:a7:24:63:b9:a9:b1:93:21:14:e4:3d: 38:68:0d:b8:f1:33:6b:1c:fa:5f:87:40:42:5e:f5:8d:15:f7: 9d:7f:89:02:23:f3:fb:7e:29:4c:32:61:d5:b4:8e:68:5d:00: a0:25:3a:99:76:c2:f2:48:b8:1f:05:5a:65:84:e6:71:a1:02: ad:6e:b0:72:39:06:49:bc:ab:f9:d7:b4:76:a9:84:8b:fe:8a: 45:11:1f:c3:58:f0:b4:9d:ee:0a:90:a7:2b:4b:11:ab:7a:90: aa:b6:a2:63:c6:7d:bc:07:1d:f5:6e:67:b9:7d:bd:8e:c4:11: cc:4f:96:2c:8e:95:ec:50:3c:e0:cf:e3:e1:ea:7e:4e:92:54: 58:5b:82:58:8b:51:8a:79:3f:0b:00:d5:c1:00:7b:8d:75:ce: 7b:36:2d:26:36:63:0e:43:01:17:6e:28:fe:d1:5d:12:68:34: 85:0d:59:d3:81:33:73:b0:7c:57:cb:3b:f2:43:e0:7c:4a:44: 89:6d:a3:4c -----BEGIN CERTIFICATE----- MIIEETCCAvmgAwIBAgIBBTANBgkqhkiG9w0BAQUFADAaMRgwFgYDVQQDEw9URVNU IEVOVElUWSBSSVIwHhcNMDcwODAxMTQwNTI5WhcNMDgwNzMxMTQwNTI5WjAbMRkw FwYDVQQDExBURVNUIEVOVElUWSBMSVIyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A MIIBCgKCAQEA8Ri2eQs1xYNkSIMxA57ncihlsaxh4XcuwE3wsRxh2MxaLccLm3h6 Pv03rfqwcwuc/LtvYOo4767RJ7iBWQ+z59BnsqL1T+IExswTnzMoNZZ6286sndNk PbhEvMtDIpLWPC6/l245am5ok10cqFi3o3omRP7+MK3iBYlMye8s4E4xaT/dkRzw sCVMPoSK6l4Ds6jNkBoeyOCv/hHtIQa9PF4IoZPiQUNDONMhs0z6hYtDV2Bdu6B4 5TNHqDN2vt9uY2HjMYtdjgzH9ciRDL5Xx/K8vgu6eh/2GfHrAHTBEsLcKy6N8Ar/ f+hgCJC6UfzQkBE3855EtmRDaV1h0+GNdwIDAQABo4IBXzCCAVswDwYDVR0TAQH/ BAUwAwEB/zAdBgNVHQ4EFgQUA3rfDN/ckz33pcwne9wi9ulVl/AwHwYDVR0jBBgw FoAU+7inozZICqCf8C7ci2i8s1xFJdcwDgYDVR0PAQH/BAQDAgEGMEEGCCsGAQUF BwELBDUwMzAxBggrBgEFBQcwBYYlcnN5bmM6Ly93b21iYXRzLXItdXMuaGFjdHJu Lm5ldC9MSVIyLzBDBggrBgEFBQcBAQQ3MDUwMwYIKwYBBQUHMAKGJ3JzeW5jOi8v d29tYmF0cy1yLXVzLmhhY3Rybi5uZXQvUklSLmNlcjAaBggrBgEFBQcBCAEB/wQL MAmgBzAFAgMA/CAwVAYIKwYBBQUHAQcBAf8ERTBDMEEEAgACMDswJgMRAiABDbgA AAAAAAAAAAAAAEQDEQAgAQ24AAAAAAAAAAAAAAEAAxEAIAENuAAAAAAAAAAQAAAA RDANBgkqhkiG9w0BAQUFAAOCAQEALH7x5rU/WCIJXUirmjtnuGzGPfQugfVjQqA/ eEqcD23VZCF6qVYcLPbTHnv4yTppCRhLVojex1EZv2Mvi6ckY7mpsZMhFOQ9OGgN uPEzaxz6X4dAQl71jRX3nX+JAiPz+34pTDJh1bSOaF0AoCU6mXbC8ki4HwVaZYTm caECrW6wcjkGSbyr+de0dqmEi/6KRREfw1jwtJ3uCpCnK0sRq3qQqraiY8Z9vAcd 9W5nuX29jsQRzE+WLI6V7FA84M/j4ep+TpJUWFuCWItRink/CwDVwQB7jXXOezYt JjZjDkMBF24o/tFdEmg0hQ1Z04Ezc7B8V8s78kPgfEpEiW2jTA== -----END CERTIFICATE-----