Exemple #1
0
 def reassign(objs):
     for obj in objs:
         if ip_type == '6':
             nibz = nibbilize(obj.ip_str)
             revname = ip_to_domain_name(nibz, ip_type='6')
         else:
             revname = ip_to_domain_name(obj.ip_str, ip_type='4')
         correct_reverse_domain = name_to_domain(revname)
         if correct_reverse_domain != obj.reverse_domain:
             # TODO, is this needed? The save() function (actually the
             # clean_ip function) will assign the correct reverse domain.
             obj.reverse_domain = correct_reverse_domain
             obj.save()
Exemple #2
0
    def clean_ip(self, update_reverse_domain=True):
        """
        The clean method in Ip is different from the rest. It needs
        to be called with the update_reverse_domain flag. Sometimes we
        need to not update the reverse domain of an IP (i.e. when we are
        deleting a reverse_domain).
        """
        # TODO, it's a f*****g hack. Car babies.
        validate_ip_type(self.ip_type)
        self._validate_ip_str()
        if self.ip_type == '4':
            try:
                ip = ipaddr.IPv4Address(self.ip_str)
                self.ip_str = str(ip)
            except ipaddr.AddressValueError, e:
                raise ValidationError("Invalid Ip address {0}".
                                      format(self.ip_str))

            if update_reverse_domain:
                # Resolve IP to domain name.
                no_match = False
                try:
                    self.reverse_domain = (name_to_domain(
                                           ip_to_domain_name(self.ip_str,
                                                             ip_type='4')))
                except ValueError:
                    no_match = True

                if (no_match or self.reverse_domain is None or
                    self.reverse_domain.name in ('arpa', 'in-addr.arpa',
                                                 'ipv6.arpa')):
                    raise ValidationError("No reverse Domain found for {0} "
                                          .format(self.ip_str))
            self.ip_upper = 0
            self.ip_lower = int(ip)
Exemple #3
0
def create_domain(name, ip_type=None, delegated=False):
    if ip_type is None:
        ip_type = '4'
    if name in ('arpa', 'in-addr.arpa', 'ipv6.arpa'):
        pass
    else:
        name = ip_to_domain_name(name, ip_type=ip_type)
    d = Domain.objects.get_or_create(name=name, delegated=delegated)
    return d
Exemple #4
0
def create_domain(name, ip_type=None, delegated=False):
    if ip_type is None:
        ip_type = '4'
    if name in ('arpa', 'in-addr.arpa', 'ipv6.arpa'):
        pass
    else:
        name = ip_to_domain_name(name, ip_type=ip_type)
    d = Domain.objects.get_or_create(name=name, delegated=delegated)
    return d
Exemple #5
0
 def update_reverse_domain(self):
     # We are assuming that self.clean_ip has been called already
     rvname = nibbilize(self.ip_str) if self.ip_type == '6' else self.ip_str
     rvname = ip_to_domain_name(rvname, ip_type=self.ip_type)
     self.reverse_domain = name_to_domain(rvname)
     if (self.reverse_domain is None or self.reverse_domain.name in
             ('arpa', 'in-addr.arpa', 'ip6.arpa')):
         raise ValidationError(
             "No reverse Domain found for {0} ".format(self.ip_str)
         )
Exemple #6
0
 def create_domain(self, name, ip_type=None, delegated=False):
     if ip_type is None:
         ip_type = '4'
     if name in ('arpa', 'in-addr.arpa', 'ipv6.arpa'):
         pass
     else:
         name = ip_to_domain_name(name, ip_type=ip_type)
     d = Domain(name=name, delegated=delegated)
     d.clean()
     self.assertTrue(d.is_reverse)
     return d
Exemple #7
0
 def create_domain(self, name, ip_type=None, delegated=False):
     if ip_type is None:
         ip_type = "4"
     if name in ("arpa", "in-addr.arpa", "ipv6.arpa"):
         pass
     else:
         name = ip_to_domain_name(name, ip_type=ip_type)
     d = Domain(name=name, delegated=delegated)
     d.clean()
     self.assertTrue(d.is_reverse)
     return d
