Exemplo n.º 1
0
def get_dhcpd_conf(request):
    # noinspection PyUnusedLocal
    request = request
    try:
        fqdn = hostname_from_principal(request.user.username)
    except ValueError:
        return HttpResponse(status=401, content='Unable to get configuration: invalid username')
    if Service.objects.filter(fqdn=fqdn, scheme='dchp')[0:1].count() == 0:
        hosts = []
    else:
        hosts = Host.objects.all()

    def get_ip_or_none(scheme):
        values = list(Service.objects.filter(scheme=scheme)[0:1])
        if not values:
            return None
        return Record.local_resolve(values[0].fqdn) or values[0].hostname

    def get_ip_list(scheme, protocol='udp'):
        values = list(Service.objects.filter(scheme=scheme, protocol=protocol))
        return [Record.local_resolve(x.fqdn) or x.hostname for x in values]

    template_values = {
        'penates_subnets': get_subnets(),
        'penates_domain': settings.PENATES_DOMAIN,
        'admin_prefix': settings.PDNS_ADMIN_PREFIX,
        'infra_prefix': settings.PDNS_INFRA_PREFIX,
        'hosts': hosts,
        'tftp': get_ip_or_none('tftp'),
        'dns_list': get_ip_list('dns'),
        'ntp': get_ip_or_none('ntp'),
    }
    return render_to_response('dhcpd/dhcpd.conf', template_values, status=200, content_type='text/plain')
Exemplo n.º 2
0
 def ensure_record(self, source, target, unique=False, override_reverse=True):
     """
     :param override_reverse:
     :param source: orignal name (fqdn of the machine, or IP address)
     :param target: DNS alias to create
     :param unique: if True, remove any previous
     :rtype: :class:`penatesserver.powerdns.models.Domain`
     """
     record_name, sep, domain_name = target.partition('.')
     if sep != '.' or domain_name != self.name:
         return False
     if source == target:
         return True
     try:
         add = netaddr.IPAddress(source)
         record_type = 'A' if add.version == 4 else 'AAAA'
     except netaddr.core.AddrFormatError:
         record_type = 'CNAME'
         add = None
     if not unique and Record.objects.filter(domain=self, name=target, type=record_type, content=source).count() > 0:
         return True
     if record_type == 'A' or record_type == 'AAAA':
         for subnet_obj in get_subnets():
             if add.version != subnet_obj.network.version or add not in subnet_obj.network:
                 continue
             reverse_record_name, sep, reverse_domain_name = add.reverse_dns.partition('.')
             reverse_domain_name = reverse_domain_name[:-1]
             reverse_target = add.reverse_dns[:-1]
             reverse_domain = self.ensure_subdomain(reverse_domain_name)
             query = Record.objects.filter(domain=reverse_domain, name=reverse_target, type='PTR')
             if (override_reverse and query.update(content=target) == 0) or \
                     (not override_reverse and query.count() == 0):
                 Record(domain=reverse_domain, name=reverse_target, type='PTR', content=target, ttl=3600).save()
                 assert isinstance(reverse_domain, Domain)
                 reverse_domain.update_soa()
     if Record.objects.filter(domain=self, name=target, type__in=['A', 'AAAA', 'CNAME'])\
             .update(type=record_type, content=source, ttl=3600) == 0:
         Record(domain=self, name=target, type=record_type, content=source, ttl=3600).save()
     return True
