diff options
Diffstat (limited to 'rpkid/testbed.py')
-rw-r--r-- | rpkid/testbed.py | 48 |
1 files changed, 43 insertions, 5 deletions
diff --git a/rpkid/testbed.py b/rpkid/testbed.py index f5176088..961846e1 100644 --- a/rpkid/testbed.py +++ b/rpkid/testbed.py @@ -84,11 +84,13 @@ testbed_dir = cfg.get("testbed_dir", testbed_name + ".dir") irdb_db_pass = cfg.get("irdb_db_pass", "fnord") rpki_db_pass = cfg.get("rpki_db_pass", "fnord") +pubd_db_pass = cfg.get("pubd_db_pass", "fnord") base_port = int(cfg.get("base_port", "4400")) rsyncd_port = allocate_port() rootd_port = allocate_port() +pubd_port = allocate_port() rsyncd_module = cfg.get("rsyncd_module", testbed_name) rootd_sia = cfg.get("rootd_sia", "rsync://localhost:%d/%s/" % (rsyncd_port, rsyncd_module)) @@ -96,12 +98,14 @@ rootd_sia = cfg.get("rootd_sia", "rsync://localhost:%d/%s/" % (rsyncd_ rootd_name = cfg.get("rootd_name", "rootd") rsyncd_name = cfg.get("rcynic_name", "rsyncd") rcynic_name = cfg.get("rcynic_name", "rcynic") +pubd_name = cfg.get("pubd_name", "pubd") prog_python = cfg.get("prog_python", "python") prog_rpkid = cfg.get("prog_rpkid", "../rpkid.py") prog_irdbd = cfg.get("prog_irdbd", "../irdbd.py") prog_poke = cfg.get("prog_poke", "../testpoke.py") prog_rootd = cfg.get("prog_rootd", "../rootd.py") +prog_pubd = cfg.get("prog_pubd", "../pubd.py") prog_openssl = cfg.get("prog_openssl", "../../openssl/openssl/apps/openssl") prog_rsyncd = cfg.get("prog_rsyncd", "rsync") prog_rcynic = cfg.get("prog_rcynic", "../../rcynic/rcynic") @@ -110,6 +114,7 @@ rcynic_stats = cfg.get("rcynic_stats", "xsltproc --param refresh 0 ../../rcy rpki_sql_file = cfg.get("rpki_sql_file", "rpkid.sql") irdb_sql_file = cfg.get("irdb_sql_file", "irdbd.sql") +pub_sql_file = cfg.get("pub_sql_file", "pubd.sql") startup_delay = int(cfg.get("startup_delay", "10")) @@ -121,11 +126,13 @@ def main(): signal.signal(signal.SIGALRM, wakeup) + pubd_process = None rootd_process = None rsyncd_process = None rpki_sql = mangle_sql(rpki_sql_file) irdb_sql = mangle_sql(irdb_sql_file) + pubd_sql = mangle_sql(pub_sql_file) try: os.chdir(testbed_dir) @@ -142,10 +149,13 @@ def main(): rpki.log.info("Constructing BPKI keys and certs for rootd") setup_bpki_cert_chain(rootd_name, ee = ("RPKI",)) + rpki.log.info("Constructing BPKI keys and certs for pubd") + setup_bpki_cert_chain(pubd_name, ee = ("RPKI", "IRBE")) + for a in db: a.setup_bpki_certs() - setup_publication() + setup_publication(pubd_sql) setup_rootd(db.root.name, "SELF-1") setup_rsyncd() setup_rcynic() @@ -757,13 +767,26 @@ def setup_rsyncd(): f.write(rsyncd_fmt_1 % d) f.close() -def setup_publication(): - """Set up (pseudo) publication directory.""" - rpki.log.info("Creating (pseudo) publication directory") +def setup_publication(pubd_sql): + """Set up publication daemon.""" + rpki.log.info("Configure publication daemon") + pubd_dir = os.getcwd() + "/publication/" assert rootd_sia.startswith("rsync://") global rsyncd_dir - rsyncd_dir = os.getcwd() + "/publication/" + rootd_sia[len("rsync://"):] + rsyncd_dir = pubd_dir + rootd_sia[len("rsync://"):] os.makedirs(rsyncd_dir) + db = MySQLdb.connect(user = "pubd", db = "pubd", passwd = pubd_db_pass) + cur = db.cursor() + for sql in pubd_sql: + cur.execute(sql) + db.close() + d = { "pubd_name" : pubd_name, + "pubd_port" : pubd_port, + "pubd_pass" : pubd_db_pass, + "pubd_dir" : pubd_dir } + f = open(pubd_name + ".conf", "w") + f.write(pubd_fmt_1 % d) + f.close() def run_rcynic(): """Run rcynic to see whether what was published makes sense.""" @@ -995,4 +1018,19 @@ path = %(rsyncd_dir)s comment = RPKI test ''' +pubd_fmt_1 = '''\ +[pubd] + +sql-database = %(pubd_name)s +sql-username = pubd +sql-password = %(pubd_pass)s +bpki-ta = %(pubd_name)s-TA.cer +pubd-cert = %(pubd_name)s-RPKI.cer +pubd-key = %(pubd_name)s-RPKI.key +irbe-cert = %(pubd_name)s-IRBE.cer +server-host = localhost +server-port = %(pubd_port)d +publication-base = %(pubd_dir)s +''' + main() |