Exemple #8
0
def analyse_svn(forward, reverse):

    # forward_prime
    forward_p = set()
    for site, values in forward.iteritems():
        # Transform foward to look like reverse so we can use sets. Nifty
        # python sets are nifty.
        rzone, records = values
        for name, ip in records:
            if not ip.startswith('10'):
                continue
            if name.find('unused') > -1:
                # Don't care
                continue
            if name.find('sjc1') > -1:
                # Don't care
                continue
            dnsip = ip_to_domain_name(ip)
            forward_p.add((dnsip, name))

    # Make reverse_p
    reverse_p = set()
    for site, site_data in reverse.iteritems():
        site_path, values = site_data
        rzone, records = values
        for dnsip, name in records:
            if not dns2ip_form(dnsip).startswith('10'):
                continue
            if name.find('unused') > -1:
                # Don't care
                continue
            if name.find('sjc1') > -1:
                # Don't care
                continue
            reverse_p.add((dnsip, name))

    print(
        "PTR records in sysadmins/dnsconfig/ip-addr/ with no matching A "
        "record in sysadmins/dnsconfig/zones/mozilla.com")
    for dnsip, name in reverse_p.difference(forward_p):
        template = "{dnsip:50} {rclass:10} {rtype:15} {name:7}"
        info = {'dnsip': dnsip, 'rclass': "IN", 'rtype': 'PTR', 'name': name}
        print template.format(**info)

    print(
        "A records in sysadmins/dnsconfig/zones/mozilla.com with no "
        "matching PTR record in sysadmins/dnsconfig/ip-addr/")
    for dnsip, name in forward_p.difference(reverse_p):
        address = dns2ip_form(dnsip)
        template = "{name:50} {rclass:10} {rtype:15} {address:7}"
        info = {'name': name, 'rclass': "IN", 'rtype': 'A', 'address': address}
        print template.format(**info)
Exemple #9
0
def ensure_rev_domain(name):
    parts = name.split('.')
    domain_name = ''
    for i in range(len(parts)):
        domain_name = domain_name + '.' + parts[i]
        domain_name = domain_name.strip('.')
        rev_name = ip_to_domain_name(domain_name, ip_type='4')
        domain, created = Domain.objects.get_or_create(name=rev_name)
        if domain.master_domain and domain.master_domain.soa:
            domain.soa = domain.master_domain.soa
            domain.save()

    return domain
Exemple #10
0
def analyse_svn(forward, reverse):

    # forward_prime
    forward_p = set()
    for site, values in forward.iteritems():
        # Transform foward to look like reverse so we can use sets. Nifty
        # python sets are nifty.
        rzone, records = values
        for name, ip in records:
            if not ip.startswith('10'):
                continue
            if name.find('unused') > -1:
                # Don't care
                continue
            if name.find('sjc1') > -1:
                # Don't care
                continue
            dnsip = ip_to_domain_name(ip)
            forward_p.add((dnsip, name))

    # Make reverse_p
    reverse_p = set()
    for site, site_data in reverse.iteritems():
        site_path, values = site_data
        rzone, records = values
        for dnsip, name in records:
            if not dns2ip_form(dnsip).startswith('10'):
                continue
            if name.find('unused') > -1:
                # Don't care
                continue
            if name.find('sjc1') > -1:
                # Don't care
                continue
            reverse_p.add((dnsip, name))

    print ("PTR records in sysadmins/dnsconfig/ip-addr/ with no matching A "
           "record in sysadmins/dnsconfig/zones/mozilla.com")
    for dnsip, name in reverse_p.difference(forward_p):
        template = "{dnsip:50} {rclass:10} {rtype:15} {name:7}"
        info = {'dnsip': dnsip, 'rclass': "IN", 'rtype': 'PTR', 'name': name}
        print template.format(**info)

    print ("A records in sysadmins/dnsconfig/zones/mozilla.com with no "
           "matching PTR record in sysadmins/dnsconfig/ip-addr/")
    for dnsip, name in forward_p.difference(reverse_p):
        address = dns2ip_form(dnsip)
        template = "{name:50} {rclass:10} {rtype:15} {address:7}"
        info = {'name': name, 'rclass': "IN", 'rtype': 'A', 'address': address}
        print template.format(**info)
