aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--myrpki.rototill/myirbe.py62
-rw-r--r--myrpki/myirbe.py56
-rw-r--r--rpkid/irbe_cli.py67
-rw-r--r--rpkid/rpki/https.py43
4 files changed, 85 insertions, 143 deletions
diff --git a/myrpki.rototill/myirbe.py b/myrpki.rototill/myirbe.py
index 1ea20b43..c09ec8e1 100644
--- a/myrpki.rototill/myirbe.py
+++ b/myrpki.rototill/myirbe.py
@@ -75,44 +75,6 @@ def findbase64(tree, name, b64type = rpki.x509.X509):
bsc_handle = "bsc"
repository_handle = "repository"
-class caller(object):
- """
- Handle client-side mechanics for left-right and publication
- protocols.
- """
-
- debug = True
-
- def __init__(self, proto, client_key, client_cert, server_ta, server_cert, url):
- self.proto = proto
- self.client_key = client_key
- self.client_cert = client_cert
- self.server_ta = server_ta
- self.server_cert = server_cert
- self.url = url
-
- def __call__(self, cb, eb, pdus):
-
- def done(cms):
- msg, xml = self.proto.cms_msg.unwrap(cms, (self.server_ta, self.server_cert), pretty_print = True)
- if self.debug:
- print "Reply:", xml
- cb(msg)
-
- msg = self.proto.msg.query(*pdus)
- cms, xml = self.proto.cms_msg.wrap(msg, self.client_key, self.client_cert, pretty_print = True)
- if self.debug:
- print "Query:", xml
-
- rpki.https.client(
- client_key = self.client_key,
- client_cert = self.client_cert,
- server_ta = self.server_ta,
- url = self.url,
- msg = cms,
- callback = done,
- errback = eb)
-
os.environ["TZ"] = "UTC"
time.tzset()
@@ -174,29 +136,31 @@ updown_regexp = re.compile(re.escape(rpkid_base) + "up-down/([-A-Z0-9_]+)/([-A-Z
# Wrappers to simplify calling rpkid and pubd.
-call_rpkid = rpki.async.sync_wrapper(caller(
+call_rpkid = rpki.async.sync_wrapper(rpki.https.caller(
proto = rpki.left_right,
client_key = rpki.x509.RSA( PEM_file = bpki.dir + "/irbe.key"),
client_cert = rpki.x509.X509(PEM_file = bpki.dir + "/irbe.cer"),
server_ta = rpki.x509.X509(PEM_file = bpki.cer),
server_cert = rpki.x509.X509(PEM_file = bpki.dir + "/rpkid.cer"),
- url = rpkid_base + "left-right"))
+ url = rpkid_base + "left-right",
+ debug = True))
if run_pubd:
- call_pubd = rpki.async.sync_wrapper(caller(
+ call_pubd = rpki.async.sync_wrapper(rpki.https.caller(
proto = rpki.publication,
client_key = rpki.x509.RSA( PEM_file = bpki.dir + "/irbe.key"),
client_cert = rpki.x509.X509(PEM_file = bpki.dir + "/irbe.cer"),
server_ta = rpki.x509.X509(PEM_file = bpki.cer),
server_cert = rpki.x509.X509(PEM_file = bpki.dir + "/pubd.cer"),
- url = pubd_base + "control"))
+ url = pubd_base + "control",
+ debug = True))
# Make sure that pubd's BPKI CRL is up to date.
- call_pubd((rpki.publication.config_elt.make_pdu(
+ call_pubd(rpki.publication.config_elt.make_pdu(
action = "set",
- bpki_crl = rpki.x509.CRL(PEM_file = bpki.crl)),))
+ bpki_crl = rpki.x509.CRL(PEM_file = bpki.crl)))
irdbd_cfg = rpki.config.parser(cfg.get("irdbd_conf", cfg_file), "irdbd")
@@ -311,15 +275,15 @@ for xmlfile in xmlfiles:
if run_pubd:
client_pdus = dict((x.client_handle, x)
- for x in call_pubd((rpki.publication.client_elt.make_pdu(action = "list"),))
+ for x in call_pubd(rpki.publication.client_elt.make_pdu(action = "list"))
if isinstance(x, rpki.publication.client_elt))
- rpkid_reply = call_rpkid((
+ rpkid_reply = call_rpkid(
rpki.left_right.self_elt.make_pdu( action = "get", tag = "self", self_handle = handle),
rpki.left_right.bsc_elt.make_pdu( action = "list", tag = "bsc", self_handle = handle),
rpki.left_right.repository_elt.make_pdu(action = "list", tag = "repository", self_handle = handle),
rpki.left_right.parent_elt.make_pdu( action = "list", tag = "parent", self_handle = handle),
- rpki.left_right.child_elt.make_pdu( action = "list", tag = "child", self_handle = handle)))
+ rpki.left_right.child_elt.make_pdu( action = "list", tag = "child", self_handle = handle))
self_pdu = rpkid_reply[0]
bsc_pdus = dict((x.bsc_handle, x) for x in rpkid_reply if isinstance(x, rpki.left_right.bsc_elt))
@@ -502,7 +466,7 @@ for xmlfile in xmlfiles:
# If we changed anything, ship updates off to daemons
if rpkid_query:
- rpkid_reply = call_rpkid(rpkid_query)
+ rpkid_reply = call_rpkid(*rpkid_query)
bsc_pdus = dict((x.bsc_handle, x) for x in rpkid_reply if isinstance(x, rpki.left_right.bsc_elt))
if bsc_handle in bsc_pdus and bsc_pdus[bsc_handle].pkcs10_request:
bsc_req = bsc_pdus[bsc_handle].pkcs10_request
@@ -511,7 +475,7 @@ for xmlfile in xmlfiles:
if pubd_query:
assert run_pubd
- pubd_reply = call_pubd(pubd_query)
+ pubd_reply = call_pubd(*pubd_query)
for r in pubd_reply:
assert not isinstance(r, rpki.publication.report_error_elt)
diff --git a/myrpki/myirbe.py b/myrpki/myirbe.py
index ad54c9aa..3bb001bd 100644
--- a/myrpki/myirbe.py
+++ b/myrpki/myirbe.py
@@ -75,44 +75,6 @@ def findbase64(tree, name, b64type = rpki.x509.X509):
bsc_handle = "bsc"
repository_handle = "repository"
-class caller(object):
- """
- Handle client-side mechanics for left-right and publication
- protocols.
- """
-
- debug = True
-
- def __init__(self, proto, client_key, client_cert, server_ta, server_cert, url):
- self.proto = proto
- self.client_key = client_key
- self.client_cert = client_cert
- self.server_ta = server_ta
- self.server_cert = server_cert
- self.url = url
-
- def __call__(self, cb, eb, pdus):
-
- def done(cms):
- msg, xml = self.proto.cms_msg.unwrap(cms, (self.server_ta, self.server_cert), pretty_print = True)
- if self.debug:
- print "Reply:", xml
- cb(msg)
-
- msg = self.proto.msg.query(*pdus)
- cms, xml = self.proto.cms_msg.wrap(msg, self.client_key, self.client_cert, pretty_print = True)
- if self.debug:
- print "Query:", xml
-
- rpki.https.client(
- client_key = self.client_key,
- client_cert = self.client_cert,
- server_ta = self.server_ta,
- url = self.url,
- msg = cms,
- callback = done,
- errback = eb)
-
os.environ["TZ"] = "UTC"
time.tzset()
@@ -174,7 +136,7 @@ updown_regexp = re.compile(re.escape(rpkid_base) + "up-down/([-A-Z0-9_]+)/([-A-Z
# Wrappers to simplify calling rpkid and pubd.
-call_rpkid = rpki.async.sync_wrapper(caller(
+call_rpkid = rpki.async.sync_wrapper(rpki.https.caller(
proto = rpki.left_right,
client_key = rpki.x509.RSA( PEM_file = bpki.dir + "/irbe.key"),
client_cert = rpki.x509.X509(PEM_file = bpki.dir + "/irbe.cer"),
@@ -184,7 +146,7 @@ call_rpkid = rpki.async.sync_wrapper(caller(
if want_pubd:
- call_pubd = rpki.async.sync_wrapper(caller(
+ call_pubd = rpki.async.sync_wrapper(rpki.https.caller(
proto = rpki.publication,
client_key = rpki.x509.RSA( PEM_file = bpki.dir + "/irbe.key"),
client_cert = rpki.x509.X509(PEM_file = bpki.dir + "/irbe.cer"),
@@ -194,9 +156,9 @@ if want_pubd:
# Make sure that pubd's BPKI CRL is up to date.
- call_pubd((rpki.publication.config_elt.make_pdu(
+ call_pubd(rpki.publication.config_elt.make_pdu(
action = "set",
- bpki_crl = rpki.x509.CRL(PEM_file = bpki.crl)),))
+ bpki_crl = rpki.x509.CRL(PEM_file = bpki.crl)))
irdbd_cfg = rpki.config.parser(cfg.get("irdbd_conf", cfg_file), "irdbd")
@@ -312,15 +274,15 @@ for xmlfile in xmlfiles:
if want_pubd:
client_pdus = dict((x.client_handle, x)
- for x in call_pubd((rpki.publication.client_elt.make_pdu(action = "list"),))
+ for x in call_pubd(rpki.publication.client_elt.make_pdu(action = "list"))
if isinstance(x, rpki.publication.client_elt))
- rpkid_reply = call_rpkid((
+ rpkid_reply = call_rpkid(
rpki.left_right.self_elt.make_pdu( action = "get", tag = "self", self_handle = handle),
rpki.left_right.bsc_elt.make_pdu( action = "list", tag = "bsc", self_handle = handle),
rpki.left_right.repository_elt.make_pdu(action = "list", tag = "repository", self_handle = handle),
rpki.left_right.parent_elt.make_pdu( action = "list", tag = "parent", self_handle = handle),
- rpki.left_right.child_elt.make_pdu( action = "list", tag = "child", self_handle = handle)))
+ rpki.left_right.child_elt.make_pdu( action = "list", tag = "child", self_handle = handle))
self_pdu = rpkid_reply[0]
bsc_pdus = dict((x.bsc_handle, x) for x in rpkid_reply if isinstance(x, rpki.left_right.bsc_elt))
@@ -503,7 +465,7 @@ for xmlfile in xmlfiles:
# If we changed anything, ship updates off to daemons
if rpkid_query:
- rpkid_reply = call_rpkid(rpkid_query)
+ rpkid_reply = call_rpkid(*rpkid_query)
bsc_pdus = dict((x.bsc_handle, x) for x in rpkid_reply if isinstance(x, rpki.left_right.bsc_elt))
if bsc_handle in bsc_pdus and bsc_pdus[bsc_handle].pkcs10_request:
bsc_req = bsc_pdus[bsc_handle].pkcs10_request
@@ -512,7 +474,7 @@ for xmlfile in xmlfiles:
if pubd_query:
assert want_pubd
- pubd_reply = call_pubd(pubd_query)
+ pubd_reply = call_pubd(*pubd_query)
for r in pubd_reply:
assert not isinstance(r, rpki.publication.report_error_elt)
diff --git a/rpkid/irbe_cli.py b/rpkid/irbe_cli.py
index 0c329409..c347f672 100644
--- a/rpkid/irbe_cli.py
+++ b/rpkid/irbe_cli.py
@@ -38,43 +38,6 @@ import rpki.publication, rpki.async
pem_out = None
-class caller(object):
- """
- Handle client-side mechanics for left-right and publication
- protocols.
- """
-
- def __init__(self, cms_class, client_key, client_cert, server_ta, server_cert, url):
- self.cms_class = cms_class
- self.client_key = client_key
- self.client_cert = client_cert
- self.server_ta = server_ta
- self.server_cert = server_cert
- self.url = url
-
- def __call__(self, cb, eb, msg):
-
- def done(cms):
- msg, xml = self.cms_class.unwrap(cms, (self.server_ta, self.server_cert), pretty_print = True)
- if verbose:
- print "<!-- Reply -->"
- print xml
- cb(msg)
-
- cms, xml = self.cms_class.wrap(msg, self.client_key, self.client_cert, pretty_print = True)
- if verbose:
- print "<!-- Query -->"
- print xml
-
- rpki.https.client(
- client_key = self.client_key,
- client_cert = self.client_cert,
- server_ta = self.server_ta,
- url = self.url,
- msg = cms,
- callback = done,
- errback = eb)
-
class UsageWrapper(textwrap.TextWrapper):
"""
Call interface around Python textwrap.Textwrapper class.
@@ -319,8 +282,8 @@ if not argv:
cfg = rpki.config.parser(cfg_file, "irbe_cli")
-q_msg_left_right = left_right_msg.query()
-q_msg_publication = publication_msg.query()
+q_msg_left_right = []
+q_msg_publication = []
while argv:
if argv[0] in left_right_msg.pdus:
@@ -336,24 +299,34 @@ while argv:
if q_msg_left_right:
- call_rpkid = rpki.async.sync_wrapper(caller(
- cms_class = left_right_cms_msg,
+ class left_right_proto(object):
+ cms_msg = left_right_cms_msg
+ msg = left_right_msg
+
+ call_rpkid = rpki.async.sync_wrapper(rpki.https.caller(
+ proto = left_right_proto,
client_key = rpki.x509.RSA( Auto_file = cfg.get("rpkid-irbe-key")),
client_cert = rpki.x509.X509(Auto_file = cfg.get("rpkid-irbe-cert")),
server_ta = rpki.x509.X509(Auto_file = cfg.get("rpkid-bpki-ta")),
server_cert = rpki.x509.X509(Auto_file = cfg.get("rpkid-cert")),
- url = cfg.get("rpkid-url")))
+ url = cfg.get("rpkid-url"),
+ debug = verbose))
- call_rpkid(q_msg_left_right)
+ call_rpkid(*q_msg_left_right)
if q_msg_publication:
- call_pubd = rpki.async.sync_wrapper(caller(
- cms_class = publication_cms_msg,
+ class publication_proto(object):
+ msg = publication_msg
+ cms_msg = publication_cms_msg
+
+ call_pubd = rpki.async.sync_wrapper(rpki.https.caller(
+ proto = publication_proto,
client_key = rpki.x509.RSA( Auto_file = cfg.get("pubd-irbe-key")),
client_cert = rpki.x509.X509(Auto_file = cfg.get("pubd-irbe-cert")),
server_ta = rpki.x509.X509(Auto_file = cfg.get("pubd-bpki-ta")),
server_cert = rpki.x509.X509(Auto_file = cfg.get("pubd-cert")),
- url = cfg.get("pubd-url")))
+ url = cfg.get("pubd-url")),
+ debug = verbose)
- call_pubd(q_msg_publication)
+ call_pubd(*q_msg_publication)
diff --git a/rpkid/rpki/https.py b/rpkid/rpki/https.py
index 26b1cd87..d9bf4488 100644
--- a/rpkid/rpki/https.py
+++ b/rpkid/rpki/https.py
@@ -776,3 +776,46 @@ def build_https_ta_cache(certs):
"""
return set(certs)
+
+class caller(object):
+ """
+ Handle client-side mechanics for protocols based on HTTPS, CMS, and
+ rpki.xml_utils. Calling sequence is intended to nest within
+ rpki.async.sync_wrapper.
+ """
+
+ debug = False
+
+ def __init__(self, proto, client_key, client_cert, server_ta, server_cert, url, debug = None):
+ self.proto = proto
+ self.client_key = client_key
+ self.client_cert = client_cert
+ self.server_ta = server_ta
+ self.server_cert = server_cert
+ self.url = url
+ if debug is not None:
+ self.debug = debug
+
+ def __call__(self, cb, eb, *pdus):
+
+ def done(cms):
+ msg, xml = self.proto.cms_msg.unwrap(cms, (self.server_ta, self.server_cert), pretty_print = True)
+ if self.debug:
+ print "<!-- Reply -->"
+ print xml
+ cb(msg)
+
+ msg = self.proto.msg.query(*pdus)
+ cms, xml = self.proto.cms_msg.wrap(msg, self.client_key, self.client_cert, pretty_print = True)
+ if self.debug:
+ print "<!-- Query -->"
+ print xml
+
+ client(
+ client_key = self.client_key,
+ client_cert = self.client_cert,
+ server_ta = self.server_ta,
+ url = self.url,
+ msg = cms,
+ callback = done,
+ errback = eb)