def get_dhcp_config(sysconf, iface): # Catch interfaces that are DHCP themselves if sysconf.EthernetDevices[iface]['type'] == 'dhcp': return {} config = sysconf.DHCP.get(iface, {}) # Determine myIp try: myIp = sysconf.EthernetDevices[iface]['ip'].split('/')[0] myNetmask = Utils.cidr2netmask(sysconf.EthernetDevices[iface]['ip'].split('/')[1]) except KeyError: myIp = '' myNetmask = '' data = { 'rangeStart' : config.get('rangeStart', "100"), 'rangeEnd' : config.get('rangeEnd', "220"), 'netmask' : config.get('netmask', myNetmask), 'netbios' : config.get('netbios', myIp), 'nameserver' : config.get('nameserver', myIp), 'gateway' : config.get('gateway', myIp), 'domain' : config.get('domain', sysconf.Domain), 'snomStart' : config.get('snomStart', '60'), 'snomEnd' : config.get('snomEnd', '80'), 'snomConfigAddr': config.get('snomConfigAddr', myIp + ':9682'), 'network' : config.get('network', '.'.join(myIp.split('.')[:3]) + ".0") } return data
def vlanBuilder(self, i, defn): iface = { 'ip': defn['ip'].split('/')[0], 'vnum': i.replace('vlan', ''), 'network': defn['network'].split('/')[0], 'netmask': Utils.cidr2netmask(defn['ip'].split('/')[-1]), 'interface': defn['interface'] } ifacedef = """auto vlan%(vnum)s iface vlan%(vnum)s inet static address %(ip)s netmask %(netmask)s network %(network)s vlan_raw_device %(interface)s """ % iface # check routes if defn.get('routes', None): for dest, gw in defn['routes']: if dest == 'default': ifacedef += ' gateway %s\n' % gw try: if defn.get('aliases', None): for alias in defn['aliases']: ifacedef += ' up ip addr add %s dev vlan%s || true\n' % ( alias, iface['vnum']) ifacedef += ' down ip addr del %s dev vlan%s || true\n' % ( alias, iface['vnum']) except: print "Failed to configure aliases for %s" % i ifacedef += "\n" return ifacedef
def vlanBuilder(self, i, defn): iface = { 'ip': defn['ip'].split('/')[0], 'vnum': i.replace('vlan',''), 'network': defn['network'].split('/')[0], 'netmask': Utils.cidr2netmask(defn['ip'].split('/')[-1]), 'interface': defn['interface'] } ifacedef = """auto vlan%(vnum)s iface vlan%(vnum)s inet static address %(ip)s netmask %(netmask)s network %(network)s vlan_raw_device %(interface)s\n\n""" % iface return ifacedef
def form_confDhcp(self, data): form = formal.Form() form.addField( 'winserv', formal.String(), label="Windows Server", description= "A windows server (if any) to delegate for WINS and Netbios") form.addField('dnsserver', formal.String(), label="DNS Server", description="DNS server") form.addField('network', formal.String(), label="Network address") form.addField('netmask', formal.String(), label="Subnet mask") form.addField('startip', formal.String(), label="Start IP") form.addField('endip', formal.String(), label="End IP") form.addField('gateway', formal.String(), label="Default gateway") config = self.sysconf.DHCP myIp = self.sysconf.EthernetDevices[ self.sysconf.LANPrimary]['ip'].split('/')[0] myNetmask = Utils.cidr2netmask(self.sysconf.EthernetDevices[ self.sysconf.LANPrimary]['ip'].split('/')[1]) rangeStart = config.get('rangeStart', "100") rangeEnd = config.get('rangeEnd', "220") netmask = config.get('netmask', myNetmask) netbios = config.get('netbios', myIp) nameserver = config.get('nameserver', myIp) router = config.get('gateway', myIp) myNet = config.get('network', '.'.join(myIp.split('.')[:3]) + ".0") form.data['startip'] = rangeStart form.data['endip'] = rangeEnd form.data['gateway'] = router form.data['netmask'] = netmask form.data['network'] = myNet form.data['winserv'] = netbios form.data['dnsserver'] = nameserver form.addAction(self.confDhcp) return form
def get_dhcp_config(sysconf, iface): config = sysconf.DHCP.get(iface, {}) # Determine myIp try: myIp = sysconf.EthernetDevices[iface]['ip'].split('/')[0] myNetmask = Utils.cidr2netmask( sysconf.EthernetDevices[iface]['ip'].split('/')[1]) except KeyError: myIp = '' myNetmask = '' data = { 'rangeStart': config.get('rangeStart', "100"), 'rangeEnd': config.get('rangeEnd', "220"), 'netmask': config.get('netmask', myNetmask), 'netbios': config.get('netbios', myIp), 'nameserver': config.get('nameserver', myIp), 'gateway': config.get('gateway', myIp), 'domain': config.get('domain', sysconf.Domain), 'network': config.get('network', '.'.join(myIp.split('.')[:3]) + ".0") } return data
uids = [username] else: uids.append(username) l = open('/usr/local/tcs/tums/radpool', 'wt') l.write('\n'.join(uids)) l.close() print "Framed-Protocol = PPP" print "Service-Type = Framed-User" print "Framed-Compression = Van-Jacobson-TCP-IP" print "Framed-IP-Address = 10.10.10.%d" % (index + 1) if conf.RADIUS.get('frameroutes', {}): if username in conf.RADIUS['frameroutes']: ip, cidr = conf.RADIUS['frameroutes'][username].split( '/') mask = Utils.cidr2netmask(int(cidr)) print "Framed-Route = \"%s %s 1\"" % (ip, mask) print "Fall-Through = Yes" sys.exit(0) sys.exit(255) else: print "Invalid parameters" sys.exit(255) try: db = Database.DatabaseBroker('mysql://*****:*****@localhost/exilog') squidDb = Database.MySAR('mysql://*****:*****@localhost/mysar') # Make the directory if it doesn't exist.. if not os.path.exists('/usr/local/tcs/tums/uaxeldb/'): os.mkdir('/usr/local/tcs/tums/uaxeldb') os.chmod('/usr/local/tcs/tums/uaxeldb', 0777)
def writeConfig(self, *a): lans = Utils.getLanNetworks(config) extramain = config.DHCP.get('main','') ips = Utils.getLanIPs(config) myIp = ips[0] rev = '.'.join([i for i in reversed(myIp.split('.')[:3])]) ifaces = [] dhcpconf = """# DHCPD config generated by TUMS Configurator ddns-update-style interim; default-lease-time 21600; max-lease-time 21600; allow booting; allow bootp; authoritative; log-facility local7; zone %(domain)s. { primary 127.0.0.1; } zone %(rev)s.in-addr.arpa. { primary 127.0.0.1; } option local-pac-server code 252 = text; %(extramain)s """ % { 'extramain': extramain, 'domain': config.Domain, 'rev': rev } n = 0 for k,v in lans.items(): myNet = v myIp = config.EthernetDevices[k].get('ip', '/').split('/')[0] dhcpConf = config.DHCP.get(k, {}) if not myIp: # No IP set for this interface (is DHCP itself) continue if not config.EthernetDevices[k].get('dhcpserver'): # Not set to do DHCP continue ifaces.append(k) statics = "" for ip, hostmac in config.DHCP.get('leases',{}).items(): if Utils.matchIP(myNet, ip): # make sure the IP is in this network host, mac = hostmac statics += """ host %s { fixed-address %s; hardware ethernet %s; }\n""" % (host, ip, mac) myNetmask = Utils.cidr2netmask(myNet.split('/')[1]) rangeStart = dhcpConf.get('rangeStart', "100") rangeEnd = dhcpConf.get('rangeEnd', "240") netmask = dhcpConf.get('netmask', myNetmask) netbios = dhcpConf.get('netbios', myIp) nameserver = dhcpConf.get('nameserver', myIp) router = dhcpConf.get('gateway', myIp) myNet = dhcpConf.get('network', Utils.getNetwork(config.EthernetDevices[k]['ip'])) domain = dhcpConf.get('domain', config.Domain) if not '/' in myNet: # AAAAAAAAAAAARGH GOD DAMN DIE IN HELL PAUL VIXIE cdr = Utils.netmask2cidr(netmask) myNet = "%s/%s" % (myNet, cdr) bcast = Utils.getBroadcast(myNet) else: bcast = Utils.getBroadcast(myNet) # allow custom configuration options custom = dhcpConf.get('custom', '') netL = '.'.join(myNet.split('.')[:3]) if not ("." in rangeStart): rangeStart = "%s.%s" % (netL, rangeStart) rangeEnd = "%s.%s" % (netL, rangeEnd) defn = { 'netname': 'DHCP%s' % k.upper(), 'myIp': myIp, 'pacIp': myIp.replace('.', '-'), 'domain': domain, 'network': netL, 'networkF': myNet.split('/')[0], 'static': statics, 'custom': custom, 'netmask': netmask, 'rangeStart': rangeStart, 'rangeEnd': rangeEnd, 'myNetbios': netbios, 'myDns': nameserver, 'myRouter': router, 'extramain': extramain, 'bcast': bcast } dhcpnet = """ shared-network %(netname)s { use-host-decl-names on; option domain-name "%(domain)s"; option domain-name-servers %(myDns)s; option netbios-name-servers %(myNetbios)s; option netbios-node-type 8; option local-pac-server "http://%(myIp)s/wpad-%(pacIp)s.pac"; option ntp-servers %(myIp)s; option time-servers %(myIp)s; option log-servers %(myIp)s; option font-servers %(myIp)s; option pop-server %(myIp)s; option smtp-server %(myIp)s; option x-display-manager %(myIp)s; subnet %(networkF)s netmask %(netmask)s { range dynamic-bootp %(rangeStart)s %(rangeEnd)s; option subnet-mask %(netmask)s; option broadcast-address %(bcast)s; option routers %(myRouter)s; } %(static)s %(custom)s }\n""" % defn dhcpconf += dhcpnet # Check for debianism (goes in /etc/dhcp3) f = open('/etc/dhcp3/dhcpd.conf', 'wt') f.write(dhcpconf) f.close() f = open('/etc/default/dhcp3-server', 'wt') f.write('# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?\n') f.write('# Separate multiple interfaces with spaces, e.g. "eth0 eth1".\n') f.write('INTERFACES="%s"\n' % ' '.join(ifaces)) f.close()
def writeConfig(self, *a): myIp = config.EthernetDevices[config.LANPrimary]['ip'].split('/')[0] myNetmask = Utils.cidr2netmask( config.EthernetDevices[config.LANPrimary]['ip'].split('/')[1]) rev = '.'.join([i for i in reversed(myIp.split('.')[:3])]) statics = "" for ip, hostmac in config.DHCP.get('leases', {}).items(): host, mac = hostmac statics += """ host %s { fixed-address %s; hardware ethernet %s; }\n""" % (host, ip, mac) # allow custom configuration options custom = "" extramain = "" rangeStart = config.DHCP.get('rangeStart', "100") rangeEnd = config.DHCP.get('rangeEnd', "220") netmask = config.DHCP.get('netmask', myNetmask) netbios = config.DHCP.get('netbios', myIp) nameserver = config.DHCP.get('nameserver', myIp) router = config.DHCP.get('gateway', myIp) myNet = config.DHCP.get('network', '.'.join(myIp.split('.')[:3]) + ".0") if config.DHCP.get('custom', None): custom = config.DHCP['custom'] if config.DHCP.get('main', None): extramain = config.DHCP['main'] sharenets = "" if config.DHCP.get('sharenets', False): for i, defin in config.DHCP['sharenets'].items(): network = config.EthernetDevices[i]['network'].split('/')[0] cidr = config.EthernetDevices[i]['network'].split('/')[1] opts = { 'network': '.'.join(network.split('.')[:3]), 'domain': defin['domain'], 'netmask': Utils.cidr2netmask(cidr), 'ip': config.EthernetDevices[i]['ip'].split('/')[0], 'netname': i.upper() } sharenets += """\nshared-network NET_%(netname)s { option domain-name "%(domain)s"; subnet %(network)s.0 netmask %(netmask)s { range %(network)s.10 %(network)s.253; option routers %(ip)s; option domain-name-servers %(ip)s;\n }\n}\n\n""" % opts defn = { 'myIp': myIp, 'rev': rev, 'domain': config.Domain, 'network': '.'.join(myNet.split('.')[:3]), 'static': statics, 'custom': custom, 'netmask': netmask, 'rangeStart': rangeStart, 'rangeEnd': rangeEnd, 'myNetbios': netbios, 'myDns': nameserver, 'myRouter': router, 'sharenets': sharenets, 'extramain': extramain, 'ldapbase': config.LDAPBase, } dhcpconf = """# DHCPD config generated by TUMS Configurator ddns-update-style interim; default-lease-time 600; max-lease-time 7200; allow booting; allow bootp; authoritative; log-facility local7; zone %(domain)s. { primary 127.0.0.1; } zone %(rev)s.in-addr.arpa. { primary 127.0.0.1; } %(extramain)s shared-network %(ldapbase)s { use-host-decl-names on; option domain-name "%(domain)s"; option domain-name-servers %(myDns)s; option netbios-name-servers %(myNetbios)s; option netbios-node-type 8; option ntp-servers %(myIp)s; option time-servers %(myIp)s; option log-servers %(myIp)s; option font-servers %(myIp)s; option pop-server %(myIp)s; option smtp-server %(myIp)s; option x-display-manager %(myIp)s; subnet %(network)s.0 netmask %(netmask)s { range dynamic-bootp %(network)s.%(rangeStart)s %(network)s.%(rangeEnd)s; option subnet-mask %(netmask)s; option broadcast-address %(network)s.255; option routers %(myRouter)s; } %(static)s %(custom)s } %(sharenets)s """ % defn # Check for debianism (goes in /etc/dhcp3) if os.path.exists('/etc/debian_version'): f = open('/etc/dhcp3/dhcpd.conf', 'wt') else: f = open('/etc/dhcp/dhcpd.conf', 'wt') f.write(dhcpconf) f.close()