Exemple #11
0
def ensure_rev_domain(name):
    parts = name.split('.')
    domain_name = ''
    for i in range(len(parts)):
        domain_name = domain_name + '.' + parts[i]
        domain_name = domain_name.strip('.')
        rev_name = ip_to_domain_name(domain_name, ip_type='4')
        domain, created = Domain.objects.get_or_create(name=
                                                       rev_name)
        if domain.master_domain and domain.master_domain.soa:
            domain.soa = domain.master_domain.soa
            domain.save()

    return domain
Exemple #12
0
def reassign_reverse_ptrs(reverse_domain_1, reverse_domain_2, ip_type):
    """There are some formalities that need to happen when a reverse
    domain is added and deleted. For example, when adding say we had the
    ip address 128.193.4.0 and it had the reverse_domain 128.193. If we
    add the reverse_domain 128.193.4, our 128.193.4.0 no longer belongs
    to the 128.193 domain. We need to re-asign the ip to it's correct
    reverse domain.

    :param reverse_domain_1: The domain which could possible have
        addresses added to it.

    :type reverse_domain_1: str

    :param reverse_domain_2: The domain that has ip's which might not
        belong to it anymore.

    :type reverse_domain_2: str
    """

    if reverse_domain_2 is None or ip_type is None:
        return
    ptrs = reverse_domain_2.ptr_set.iterator()
    #intrs = reverse_domain_2.staticinterface_set.iterator()
    #TODO do the intr case
    for ptr in ptrs:
        if ip_type == '6':
            nibz = nibbilize(ptr.ip_str)
            revname = ip_to_domain_name(nibz, ip_type='6')
        else:
            revname = ip_to_domain_name(ptr.ip_str, ip_type='4')
        correct_reverse_domain = name_to_domain(revname)
        if correct_reverse_domain != ptr.reverse_domain:
            # TODO, is this needed? The save() function (actually the
            # clean_ip function) will assign the correct reverse domain.
            ptr.reverse_domain = correct_reverse_domain
            ptr.save()
Exemple #13
0
def reassign_reverse_ptrs(reverse_domain_1, reverse_domain_2, ip_type):
    """There are some formalities that need to happen when a reverse
    domain is added and deleted. For example, when adding say we had the
    ip address 128.193.4.0 and it had the reverse_domain 128.193. If we
    add the reverse_domain 128.193.4, our 128.193.4.0 no longer belongs
    to the 128.193 domain. We need to re-asign the ip to it's correct
    reverse domain.

    :param reverse_domain_1: The domain which could possible have
        addresses added to it.

    :type reverse_domain_1: str

    :param reverse_domain_2: The domain that has ip's which might not
        belong to it anymore.

    :type reverse_domain_2: str
    """

    if reverse_domain_2 is None or ip_type is None:
        return
    ptrs = reverse_domain_2.ptr_set.iterator()
    #intrs = reverse_domain_2.staticinterface_set.iterator()
    #TODO do the intr case
    for ptr in ptrs:
        if ip_type == '6':
            nibz = nibbilize(ptr.ip_str)
            revname = ip_to_domain_name(nibz, ip_type='6')
        else:
            revname = ip_to_domain_name(ptr.ip_str, ip_type='4')
        correct_reverse_domain = name_to_domain(revname)
        if correct_reverse_domain != ptr.reverse_domain:
            # TODO, is this needed? The save() function (actually the
            # clean_ip function) will assign the correct reverse domain.
            ptr.reverse_domain = correct_reverse_domain
            ptr.save()
