예제 #1
0
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
예제 #2
0
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
예제 #3
0
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
예제 #4
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)
예제 #5
0
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()
예제 #6
0
파일: suck_zone.py 프로젝트: jirwin/cyder
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()
예제 #7
0
파일: suck_zone.py 프로젝트: jirwin/cyder
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()
        """
예제 #8
0
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