def migrate_soa(zone, root_domain_name): 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}".format(root_domain_name)) 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}".format(root_domain_name)) soa.clean() soa.save() return soa
def migrate_soa(zone, root_domain_name): 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}".format(root_domain_name)) 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}".format(root_domain_name)) soa.clean() soa.save() return soa
def populate_forward_dns(zone, root_domain, views=None): 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}".format(root_domain)) 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}".format(root_domain)) soa.clean() soa.save() domain_split = list(reversed(name.to_text().strip('.').split('.'))) for i in range(len(domain_split)): domain_name = domain_split[:i + 1] base_domain, created = Domain.objects.get_or_create(name= '.'.join(list(reversed(domain_name)))) null_all_soas(base_domain) base_domain.soa = soa base_domain.save() set_all_soas(base_domain, soa) names = [] for (name, ttl, rdata) in zone.iterate_rdatas('A'): names.append((name.to_text().strip('.'), rdata)) sorted_names = list(sorted(names, cmp=lambda n1, n2: -1 if len(n1[0].split('.')) > len(n2[0].split('.')) else 1)) for name, rdata in sorted_names: print str(name) + " A " + str(rdata) exists_domain = Domain.objects.filter(name=name) if exists_domain: label = '' domain = exists_domain[0] else: label = name.split('.')[0] if label.find('unused') != -1: continue parts = list(reversed(name.split('.')[1:])) domain_name = '' for i in range(len(parts)): domain_name = parts[i] + '.' + domain_name domain_name = domain_name.strip('.') # We need to check for A records who have a name with this # domain. addrs = AddressRecord.objects.filter(fqdn=domain_name, ip_type='4') clober_objects = [] if addrs: for exists_a in addrs: # It got here. It exists need_to_recreate_a = True ip_str = exists_a.ip_str exists_a.delete(check_cname=False) a = AddressRecord(label='', ip_str=ip_str, ip_type='4') clober_objects.append(a) domain, created = Domain.objects.get_or_create(name= domain_name) for a in clober_objects: a.domain = domain a.clean() try: a.save() except Exception, e: pdb.set_trace() pass if created and domain.master_domain and domain.master_domain.soa: #domain.soa = domain.master_domain.soa #domain.save() null_all_soas(domain) set_all_soas(domain, domain.master_domain.soa) a, _ = AddressRecord.objects.get_or_create(label=label, domain=domain, ip_str=rdata.to_text(), ip_type='4') if views: for view in views: a.views.add(view) try: a.save() except Exception, e: pdb.set_trace() pass
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 populate_forward_dns(svn_zones): for site, data in svn_zones.iteritems(): zone, records = 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}.mozilla.com".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}.mozilla.com".format(site)) soa.clean() soa.save() domain_split = list(reversed(name.to_text().strip('.').split('.'))) for i in range(len(domain_split)): domain_name = domain_split[:i + 1] base_domain, created = Domain.objects.get_or_create(name= '.'.join(list(reversed(domain_name)))) base_domain.soa = soa base_domain.save() """ Algo for creating names and domains. Get all names. Sort by number of labels, longest first. For each name: if exists_domain(name): label = '' domain = name else: label = name.split('.')[0] domain_name = name.split('.')[1:] if domain_name exists: domain = domain_name else: domain = create(domain_name) """ # Create list names = [] for (name, ttl, rdata) in zone.iterate_rdatas('A'): names.append((name.to_text().strip('.'), rdata)) sorted_names = list(sorted(names, cmp=lambda n1, n2: -1 if len(n1[0].split('.')) > len(n2[0].split('.')) else 1)) for name, rdata in sorted_names: print str(name) + " A " + str(rdata) exists_domain = Domain.objects.filter(name=name) if exists_domain: label = '' domain = exists_domain[0] else: label = name.split('.')[0] if label.find('unused') != -1: continue parts = list(reversed(name.split('.')[1:])) domain_name = '' for i in range(len(parts)): domain_name = parts[i] + '.' + domain_name domain_name = domain_name.strip('.') domain, created = Domain.objects.get_or_create(name= domain_name) if domain.master_domain and domain.master_domain.soa: domain.soa = domain.master_domain.soa a, _ = AddressRecord.objects.get_or_create(label=label, domain=domain, ip_str=rdata.to_text(), ip_type='4') for (name, ttl, rdata) in zone.iterate_rdatas('NS'): name = name.to_text().strip('.') print str(name) + " NS " + str(rdata) domain = ensure_domain(name) ns, _ = Nameserver.objects.get_or_create(domain=domain, server=rdata.target.to_text().strip('.')) for (name, ttl, rdata) in zone.iterate_rdatas('MX'): name = name.to_text().strip('.') print str(name) + " MX " + str(rdata) exists_domain = Domain.objects.filter(name=name) if exists_domain: label = '' domain = exists_domain[0] else: label = name.split('.')[0] domain_name = name.split('.')[1:] domain = ensure_domain(domain_name) priority = rdata.preference server = rdata.exchange.to_text().strip('.') mx, _ = MX.objects.get_or_create(label=label, domain=domain, server=server, priority=priority, ttl="3600") for (name, ttl, rdata) in zone.iterate_rdatas('CNAME'): name = name.to_text().strip('.') print str(name) + " CNAME " + str(rdata) exists_domain = Domain.objects.filter(name=name) if exists_domain: label = '' domain = exists_domain[0] else: label = name.split('.')[0] domain_name = name.split('.')[1:] domain = ensure_domain('.'.join(domain_name)) data = rdata.target.to_text().strip('.') if not CNAME.objects.filter(label=label, domain=domain, data=data).exists(): cn = CNAME(label=label, domain=domain, data=data) cn.full_clean() cn.save()
def populate_forward_dns(svn_zones): for site, data in svn_zones.iteritems(): zone, records = 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}.mozilla.com".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}.mozilla.com".format(site)) soa.clean() soa.save() domain_split = list(reversed(name.to_text().strip('.').split('.'))) for i in range(len(domain_split)): domain_name = domain_split[:i + 1] base_domain, created = Domain.objects.get_or_create( name='.'.join(list(reversed(domain_name)))) base_domain.soa = soa base_domain.save() """ Algo for creating names and domains. Get all names. Sort by number of labels, longest first. For each name: if exists_domain(name): label = '' domain = name else: label = name.split('.')[0] domain_name = name.split('.')[1:] if domain_name exists: domain = domain_name else: domain = create(domain_name) """ # Create list names = [] for (name, ttl, rdata) in zone.iterate_rdatas('A'): names.append((name.to_text().strip('.'), rdata)) sorted_names = list( sorted(names, cmp=lambda n1, n2: -1 if len(n1[0].split('.')) > len(n2[0].split('.')) else 1)) for name, rdata in sorted_names: print str(name) + " A " + str(rdata) exists_domain = Domain.objects.filter(name=name) if exists_domain: label = '' domain = exists_domain[0] else: label = name.split('.')[0] if label.find('unused') != -1: continue parts = list(reversed(name.split('.')[1:])) domain_name = '' for i in range(len(parts)): domain_name = parts[i] + '.' + domain_name domain_name = domain_name.strip('.') domain, created = Domain.objects.get_or_create( name=domain_name) if domain.master_domain and domain.master_domain.soa: domain.soa = domain.master_domain.soa a, _ = AddressRecord.objects.get_or_create(label=label, domain=domain, ip_str=rdata.to_text(), ip_type='4') for (name, ttl, rdata) in zone.iterate_rdatas('NS'): name = name.to_text().strip('.') print str(name) + " NS " + str(rdata) domain = ensure_domain(name) ns, _ = Nameserver.objects.get_or_create( domain=domain, server=rdata.target.to_text().strip('.')) for (name, ttl, rdata) in zone.iterate_rdatas('MX'): name = name.to_text().strip('.') print str(name) + " MX " + str(rdata) exists_domain = Domain.objects.filter(name=name) if exists_domain: label = '' domain = exists_domain[0] else: label = name.split('.')[0] domain_name = name.split('.')[1:] domain = ensure_domain(domain_name) priority = rdata.preference server = rdata.exchange.to_text().strip('.') mx, _ = MX.objects.get_or_create(label=label, domain=domain, server=server, priority=priority, ttl="3600") for (name, ttl, rdata) in zone.iterate_rdatas('CNAME'): name = name.to_text().strip('.') print str(name) + " CNAME " + str(rdata) exists_domain = Domain.objects.filter(name=name) if exists_domain: label = '' domain = exists_domain[0] else: label = name.split('.')[0] domain_name = name.split('.')[1:] domain = ensure_domain('.'.join(domain_name)) data = rdata.target.to_text().strip('.') if not CNAME.objects.filter(label=label, domain=domain, data=data).exists(): cn = CNAME(label=label, domain=domain, data=data) cn.full_clean() cn.save()
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() """
def populate_forward_dns(zone, root_domain, views=None): 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}".format(root_domain)) 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}".format(root_domain)) soa.clean() soa.save() domain_split = list(reversed(name.to_text().strip('.').split('.'))) for i in range(len(domain_split)): domain_name = domain_split[:i + 1] base_domain, created = Domain.objects.get_or_create( name='.'.join(list(reversed(domain_name)))) null_all_soas(base_domain) base_domain.soa = soa base_domain.save() set_all_soas(base_domain, soa) names = [] for (name, ttl, rdata) in zone.iterate_rdatas('A'): names.append((name.to_text().strip('.'), rdata)) sorted_names = list( sorted(names, cmp=lambda n1, n2: -1 if len(n1[0].split('.')) > len(n2[0].split('.')) else 1)) for name, rdata in sorted_names: print str(name) + " A " + str(rdata) exists_domain = Domain.objects.filter(name=name) if exists_domain: label = '' domain = exists_domain[0] else: label = name.split('.')[0] if label.find('unused') != -1: continue parts = list(reversed(name.split('.')[1:])) domain_name = '' for i in range(len(parts)): domain_name = parts[i] + '.' + domain_name domain_name = domain_name.strip('.') # We need to check for A records who have a name with this # domain. addrs = AddressRecord.objects.filter(fqdn=domain_name, ip_type='4') clober_objects = [] if addrs: for exists_a in addrs: # It got here. It exists need_to_recreate_a = True ip_str = exists_a.ip_str exists_a.delete(check_cname=False) a = AddressRecord(label='', ip_str=ip_str, ip_type='4') clober_objects.append(a) domain, created = Domain.objects.get_or_create( name=domain_name) for a in clober_objects: a.domain = domain a.clean() try: a.save() except Exception, e: pdb.set_trace() pass if created and domain.master_domain and domain.master_domain.soa: #domain.soa = domain.master_domain.soa #domain.save() null_all_soas(domain) set_all_soas(domain, domain.master_domain.soa) a, _ = AddressRecord.objects.get_or_create(label=label, domain=domain, ip_str=rdata.to_text(), ip_type='4') if views: for view in views: a.views.add(view) try: a.save() except Exception, e: pdb.set_trace() pass