Exemple #14
0
def build_reverse(sites_to_build, inv_reverse, rev_svn_zones):
    final_records = {}
    for network, interfaces in inv_reverse.items():
        network_path, svn_entries = rev_svn_zones[network]
        network_path, inv_entries = final_records.setdefault(network,
                                                             (network_path, set()))
        # TODO, rename inv_entries to something more descriptive.
        for intr in interfaces:
            name = intr.hostname + "."
            for ip in intr.ips:
                dnsip = ip_to_domain_name(ip)
                if (dnsip, name) in svn_entries:
                    log("System {0} (interface: {1}, {2}) has "
                        "conflict".format(intr.system, dnsip, name), INFO)
                else:
                    inv_entries.add((dnsip, name))

    log("=" * 10 + " Final DNS data", BUILD)
    for network, network_data in final_records.items():
        network_path, records = network_data
        # Inv entries are in (<'name'>, <'ip'>) form
        generate_reverse_inventory_data_file(network, records, network_path)
Exemple #15
0
def build_reverse(sites_to_build, inv_reverse, rev_svn_zones):
    final_records = {}
    for network, interfaces in inv_reverse.items():
        network_path, svn_entries = rev_svn_zones[network]
        network_path, inv_entries = final_records.setdefault(network,
                                                             (network_path, set()))
        # TODO, rename inv_entries to something more descriptive.
        for intr in interfaces:
            name = intr.hostname + "."
            for ip in intr.ips:
                dnsip = ip_to_domain_name(ip)
                if (dnsip, name) in svn_entries:
                    log("System {0} (interface: {1}, {2}) has "
                        "conflict".format(intr.system, dnsip, name), INFO)
                else:
                    inv_entries.add((dnsip, name))

    log("=" * 10 + " Final DNS data", BUILD)
    for network, network_data in final_records.items():
        network_path, records = network_data
        # Inv entries are in (<'name'>, <'ip'>) form
        generate_reverse_inventory_data_file(network, records, network_path)
Exemple #16
0
def boot_strap_ipv6_reverse_domain(ip, soa=None):
    """
    This function is here to help create IPv6 reverse domains.

    .. note::
        Every nibble in the reverse domain should not exists for this
        function to exit successfully.


    :param ip: The ip address in nibble format
    :type ip: str
    :raises: ReverseDomainNotFoundError
    """
    validate_reverse_name(ip, '6')

    for i in xrange(1, len(ip) + 1, 2):
        cur_reverse_domain = ip[:i]
        domain_name = ip_to_domain_name(cur_reverse_domain, ip_type='6')
        reverse_domain = Domain(name=domain_name)
        reverse_domain.soa = soa
        reverse_domain.save()
    return reverse_domain
Exemple #17
0
def boot_strap_ipv6_reverse_domain(ip, soa=None):
    """
    This function is here to help create IPv6 reverse domains.

    .. note::
        Every nibble in the reverse domain should not exists for this
        function to exit successfully.


    :param ip: The ip address in nibble format
    :type ip: str
    :raises: ReverseDomainNotFoundError
    """
    validate_reverse_name(ip, '6')

    for i in xrange(1, len(ip) + 1, 2):
        cur_reverse_domain = ip[:i]
        domain_name = ip_to_domain_name(cur_reverse_domain, ip_type='6')
        reverse_domain = Domain(name=domain_name)
        reverse_domain.soa = soa
        reverse_domain.save()
    return reverse_domain
