From: Tony Mack Date: Thu, 5 Nov 2009 01:59:42 +0000 (+0000) Subject: initial checkin of component server script X-Git-Tag: sfa-0.9-6~53 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=7e4f4ea93e51d54e3cb46f6da430fcd0ed0c4cdf;p=sfa.git initial checkin of component server script --- diff --git a/sfacomponent/server/sfa-component-server.py b/sfacomponent/server/sfa-component-server.py new file mode 100755 index 00000000..07661f56 --- /dev/null +++ b/sfacomponent/server/sfa-component-server.py @@ -0,0 +1,89 @@ +#!/usr/bin/python +# +### $Id: sfa-compnent-server.py +### $URL: + +# This wrapper implements the SFA Component Interfaces on PLC. +# +# There are several items that need to be done before starting the wrapper +# server. +# +# (requirements coming soon) +## + +# TCP ports for the three servers +component_port=12348 + +import os, os.path +from optparse import OptionParser + +from sfacomponent.server.component import Component +from sfa.trust.trustedroot import TrustedRootList +from sfa.trust.certificate import Keypair, Certificate +from sfa.trust.hierarchy import Hierarchy +from sfa.util.config import Config + +# after http://www.erlenstar.demon.co.uk/unix/faq_2.html +def daemon(): + """Daemonize the current process.""" + if os.fork() != 0: os._exit(0) + os.setsid() + if os.fork() != 0: os._exit(0) + os.umask(0) + devnull = os.open(os.devnull, os.O_RDWR) + os.dup2(devnull, 0) + # xxx fixme - this is just to make sure that nothing gets stupidly lost - should use devnull + crashlog = os.open('/var/log/sfa.daemon', os.O_RDWR | os.O_APPEND | os.O_CREAT, 0644) + os.dup2(crashlog, 1) + os.dup2(crashlog, 2) + +def main(): + # xxx get rid of globals - name consistently CamelCase or under_score + global AuthHierarchy + global TrustedRoots + global component_port + + # Generate command line parser + parser = OptionParser(usage="sfa-component-server [options]") + parser.add_option("-v", "--verbose", dest="verbose", action="store_true", + help="verbose mode", default=False) + parser.add_option("-d", "--daemon", dest="daemon", action="store_true", + help="Run as daemon.", default=False) + (options, args) = parser.parse_args() + + hierarchy = Hierarchy() + path = hierarchy.basedir + key_file = os.path.join(path, "server.key") + cert_file = os.path.join(path, "server.cert") + + # XX TODO: Subject should be the node's hrn + subject = "component" + if (options.daemon): daemon() + + if (os.path.exists(key_file)) and (not os.path.exists(cert_file)): + # If private key exists and cert doesnt, recreate cert + key = Keypair(filename=key_file) + cert = Certificate(subject=subject) + cert.set_issuer(key=key, subject=subject) + cert.set_pubkey(key) + cert.sign() + cert.save_to_file(cert_file) + + elif (not os.path.exists(key_file)) or (not os.path.exists(cert_file)): + # if no key is specified, then make one up + key = Keypair(create=True) + key.save_to_file(key_file) + cert = Certificate(subject=subject) + cert.set_issuer(key=key, subject=subject) + cert.set_pubkey(key) + cert.sign() + cert.save_to_file(cert_file) + + AuthHierarchy = Hierarchy() + + TrustedRoots = TrustedRootList(Config().get_trustedroots_dir()) + component = Component("", component_port, key_file, cert_file) + component.start() + +if __name__ == "__main__": + main()