Exemplo n.º 1
0
    def add_default_soa_record(self, endpoint=None):
        """Returns None if already exists, DoesNotExist bubbles up when no
        default soa exists"""

        # sanity check
        if not self.domain_id:
            raise Exception(
                "Cannot add default records when domain_id is not set")

        # don't duplicate SOA record
        try:
            existing_soa = Record.get(Record.domain_id == self.domain_id,
                                      Record.type == RecordType().set("SOA"))
            return None
        except DoesNotExist:
            # create SOA record, let DoesNotExist bubble up
            default_soa = DefaultRecord.get(
                DefaultRecord.type == RecordType().set("SOA"))
            soa = Record()
            soa.domain_id = self.domain_id
            soa.host = default_soa.host.replace("DOMAIN", self.domain)
            soa.val = default_soa.val
            soa.ttl = default_soa.ttl
            soa.type = default_soa.type

            # replace uses of DOMAIN
            soa.save()
            if endpoint is not None:
                endpoint.dns_log(soa.domain_id, "added soa")

            return soa
Exemplo n.º 2
0
    def test_cname_validation_success(self):
        record = Record()
        record.type = 'C'
        record.domain_id = 1
        record.host = 'foobar.com'
        record.val = 'www.example.com'

        self.assertIsNone(record.validate())
Exemplo n.º 3
0
    def test_hostname_in_domain(self):
        record = Record()

        domain = "foobar.com"
        bad = "wwwfoobar.com"
        good = "www.foobar.com"

        self.assertTrue(record.hostname_in_domain(domain, domain))
        self.assertFalse(record.hostname_in_domain(bad, domain))
        self.assertTrue(record.hostname_in_domain(good, domain))
Exemplo n.º 4
0
    def test_mx_record(self):
        model = Record()

        model.type = 'P'
        model.host = '4.3.2.1.in-addr.arpa'
        model.val = 'www.vegadns.ubuntu'
        model.ttl = '3600'

        self.assertEquals(self.export.data_line_from_model(model),
                          '^4.3.2.1.in-addr.arpa:www.vegadns.ubuntu:3600\n')
Exemplo n.º 5
0
    def test_a_record(self):
        model = Record()

        model.type = 'A'
        model.host = 'foo.vegadns.ubuntu'
        model.val = '1.2.3.4'
        model.ttl = '3600'

        self.assertEquals(self.export.data_line_from_model(model),
                          '+foo.vegadns.ubuntu:1.2.3.4:3600\n')
Exemplo n.º 6
0
    def test_cname_validation_fail(self):
        record = Record()
        record.type = 'C'
        record.domain_id = 1
        record.host = 'foobar.com'
        record.val = 'www.example.com  '

        with self.assertRaises(RecordValueException) as cm:
            record.validate()
        self.assertEquals('Invalid cname value: www.example.com  ',
                          cm.exception.message)
Exemplo n.º 7
0
    def test_mx_record(self):
        model = Record()

        model.type = 'M'
        model.host = 'vegadns.ubuntu'
        model.val = 'mail.vegadns.ubuntu'
        model.distance = 10
        model.ttl = '3600'

        self.assertEquals(self.export.data_line_from_model(model),
                          '@vegadns.ubuntu::mail.vegadns.ubuntu:10:3600\n')
Exemplo n.º 8
0
    def test_ns_record(self):
        model = Record()

        model.type = 'N'
        model.host = 'example.com'
        model.val = 'ns1.example.com'
        model.ttl = 3600

        expected = "&example.com::ns1.example.com:3600\n"

        self.assertEquals(self.export.data_line_from_model(model), expected)
Exemplo n.º 9
0
    def test_spf_record(self):
        model = Record()

        model.type = 'F'
        model.host = 'example.com'
        model.val = 'v=spf1 mx -all'
        model.ttl = '3600'

        self.assertEquals(self.export.data_line_from_model(model),
                          ":example.com:99:"
                          r"\016"
                          "v=spf1 mx -all:3600\n")
Exemplo n.º 10
0
    def test_ptr_record(self):
        model = Record()

        model.type = 'T'
        model.host = 'vegadns.ubuntu'
        model.val = 'v=spf1 mx a ip4:1.2.3.0/24'
        model.ttl = '3600'

        self.assertEquals(
            self.export.data_line_from_model(model),
            "'vegadns.ubuntu:v=spf1 mx a ip4"
            r"\072" + "1.2.3.0/24:3600\n")
Exemplo n.º 11
0
    def test_aaaaptr_record(self):
        model = Record()

        model.type = '3'
        model.host = 'example.com'
        model.val = '0000:0000:0000:0000:0000:ffff:169.254.123.231'
        model.ttl = '3600'

        expected = (
            ":example.com:28:"
            r"\000\000\000\000\000\000\000\000\000\000\377\377\251\376\173\347"
            ":3600\n")

        self.assertEquals(self.export.data_line_from_model(model), expected)
Exemplo n.º 12
0
    def test_srv_record(self):
        model = Record()

        model.type = 'V'
        model.host = '_xmpp-client._tcp.example.com.'
        model.val = 'xmpp.example.com'
        model.ttl = '3600'
        model.distance = 0
        model.weight = 10
        model.port = 5222

        expected = (":_xmpp-client._tcp.example.com."
                    ":33"
                    r":\000\000\000\012\024\146\004xmpp\007example\003com\000"
                    ":3600\n")

        self.assertEquals(self.export.data_line_from_model(model), expected)
Exemplo n.º 13
0
    def test_soa_record(self):
        domain = Domain()
        domain.domain = 'example.com'
        model = Record()

        # joined domain on domain_id
        model.domain_id = domain
        model.type = 'S'
        model.host = 'hostmaster.example.com:ns1.example.com'
        model.val = '16384:2048:1048576:2560:'
        model.ttl = '86400'

        expected = ("Zexample.com"
                    ":ns1.example.com"
                    ":hostmaster.example.com"
                    ":"
                    ":16384"
                    ":2048"
                    ":1048576"
                    ":2560"
                    ":86400\n")

        self.assertEquals(self.export.data_line_from_model(model), expected)
Exemplo n.º 14
0
    def add_default_records(self, endpoint=None, skipSoa=False):
        # sanity check
        if not self.domain_id:
            raise Exception(
                "Cannot add default records when domain_id is not set")

        if not skipSoa:
            try:
                soa = self.add_default_soa_record(endpoint)
            except DoesNotExist:
                # no default SOA record set!
                pass

        # create all other records
        default_records = DefaultRecord.select().where(
            DefaultRecord.type != RecordType().set("SOA"))

        for record in default_records:
            new = Record()

            new.domain_id = self.domain_id
            new.distance = record.distance
            new.host = record.host.replace("DOMAIN", self.domain)
            new.val = record.val.replace("DOMAIN", self.domain)
            new.distance = record.distance
            new.port = record.port
            new.ttl = record.ttl
            new.type = record.type
            new.weight = record.weight

            new.save()
            if endpoint is not None:
                endpoint.dns_log(
                    new.domain_id,
                    ("added " + RecordType().get(new.type) + " with host " +
                     new.host + " and value " + new.val))