Exemple #18
0
def populate_reverse_dns(rev_svn_zones, views=None):
    arpa = create_domain(name='arpa')
    i_arpa = create_domain(name='in-addr.arpa')
    i6_arpa = create_domain(name='ipv6.arpa')

    for site, data in rev_svn_zones.iteritems():
        site_path, more_data = data
        zone, records = more_data
        print "-" * 15 + " " + site

        for (name, ttl, rdata) in zone.iterate_rdatas('SOA'):
            print str(name) + " SOA " + str(rdata)
            exists = SOA.objects.filter(minimum=rdata.minimum,
                                        contact=rdata.rname.to_text(
                                        ).strip('.'),
                                        primary=rdata.mname.to_text(
                                        ).strip('.'),
                                        comment="SOA for {0}.in-addr.arpa".format(
                                        '.'.join(reversed(site.split('.')))))
            if exists:
                soa = exists[0]
            else:
                soa = SOA(serial=rdata.serial, minimum=rdata.minimum,
                          contact=rdata.rname.to_text().strip('.'),
                          primary=rdata.mname.to_text().strip('.'),
                          comment="SOA for {0}.in-addr.arpa".format(
                          '.'.join(reversed(site.split('.')))))
                soa.clean()
                soa.save()
            name = name.to_text().replace('.IN-ADDR.ARPA.', '')
            domain_split = list(reversed(name.split('.')))
            for i in range(len(domain_split)):
                domain_name = domain_split[:i + 1]
                rev_name = ip_to_domain_name(
                    '.'.join(domain_name), ip_type='4')
                base_domain, created = Domain.objects.get_or_create(
                    name=rev_name)

            #null_all_soas(base_domain)
            base_domain.soa = soa
            base_domain.save()
            #set_all_soas(base_domain, soa)

        for (name, ttl, rdata) in zone.iterate_rdatas('NS'):
            name = name.to_text().strip('.')
            name = name.replace('.IN-ADDR.ARPA', '')
            name = name.replace('.in-addr.arpa', '')
            print str(name) + " NS " + str(rdata)
            domain_name = '.'.join(list(reversed(name.split('.'))))
            domain = ensure_rev_domain(domain_name)
            ns, _ = Nameserver.objects.get_or_create(domain=domain,
                                                     server=rdata.target.to_text().strip('.'))
            if views:
                for view in views:
                    ns.views.add(view)
                    ns.save()
        for (name, ttl, rdata) in zone.iterate_rdatas('PTR'):
            ip_str = name.to_text().strip('.')
            ip_str = ip_str.replace('.IN-ADDR.ARPA', '')
            ip_str = ip_str.replace('.in-addr.arpa', '')
            ip_str = '.'.join(list(reversed(ip_str.split('.'))))
            fqdn = rdata.target.to_text().strip('.')
            if fqdn.startswith('unused'):
                print "Skipping " + ip_str + " " + fqdn
                continue
            if ip_str == '10.2.171.IN':
                log("Skipping 10.2.171.IN", WARNING)
                continue
            print str(name) + " PTR " + str(fqdn)
            ptr = PTR.objects.filter(name=fqdn, ip_str=ip_str, ip_type='4')
            if ptr:
                ptr = ptr[0]
            else:
                try:
                    ptr = PTR(name=fqdn, ip_str=ip_str, ip_type='4')
                    ptr.full_clean()
                    ptr.save()
                    if views:
                        for view in views:
                            ptr.views.add(view)
                            ptr.save()
                except Exception, e:
                    pdb.set_trace()

            if views:
                for view in views:
                    ptr.views.add(view)