Exemplo n.º 3
0
 def ensure_record(self, source, target, unique=False, override_reverse=True):
     """
     :param override_reverse:
     :param source: orignal name (fqdn of the machine, or IP address)
     :param target: DNS alias to create
     :param unique: if True, remove any previous
     :rtype: :class:`penatesserver.powerdns.models.Domain`
     """
     record_name, sep, domain_name = target.partition('.')
     if sep != '.' or domain_name != self.name:
         return False
     if source == target:
         return True
     try:
         add = netaddr.IPAddress(source)
         record_type = 'A' if add.version == 4 else 'AAAA'
     except netaddr.core.AddrFormatError:
         record_type = 'CNAME'
         add = None
     if not unique and Record.objects.filter(domain=self, name=target, type=record_type, content=source).count() > 0:
         return True
     if record_type == 'A' or record_type == 'AAAA':
         for subnet_obj in get_subnets():
             if add.version != subnet_obj.network.version or add not in subnet_obj.network:
                 continue
             reverse_record_name, sep, reverse_domain_name = add.reverse_dns.partition('.')
             reverse_domain_name = reverse_domain_name[:-1]
             reverse_target = add.reverse_dns[:-1]
             reverse_domain = self.ensure_subdomain(reverse_domain_name)
             query = Record.objects.filter(domain=reverse_domain, name=reverse_target, type='PTR')
             if (override_reverse and query.update(content=target) == 0) or \
                     (not override_reverse and query.count() == 0):
                 Record(domain=reverse_domain, name=reverse_target, type='PTR', content=target, ttl=3600).save()
                 assert isinstance(reverse_domain, Domain)
                 reverse_domain.update_soa()
     if Record.objects.filter(domain=self, name=target, type__in=['A', 'AAAA', 'CNAME'])\
             .update(type=record_type, content=source, ttl=3600) == 0:
         Record(domain=self, name=target, type=record_type, content=source, ttl=3600).save()
     return True
Exemplo n.º 4
0
def get_dhcpd_conf(request):
    def get_ip_or_none(scheme):
        values = list(Service.objects.filter(scheme=scheme)[0:1])
        if not values:
            return None
        return Record.local_resolve(values[0].fqdn) or values[0].hostname

    def get_ip_list(scheme):
        values = list(Service.objects.filter(scheme=scheme))
        return [Record.local_resolve(x.fqdn) or x.hostname for x in values]

    template_values = {
        'penates_subnets': get_subnets(),
        'penates_domain': settings.PENATES_DOMAIN,
        'admin_prefix': settings.PDNS_ADMIN_PREFIX,
        'infra_prefix': settings.PDNS_INFRA_PREFIX,
        'hosts': Host.objects.all(),
        'tftp': get_ip_or_none('tftp'),
        'dns_list': get_ip_list('dns'),
        'ntp': get_ip_or_none('ntp'),
    }
    return render_to_response('dhcpd/dhcpd.conf', template_values, status=200, content_type='text/plain')
Exemplo n.º 5
0
def get_dhcpd_conf(request):
    # noinspection PyUnusedLocal
    request = request
    try:
        fqdn = hostname_from_principal(request.user.username)
    except ValueError:
        return HttpResponse(
            status=401,
            content='Unable to get configuration: invalid username')
    if Service.objects.filter(fqdn=fqdn, scheme='dchp')[0:1].count() == 0:
        hosts = []
    else:
        hosts = Host.objects.all()

    def get_ip_or_none(scheme):
        values = list(Service.objects.filter(scheme=scheme)[0:1])
        if not values:
            return None
        return Record.local_resolve(values[0].fqdn) or values[0].hostname

    def get_ip_list(scheme, protocol='udp'):
        values = list(Service.objects.filter(scheme=scheme, protocol=protocol))
        return [Record.local_resolve(x.fqdn) or x.hostname for x in values]

    template_values = {
        'penates_subnets': get_subnets(),
        'penates_domain': settings.PENATES_DOMAIN,
        'admin_prefix': settings.PDNS_ADMIN_PREFIX,
        'infra_prefix': settings.PDNS_INFRA_PREFIX,
        'hosts': hosts,
        'tftp': get_ip_or_none('tftp'),
        'dns_list': get_ip_list('dns'),
        'ntp': get_ip_or_none('ntp'),
    }
    return render_to_response('dhcpd/dhcpd.conf',
                              template_values,
                              status=200,
                              content_type='text/plain')