Exemple #1
0
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
Exemple #2
0
    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
Exemple #3
0
    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
Exemple #4
0
    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
Exemple #5
0
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
Exemple #6
0
                        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)
Exemple #7
0
    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()
Exemple #8
0
    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()