Exemple #19
0
    def test_master_reverse_ipv6_domains(self):
        rds = []
        rd = self.create_domain(name='1', ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(name='1.2', ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(name='1.2.8', ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(name='1.2.8.3', ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(name='1.2.8.3.0', ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(name='1.2.8.3.0.0', ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(name='1.2.8.3.0.0.0', ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(name='1.2.8.3.0.0.0.0', ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(name='1.2.8.3.0.0.0.0.4', ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(name='1.2.8.3.0.0.0.0.4.3', ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(name='1.2.8.3.0.0.0.0.4.3.4', ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(name='1.2.8.3.0.0.0.0.4.3.4.5', ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(name='1.2.8.3.0.0.0.0.4.3.4.5.6', ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(name='1.2.8.3.0.0.0.0.4.3.4.5.6.6',
                                ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(name='1.2.8.3.0.0.0.0.4.3.4.5.6.6.5',
                                ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(name='1.2.8.3.0.0.0.0.4.3.4.5.6.6.5.6',
                                ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(name='1.2.8.3.0.0.0.0.4.3.4.5.6.6.5.6.7',
                                ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(name='1.2.8.3.0.0.0.0.4.3.4.5.6.6.5.6.7.0',
                                ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(name='1.2.8.3.0.0.0.0.4.3.4.5.6.6.5.6.7.0.0',
                                ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(name='1.2.8.3.0.0.0.0.4.3.4.5.6.6.5.6.7.0.0.0',
                                ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(
            name='1.2.8.3.0.0.0.0.4.3.4.5.6.6.5.6.7.0.0.0.0', ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(
            name='1.2.8.3.0.0.0.0.4.3.4.5.6.6.5.6.7.0.0.0.0.0', ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(
            name='1.2.8.3.0.0.0.0.4.3.4.5.6.6.5.6.7.0.0.0.0.0.0', ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(
            name='1.2.8.3.0.0.0.0.4.3.4.5.6.6.5.6.7.0.0.0.0.0.0.0',
            ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(
            name='1.2.8.3.0.0.0.0.4.3.4.5.6.6.5.6.7.0.0.0.0.0.0.0.0',
            ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(
            name='1.2.8.3.0.0.0.0.4.3.4.5.6.6.5.6.7.0.0.0.0.0.0.0.0.0',
            ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(
            name='1.2.8.3.0.0.0.0.4.3.4.5.6.6.5.6.7.0.0.0.0.0.0.0.0.0.0',
            ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(
            name='1.2.8.3.0.0.0.0.4.3.4.5.6.6.5.6.7.0.0.0.0.0.0.0.0.0.0.0',
            ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(
            name='1.2.8.3.0.0.0.0.4.3.4.5.6.6.5.6.7.0.0.0.0.0.0.0.0.0.0.0.0',
            ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(
            name='1.2.8.3.0.0.0.0.4.3.4.5.6.6.5.6.7.0.0.0.0.0.0.0.0.0.0.0.0.3',
            ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(
            name=
            '1.2.8.3.0.0.0.0.4.3.4.5.6.6.5.6.7.0.0.0.0.0.0.0.0.0.0.0.0.3.2',
            ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(
            name=
            '1.2.8.3.0.0.0.0.4.3.4.5.6.6.5.6.7.0.0.0.0.0.0.0.0.0.0.0.0.3.2.1',
            ip_type='6')
        rd.save()
        rds.append(rd)

        for rd in list(enumerate(rds)):
            if rd[0] == 0:
                self.assertEqual(rd[1].master_domain, self.i6_arpa)
            else:
                self.assertEqual(rd[1].master_domain, rds[rd[0] - 1])
            self.assertTrue(rd[1].get_detail_url())
            self.assertTrue(rd[1].get_update_url())
            self.assertTrue(rd[1].get_delete_url())

        try:
            Domain.objects.filter(
                name=ip_to_domain_name('1.2.8.3.0.0.0.0.4.3.4.5.6.6.5.6.7.0.0',
                                       ip_type='6'))[0].delete()
        except ValidationError, e:
            pass
Exemple #20
0
                                                 'ipv6.arpa')):
                    raise ValidationError("No reverse Domain found for {0} "
                                          .format(self.ip_str))
            self.ip_upper = 0
            self.ip_lower = int(ip)
        else:
            try:
                ip = ipaddr.IPv6Address(self.ip_str)
                self.ip_str = str(ip)
            except ipaddr.AddressValueError, e:
                raise ValidationError("Invalid ip {0} for IPv6s.".
                                      format(self.ip_str))

            if update_reverse_domain:
                nibz = nibbilize(self.ip_str)
                revname = ip_to_domain_name(nibz, ip_type='6')
                self.reverse_domain = name_to_domain(revname)
                if (self.reverse_domain is None or self.reverse_domain.name in
                        ('arpa', 'in-addr.arpa', 'ipv6.arpa')):
                    raise ValidationError("No reverse Domain found for {0} "
                                          .format(self.ip_str))
            self.ip_upper, self.ip_lower = ipv6_to_longs(int(ip))

    def __int__(self):
        if self.ip_type == '4':
            self.ip_lower
        if self.ip_type == '6':
            return (self.ip_upper * (2 ** 64)) + self.ip_lower

    def _validate_ip_str(self):
        if isinstance(self.ip_str, basestring):
Exemple #21
0
    def test_master_reverse_ipv6_domains(self):
        rds = []
        rd = self.create_domain(name='1', ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(name='1.2', ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(name='1.2.8', ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(name='1.2.8.3', ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(name='1.2.8.3.0', ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(name='1.2.8.3.0.0', ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(name='1.2.8.3.0.0.0', ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(name='1.2.8.3.0.0.0.0', ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(name='1.2.8.3.0.0.0.0.4', ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(name='1.2.8.3.0.0.0.0.4.3', ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(name='1.2.8.3.0.0.0.0.4.3.4', ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(name='1.2.8.3.0.0.0.0.4.3.4.5', ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(name='1.2.8.3.0.0.0.0.4.3.4.5.6', ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(
            name='1.2.8.3.0.0.0.0.4.3.4.5.6.6', ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(
            name='1.2.8.3.0.0.0.0.4.3.4.5.6.6.5', ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(
            name='1.2.8.3.0.0.0.0.4.3.4.5.6.6.5.6', ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(
            name='1.2.8.3.0.0.0.0.4.3.4.5.6.6.5.6.7', ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(
            name='1.2.8.3.0.0.0.0.4.3.4.5.6.6.5.6.7.0', ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(
            name='1.2.8.3.0.0.0.0.4.3.4.5.6.6.5.6.7.0.0', ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(
            name='1.2.8.3.0.0.0.0.4.3.4.5.6.6.5.6.7.0.0.0', ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(
            name='1.2.8.3.0.0.0.0.4.3.4.5.6.6.5.6.7.0.0.0.0', ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(
            name='1.2.8.3.0.0.0.0.4.3.4.5.6.6.5.6.7.0.0.0.0.0', ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(
            name='1.2.8.3.0.0.0.0.4.3.4.5.6.6.5.6.7.0.0.0.0.0.0', ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(name='1.2.8.3.0.0.0.0.4.3.4.5.6.6.5.6.7.0.0.0.0.0.0.0', ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(name='1.2.8.3.0.0.0.0.4.3.4.5.6.6.5.6.7.0.0.0.0.0.0.0.0', ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(name='1.2.8.3.0.0.0.0.4.3.4.5.6.6.5.6.7.0.0.0.0.0.0.0.0.0', ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(name='1.2.8.3.0.0.0.0.4.3.4.5.6.6.5.6.7.0.0.0.0.0.0.0.0.0.0', ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(name='1.2.8.3.0.0.0.0.4.3.4.5.6.6.5.6.7.0.0.0.0.0.0.0.0.0.0.0', ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(name='1.2.8.3.0.0.0.0.4.3.4.5.6.6.5.6.7.0.0.0.0.0.0.0.0.0.0.0.0', ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(name='1.2.8.3.0.0.0.0.4.3.4.5.6.6.5.6.7.0.0.0.0.0.0.0.0.0.0.0.0.3', ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(name='1.2.8.3.0.0.0.0.4.3.4.5.6.6.5.6.7.0.0.0.0.0.0.0.0.0.0.0.0.3.2', ip_type='6')
        rd.save()
        rds.append(rd)

        rd = self.create_domain(name='1.2.8.3.0.0.0.0.4.3.4.5.6.6.5.6.7.0.0.0.0.0.0.0.0.0.0.0.0.3.2.1', ip_type='6')
        rd.save()
        rds.append(rd)

        for rd in list(enumerate(rds)):
            if rd[0] == 0:
                self.assertEqual(rd[1].master_domain, self.i6_arpa)
            else:
                self.assertEqual(rd[1].master_domain, rds[rd[0] - 1])
            self.assertTrue(rd[1].get_detail_url())
            self.assertTrue(rd[1].get_update_url())
            self.assertTrue(rd[1].get_delete_url())

        try:
            Domain.objects.filter(
                name=ip_to_domain_name('1.2.8.3.0.0.0.0.4.3.4.5.6.6.5.6.7.0.0',
                                       ip_type='6'))[0].delete()
        except ValidationError, e:
            pass
Exemple #22
0
def populate_reverse_dns(rev_svn_zones):
    arpa = create_domain(name='arpa')
    i_arpa = create_domain(name='in-addr.arpa')
    i6_arpa = create_domain(name='ipv6.arpa')

    for site, data in rev_svn_zones.iteritems():
        site_path, more_data = data
        zone, records = more_data
        print "-" * 15 + " " + site

        for (name, ttl, rdata) in zone.iterate_rdatas('SOA'):
            print str(name) + " SOA " + str(rdata)
            exists = SOA.objects.filter(
                minimum=rdata.minimum,
                contact=rdata.rname.to_text().strip('.'),
                primary=rdata.mname.to_text().strip('.'),
                comment="SOA for {0}.in-addr.arpa".format(site))
            if exists:
                soa = exists[0]
            else:
                soa = SOA(serial=rdata.serial,
                          minimum=rdata.minimum,
                          contact=rdata.rname.to_text().strip('.'),
                          primary=rdata.mname.to_text().strip('.'),
                          comment="SOA for {0}.in-addr.arpa".format(site))
                soa.clean()
                soa.save()
            name = name.to_text().replace('.IN-ADDR.ARPA.', '')
            domain_split = list(reversed(name.split('.')))
            for i in range(len(domain_split)):
                domain_name = domain_split[:i + 1]
                rev_name = ip_to_domain_name('.'.join(domain_name),
                                             ip_type='4')
                base_domain, created = Domain.objects.get_or_create(
                    name=rev_name)
            base_domain.soa = soa
            base_domain.save()
        for (name, ttl, rdata) in zone.iterate_rdatas('NS'):
            name = name.to_text().strip('.')
            name = name.replace('.IN-ADDR.ARPA', '')
            name = name.replace('.in-addr.arpa', '')
            print str(name) + " NS " + str(rdata)
            domain_name = '.'.join(list(reversed(name.split('.'))))
            domain = ensure_rev_domain(domain_name)
            ns, _ = Nameserver.objects.get_or_create(
                domain=domain, server=rdata.target.to_text().strip('.'))
        for (name, ttl, rdata) in zone.iterate_rdatas('PTR'):
            ip_str = name.to_text().strip('.')
            ip_str = ip_str.replace('.IN-ADDR.ARPA', '')
            ip_str = ip_str.replace('.in-addr.arpa', '')
            ip_str = '.'.join(list(reversed(ip_str.split('.'))))
            fqdn = rdata.target.to_text().strip('.')
            if fqdn.startswith('unused'):
                print "Skipping " + ip_str + " " + fqdn
                continue
            if ip_str == '10.2.171.IN':
                log("Skipping 10.2.171.IN", WARNING)
                continue
            print str(name) + " PTR " + str(fqdn)
            ptr = PTR.objects.filter(name=fqdn, ip_str=ip_str, ip_type='4')
            if ptr:
                continue
            else:
                ptr = PTR(name=fqdn, ip_str=ip_str, ip_type='4')
                ptr.full_clean()
                ptr.save()
        """