diff options
Diffstat (limited to 'rpkid')
-rw-r--r-- | rpkid/backup-sql.in | 56 | ||||
-rw-r--r-- | rpkid/irbe_cli.in | 339 | ||||
-rw-r--r-- | rpkid/irdbd.in | 24 | ||||
-rw-r--r-- | rpkid/myrpki.in | 24 | ||||
-rw-r--r-- | rpkid/pubd.in | 24 | ||||
-rw-r--r-- | rpkid/rootd.in | 24 | ||||
-rw-r--r-- | rpkid/rpkid.in | 24 | ||||
-rw-r--r-- | rpkid/sql-setup.in | 110 | ||||
-rw-r--r-- | rpkid/start-servers.in | 86 |
9 files changed, 711 insertions, 0 deletions
diff --git a/rpkid/backup-sql.in b/rpkid/backup-sql.in new file mode 100644 index 00000000..80c3d69f --- /dev/null +++ b/rpkid/backup-sql.in @@ -0,0 +1,56 @@ +#!@PYTHON@ +# -*- Python -*- + +""" +Back up data from SQL databases, looking at config file to figure out +which databases and what credentials to use with them. + +For the moment, this just writes all the SQL to stdout. + +$Id$ + +Copyright (C) 2010 Internet Systems Consortium ("ISC") + +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +""" + +import subprocess, os, getopt, sys, time, rpki.config + +os.environ["TZ"] = "UTC" +time.tzset() + +cfg_file = "myrpki.conf" + +opts, argv = getopt.getopt(sys.argv[1:], "c:h?", ["config=", "help"]) +for o, a in opts: + if o in ("-h", "--help", "-?"): + print __doc__ + sys.exit(0) + elif o in ("-c", "--config"): + cfg_file = a + +cfg = rpki.config.parser(cfg_file, "myrpki") + +def dump(section): + subprocess.check_call( + ("mysqldump", "--add-drop-database", + "-u", cfg.get("sql-username", section = section), + "-p" + cfg.get("sql-password", section = section), + "-B", cfg.get("sql-database", section = section))) + +if cfg.getboolean("run_rpkid", False): + dump("irdbd") + dump("rpkid") + +if cfg.getboolean("run_pubd", False): + dump("pubd") diff --git a/rpkid/irbe_cli.in b/rpkid/irbe_cli.in new file mode 100644 index 00000000..1c482e3a --- /dev/null +++ b/rpkid/irbe_cli.in @@ -0,0 +1,339 @@ +#!@PYTHON@ +# -*- Python -*- + +""" +Command line IR back-end control program for rpkid and pubd. + +$Id$ + +Copyright (C) 2009--2010 Internet Systems Consortium ("ISC") + +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + +Portions copyright (C) 2007--2008 American Registry for Internet Numbers ("ARIN") + +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND ARIN DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL ARIN BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +""" + +import getopt, sys, textwrap +import rpki.left_right, rpki.http, rpki.x509, rpki.config, rpki.log +import rpki.publication, rpki.async + +pem_out = None + +class UsageWrapper(textwrap.TextWrapper): + """ + Call interface around Python textwrap.Textwrapper class. + """ + + def __call__(self, *args): + """ + Format arguments, with TextWrapper indentation. + """ + return self.fill(textwrap.dedent(" ".join(args))) + +usage_fill = UsageWrapper(subsequent_indent = " " * 4) + +class reply_elt_mixin(object): + """ + Protocol mix-in for printout of reply PDUs. + """ + + is_cmd = False + + def client_reply_decode(self): + pass + + def client_reply_show(self): + print self.element_name + for i in self.attributes + self.elements: + if getattr(self, i) is not None: + print " %s: %s" % (i, getattr(self, i)) + +class cmd_elt_mixin(reply_elt_mixin): + """ + Protocol mix-in for command line client element PDUs. + """ + + is_cmd = True + + ## @var excludes + # XML attributes and elements that should not be allowed as command + # line arguments. + excludes = () + + @classmethod + def usage(cls): + """ + Generate usage message for this PDU. + """ + args = " ".join("--" + x + "=" for x in cls.attributes + cls.elements if x not in cls.excludes) + bools = " ".join("--" + x for x in cls.booleans) + if args and bools: + return args + " " + bools + else: + return args or bools + + def client_getopt(self, argv): + """ + Parse options for this class. + """ + opts, argv = getopt.getopt(argv, "", [x + "=" for x in self.attributes + self.elements if x not in self.excludes] + list(self.booleans)) + for o, a in opts: + o = o[2:] + handler = getattr(self, "client_query_" + o, None) + if handler is not None: + handler(a) + elif o in self.booleans: + setattr(self, o, True) + else: + assert o in self.attributes + setattr(self, o, a) + return argv + + def client_query_bpki_cert(self, arg): + """ + Special handler for --bpki_cert option. + """ + self.bpki_cert = rpki.x509.X509(Auto_file = arg) + + def client_query_glue(self, arg): + """ + Special handler for --bpki_glue option. + """ + self.bpki_glue = rpki.x509.X509(Auto_file = arg) + + def client_query_bpki_cms_cert(self, arg): + """ + Special handler for --bpki_cms_cert option. + """ + self.bpki_cms_cert = rpki.x509.X509(Auto_file = arg) + + def client_query_cms_glue(self, arg): + """ + Special handler for --bpki_cms_glue option. + """ + self.bpki_cms_glue = rpki.x509.X509(Auto_file = arg) + +class cmd_msg_mixin(object): + """ + Protocol mix-in for command line client message PDUs. + """ + + @classmethod + def usage(cls): + """ + Generate usage message for this PDU. + """ + for k, v in cls.pdus.items(): + if v.is_cmd: + print usage_fill(k, v.usage()) + +# left-right protcol + +class self_elt(cmd_elt_mixin, rpki.left_right.self_elt): + pass + +class bsc_elt(cmd_elt_mixin, rpki.left_right.bsc_elt): + + excludes = ("pkcs10_request",) + + def client_query_signing_cert(self, arg): + """--signing_cert option.""" + self.signing_cert = rpki.x509.X509(Auto_file = arg) + + def client_query_signing_cert_crl(self, arg): + """--signing_cert_crl option.""" + self.signing_cert_crl = rpki.x509.CRL(Auto_file = arg) + + def client_reply_decode(self): + global pem_out + if pem_out is not None and self.pkcs10_request is not None: + if isinstance(pem_out, str): + pem_out = open(pem_out, "w") + pem_out.write(self.pkcs10_request.get_PEM()) + +class parent_elt(cmd_elt_mixin, rpki.left_right.parent_elt): + pass + +class child_elt(cmd_elt_mixin, rpki.left_right.child_elt): + pass + +class repository_elt(cmd_elt_mixin, rpki.left_right.repository_elt): + pass + +class list_published_objects_elt(cmd_elt_mixin, rpki.left_right.list_published_objects_elt): + excludes = ("uri",) + +class list_received_resources_elt(cmd_elt_mixin, rpki.left_right.list_received_resources_elt): + excludes = ("parent_handle", "notBefore", "notAfter", "uri", "sia_uri", "aia_uri", "asn", "ipv4", "ipv6") + +class report_error_elt(reply_elt_mixin, rpki.left_right.report_error_elt): + pass + +class left_right_msg(cmd_msg_mixin, rpki.left_right.msg): + pdus = dict((x.element_name, x) + for x in (self_elt, bsc_elt, parent_elt, child_elt, repository_elt, + list_published_objects_elt, list_received_resources_elt, report_error_elt)) + +class left_right_sax_handler(rpki.left_right.sax_handler): + pdu = left_right_msg + +class left_right_cms_msg(rpki.left_right.cms_msg): + saxify = left_right_sax_handler.saxify + +# Publication protocol + +class config_elt(cmd_elt_mixin, rpki.publication.config_elt): + + def client_query_bpki_crl(self, arg): + """ + Special handler for --bpki_crl option. + """ + self.bpki_crl = rpki.x509.CRL(Auto_file = arg) + +class client_elt(cmd_elt_mixin, rpki.publication.client_elt): + pass + +class certificate_elt(cmd_elt_mixin, rpki.publication.certificate_elt): + pass + +class crl_elt(cmd_elt_mixin, rpki.publication.crl_elt): + pass + +class manifest_elt(cmd_elt_mixin, rpki.publication.manifest_elt): + pass + +class roa_elt(cmd_elt_mixin, rpki.publication.roa_elt): + pass + +class report_error_elt(reply_elt_mixin, rpki.publication.report_error_elt): + pass + +class publication_msg(cmd_msg_mixin, rpki.publication.msg): + pdus = dict((x.element_name, x) + for x in (config_elt, client_elt, certificate_elt, crl_elt, manifest_elt, roa_elt, report_error_elt)) + +class publication_sax_handler(rpki.publication.sax_handler): + pdu = publication_msg + +class publication_cms_msg(rpki.publication.cms_msg): + saxify = publication_sax_handler.saxify + +# Usage + +top_opts = ["config=", "help", "pem_out=", "quiet", "verbose"] + +def usage(code = 1): + print __doc__.strip() + print + print "Usage:" + print + print "# Top-level options:" + print usage_fill(*["--" + x for x in top_opts]) + print + print "# left-right protocol:" + left_right_msg.usage() + print + print "# publication protocol:" + publication_msg.usage() + sys.exit(code) + +# Main program + +rpki.log.init("irbe_cli") + +argv = sys.argv[1:] + +if not argv: + usage(0) + +cfg_file = "irbe.conf" +verbose = True + +opts, argv = getopt.getopt(argv, "c:hpqv?", top_opts) +for o, a in opts: + if o in ("-?", "-h", "--help"): + usage(0) + elif o in ("-c", "--config"): + cfg_file = a + elif o in ("-p", "--pem_out"): + pem_out = a + elif o in ("-q", "--quiet"): + verbose = False + elif o in ("-v", "--verbose"): + verbose = True + +if not argv: + usage(1) + +cfg = rpki.config.parser(cfg_file, "irbe_cli") + +q_msg_left_right = [] +q_msg_publication = [] + +while argv: + if argv[0] in left_right_msg.pdus: + q_pdu = left_right_msg.pdus[argv[0]]() + q_msg = q_msg_left_right + elif argv[0] in publication_msg.pdus: + q_pdu = publication_msg.pdus[argv[0]]() + q_msg = q_msg_publication + else: + usage(1) + argv = q_pdu.client_getopt(argv[1:]) + q_msg.append(q_pdu) + +if q_msg_left_right: + + class left_right_proto(object): + cms_msg = left_right_cms_msg + msg = left_right_msg + + call_rpkid = rpki.async.sync_wrapper(rpki.http.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"), + debug = verbose)) + + call_rpkid(*q_msg_left_right) + +if q_msg_publication: + + class publication_proto(object): + msg = publication_msg + cms_msg = publication_cms_msg + + call_pubd = rpki.async.sync_wrapper(rpki.http.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")), + debug = verbose) + + call_pubd(*q_msg_publication) diff --git a/rpkid/irdbd.in b/rpkid/irdbd.in new file mode 100644 index 00000000..95ab6107 --- /dev/null +++ b/rpkid/irdbd.in @@ -0,0 +1,24 @@ +#!@PYTHON@ +# -*- Python -*- + +""" +$Id$ + +Copyright (C) 2010 Internet Systems Consortium ("ISC") + +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +""" + +if __name__ == "__main__": + import rpki.irdbd + rpki.irdbd.main() diff --git a/rpkid/myrpki.in b/rpkid/myrpki.in new file mode 100644 index 00000000..f17564b2 --- /dev/null +++ b/rpkid/myrpki.in @@ -0,0 +1,24 @@ +#!@PYTHON@ +# -*- Python -*- + +""" +$Id$ + +Copyright (C) 2010 Internet Systems Consortium ("ISC") + +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +""" + +if __name__ == "__main__": + import rpki.myrpki + rpki.myrpki.main() diff --git a/rpkid/pubd.in b/rpkid/pubd.in new file mode 100644 index 00000000..32ee4196 --- /dev/null +++ b/rpkid/pubd.in @@ -0,0 +1,24 @@ +#!@PYTHON@ +# -*- Python -*- + +""" +$Id$ + +Copyright (C) 2010 Internet Systems Consortium ("ISC") + +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +""" + +if __name__ == "__main__": + import rpki.pubd + rpki.pubd.main() diff --git a/rpkid/rootd.in b/rpkid/rootd.in new file mode 100644 index 00000000..d5038d77 --- /dev/null +++ b/rpkid/rootd.in @@ -0,0 +1,24 @@ +#!@PYTHON@ +# -*- Python -*- + +""" +$Id$ + +Copyright (C) 2010 Internet Systems Consortium ("ISC") + +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +""" + +if __name__ == "__main__": + import rpki.rootd + rpki.rootd.main() diff --git a/rpkid/rpkid.in b/rpkid/rpkid.in new file mode 100644 index 00000000..45659539 --- /dev/null +++ b/rpkid/rpkid.in @@ -0,0 +1,24 @@ +#!@PYTHON@ +# -*- Python -*- + +""" +$Id$ + +Copyright (C) 2010 Internet Systems Consortium ("ISC") + +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +""" + +if __name__ == "__main__": + import rpki.rpkid + rpki.rpkid.main() diff --git a/rpkid/sql-setup.in b/rpkid/sql-setup.in new file mode 100644 index 00000000..081441aa --- /dev/null +++ b/rpkid/sql-setup.in @@ -0,0 +1,110 @@ +#!@PYTHON@ +# -*- Python -*- + +""" +Automated setup of all the pesky SQL stuff we need. Prompts for MySQL +root password, pulls other information from myrpki.conf. + +$Id$ + +Copyright (C) 2009--2010 Internet Systems Consortium ("ISC") + +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +""" + +from __future__ import with_statement + +import os, getopt, sys, time, rpki.config, getpass, warnings + +# Silence warning while loading MySQLdb in Python 2.6, sigh +if hasattr(warnings, "catch_warnings"): + with warnings.catch_warnings(): + warnings.simplefilter("ignore", DeprecationWarning) + import MySQLdb +else: + import MySQLdb + +import _mysql_exceptions + +warnings.simplefilter("error", _mysql_exceptions.Warning) + +schema_dir = os.path.normpath(sys.path[0]) + +def read_schema(filename): + """ + Convert an SQL file into a list of SQL statements. + """ + lines = [] + f = open(filename) + for line in f: + line = " ".join(line.split()) + if line and not line.startswith("--"): + lines.append(line) + f.close() + return [statement.strip() for statement in " ".join(lines).rstrip(";").split(";")] + +def sql_setup(name): + """ + Create a new SQL database and construct all its tables. + """ + database = cfg.get("sql-database", section = name) + username = cfg.get("sql-username", section = name) + password = cfg.get("sql-password", section = name) + schema = read_schema(os.path.join(schema_dir, "%s.sql" % name)) + + print "Creating database", database + cur = rootdb.cursor() + try: + cur.execute("DROP DATABASE IF EXISTS %s" % database) + except: + pass + cur.execute("CREATE DATABASE %s" % database) + cur.execute("GRANT ALL ON %s.* TO %s@localhost IDENTIFIED BY %%s" % (database, username), (password,)) + rootdb.commit() + + db = MySQLdb.connect(db = database, user = username, passwd = password) + cur = db.cursor() + for statement in schema: + if statement.upper().startswith("DROP TABLE"): + continue + if verbose: + print "+", statement + cur.execute(statement) + db.commit() + db.close() + +cfg_file = "myrpki.conf" + +verbose = False + +opts, argv = getopt.getopt(sys.argv[1:], "c:hv?", ["config=", "help", "verbose"]) +for o, a in opts: + if o in ("-h", "--help", "-?"): + print __doc__ + sys.exit(0) + if o in ("-v", "--verbose"): + verbose = True + if o in ("-c", "--config"): + cfg_file = a + +cfg = rpki.config.parser(cfg_file, "myrpki") + +rootdb = MySQLdb.connect(db = "mysql", user = "root", passwd = getpass.getpass("Please enter your MySQL root password: ")) + +sql_setup("irdbd") +sql_setup("rpkid") + +if cfg.getboolean("run_pubd", False): + sql_setup("pubd") + +rootdb.close() diff --git a/rpkid/start-servers.in b/rpkid/start-servers.in new file mode 100644 index 00000000..50301060 --- /dev/null +++ b/rpkid/start-servers.in @@ -0,0 +1,86 @@ +#!@PYTHON@ +# -*- Python -*- + +""" +Start servers, logging to files, looking at config file to figure out +which servers the user wants started. + +$Id$ + +Copyright (C) 2009--2010 Internet Systems Consortium ("ISC") + +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + +Portions copyright (C) 2007--2008 American Registry for Internet Numbers ("ARIN") + +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND ARIN DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL ARIN BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + +""" + +import subprocess, os, getopt, sys, time, rpki.config + +rpkid_dir = os.path.normpath(sys.path[0]) + +os.environ["TZ"] = "UTC" +time.tzset() + +cfg_file = "myrpki.conf" +debug = False +piddir = None + +opts, argv = getopt.getopt(sys.argv[1:], "c:dhp:?", ["config=", "debug" "help", "piddir="]) +for o, a in opts: + if o in ("-h", "--help", "-?"): + print __doc__ + sys.exit(0) + elif o in ("-c", "--config"): + cfg_file = a + elif o in ("-d", "--debug"): + debug = True + elif o in ("-p", "--piddir"): + piddir = a + +cfg = rpki.config.parser(cfg_file, "myrpki") + +def run(name): + cmd = (sys.executable, os.path.join(rpkid_dir, name + ".py"), "-c", cfg_file) + if debug: + proc = subprocess.Popen(cmd + ("-d",), stdout = open(name + ".log", "a"), stderr = subprocess.STDOUT) + else: + proc = subprocess.Popen(cmd) + if proc.poll() is None: + print "Started %r, pid %s" % (name, proc.pid) + if piddir is not None: + open(os.path.join(piddir, "%s.pid" % name), "w").write("%d\n" % proc.pid) + else: + print "Problem starting %r, pid %s" % (name, proc.pid) + +if cfg.getboolean("run_rpkid", False): + run("irdbd") + run("rpkid") + +if cfg.getboolean("run_pubd", False): + run("pubd") + +if cfg.getboolean("run_rootd", False): + run("rootd") |