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()
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)
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
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) )
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
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
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)
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
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)
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
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()
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)
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
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)
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
'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):
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
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() """