# mini standalone http server die spullen uitdeelt enigsinds zoals de node # factory ze wenst op te halen # # $ python server.py 8000 # # start 'em op poort 8000 import os import BaseHTTPServer from common import * import dhcpd import named import rcnodelocal import resolv import snmpd import sshkeys import dns import penconf import crontab root = xml_to_obj_hierarchy("nodes.xml") ready_nodes_dtd_hierarchy(root) # generators die als parameter een node nemen node_generators = { "dhcpd.conf": dhcpd.gen_dhcpd_conf, "named.conf": named.gen_named_conf, "rc.node.local": rcnodelocal.gen_rcnodelocal, "resolv.conf": resolv.gen_resolv_conf, "snmpd.local.conf": snmpd.gen_snmpd_local_conf, "pen.sh": lambda n: penconf.genconfig(root, n), "crontab.root": crontab.gen_crontab, } def filelist(root = None): return "\n" + ' '.join(node_generators.keys() + general_generators.keys()) # generators die als parameter de root ("nodes") nemen general_generators = { "authorized_keys": sshkeys.rsakeys_hard, "authorized_keys2": sshkeys.dsakeys_hard, "wleiden.net": dns.wleiden_net, "16.172.in-addr.arpa": dns.interlink_zone, #"authorized_keys": sshkeys.rsakeys_from_xml, #"authorized_keys2": sshkeys.dsakeys_from_xml, "filelist": filelist } # vul de lijst met generators aan met voor elke zone een generator die het # reverse DNS spul genereert voor die zone for i in range(17, 32): general_generators["%d.172.in-addr.arpa" % i] = lambda r, i = i: dns.reverse_zone(r, i) class RequestHandler(BaseHTTPServer.BaseHTTPRequestHandler): def do_GET(self): clear_header_cache() self.path = self.path[1:] if general_generators.has_key(self.path): self.send_response(200) self.wfile.write("\n" + general_generators[self.path](root)) return # kijk of er parameters zijn gegeven en splits die af in # een dict t = self.path.split('?') self.path = t[0] params = {} if len(t) > 1: for p in t[1].split('&'): t = p.split('=') params[t[0]] = t[1] # nu wat validatie if not node_generators.has_key(self.path): self.send_response(404, "Unknown file") return if not params.has_key('node'): self.send_response(404, "Please specify node") return try: node = findnode(root, params['node']) except: self.send_response(404, "Unknown node") return self.send_response(200) self.wfile.write("\n" + node_generators[self.path](node)) if len(sys.argv) > 1: server_address = ('', int(sys.argv[1])) else: server_address = ('', 8000) BaseHTTPServer.HTTPServer(server_address, RequestHandler).serve_forever()