Example #1
0
    def testGenerate3(self):
        z = dns.zone.from_text(example_text6, 'example.', relativize=True)
        l = list(z.iterate_rdatas())
        l.sort(key=_rdata_sort)

        exl = [
            (dns.name.from_text('@', None), long(3600),
             dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.NS, 'ns1')),
            (dns.name.from_text('@', None), long(3600),
             dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.NS, 'ns2')),
            (dns.name.from_text('@', None), long(3600),
             dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.SOA,
                                 'foo bar 1 2 3 4 5')),
            (dns.name.from_text('bar.foo', None), long(300),
             dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.MX,
                                 '0 blaz.foo')),
            (dns.name.from_text('ns1', None), long(3600),
             dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A,
                                 '10.0.0.1')),
            (dns.name.from_text('ns2', None), long(3600),
             dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A,
                                 '10.0.0.2')),
            (dns.name.from_text('wp-db21.services.mozilla.com', None), long(0),
             dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.CNAME,
                                 'SERVER.FOOBAR.')),
            (dns.name.from_text('wp-db22.services.mozilla.com', None), long(0),
             dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.CNAME,
                                 'SERVER.FOOBAR.')),
            (dns.name.from_text('wp-db23.services.mozilla.com', None), long(0),
             dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.CNAME,
                                 'SERVER.FOOBAR.'))
        ]
        exl.sort(key=_rdata_sort)
        self.failUnless(l == exl)
Example #2
0
 def testGenerate4(self):
     z = dns.zone.from_text(example_text7, 'example.', relativize=True)
     l = list(z.iterate_rdatas())
     l.sort(key=_rdata_sort)
     exl = [(dns.name.from_text('@', None), long(3600),
             dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.NS,
                                 'ns1')),
            (dns.name.from_text('@', None), long(3600),
             dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.NS,
                                 'ns2')),
            (dns.name.from_text('@', None), long(3600),
             dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.SOA,
                                 'foo bar 1 2 3 4 5')),
            (dns.name.from_text('bar.foo', None), long(300),
             dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.MX,
                                 '0 blaz.foo')),
            (dns.name.from_text('ns1', None), long(3600),
             dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A,
                                 '10.0.0.1')),
            (dns.name.from_text('ns2', None), long(3600),
             dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A,
                                 '10.0.0.2')),
            (dns.name.from_text('sync1.db', None), long(3600),
             dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A,
                                 '10.10.16.0')),
            (dns.name.from_text('sync2.db', None), long(3600),
             dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A,
                                 '10.10.16.0')),
            (dns.name.from_text('sync3.db', None), long(3600),
             dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A,
                                 '10.10.16.0'))]
     exl.sort(key=_rdata_sort)
     self.failUnless(l == exl)
Example #3
0
 def to_wire(self, file, compress=None, origin=None):
     if self.latitude[0] < 0:
         sign = -1
         degrees = long(-1 * self.latitude[0])
     else:
         sign = 1
         degrees = long(self.latitude[0])
     milliseconds = (degrees * 3600000 +
                     self.latitude[1] * 60000 +
                     self.latitude[2] * 1000 +
                     self.latitude[3]) * sign
     latitude = long(0x80000000) + milliseconds
     if self.longitude[0] < 0:
         sign = -1
         degrees = long(-1 * self.longitude[0])
     else:
         sign = 1
         degrees = long(self.longitude[0])
     milliseconds = (degrees * 3600000 +
                     self.longitude[1] * 60000 +
                     self.longitude[2] * 1000 +
                     self.longitude[3]) * sign
     longitude = long(0x80000000) + milliseconds
     altitude = long(self.altitude) + long(10000000)
     size = _encode_size(self.size, "size")
     hprec = _encode_size(self.horizontal_precision, "horizontal precision")
     vprec = _encode_size(self.vertical_precision, "vertical precision")
     wire = struct.pack("!BBBBIII", 0, size, hprec, vprec, latitude,
                        longitude, altitude)
     file.write(wire)
Example #4
0
    def testGenerate7(self):  # type: () -> None
        z = dns.zone.from_text(example_text10, 'example.', relativize=True)
        l = list(z.iterate_rdatas())
        l.sort(key=_rdata_sort)
        exl = [(dns.name.from_text('@', None), long(3600),
                dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.NS,
                                    'ns1')),
               (dns.name.from_text('@', None), long(3600),
                dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.NS,
                                    'ns2')),
               (dns.name.from_text('@', None), long(3600),
                dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.SOA,
                                    'foo bar 1 2 3 4 5')),
               (dns.name.from_text('bar.foo', None), long(300),
                dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.MX,
                                    '0 blaz.foo')),
               (dns.name.from_text('ns1', None), long(3600),
                dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A,
                                    '10.0.0.1')),
               (dns.name.from_text('ns2', None), long(3600),
                dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A,
                                    '10.0.0.2')),
               (dns.name.from_text('27.2', None), long(3600),
                dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.PTR,
                                    'zlb1.oob')),
               (dns.name.from_text('28.2', None), long(3600),
                dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.PTR,
                                    'zlb2.oob'))]

        exl.sort(key=_rdata_sort)
        self.failUnless(l == exl)
Example #5
0
 def to_wire(self, file, compress=None, origin=None):
     milliseconds = (self.latitude[0] * 3600000 + self.latitude[1] * 60000 +
                     self.latitude[2] * 1000 +
                     self.latitude[3]) * self.latitude[4]
     latitude = long(0x80000000) + milliseconds
     milliseconds = (self.longitude[0] * 3600000 +
                     self.longitude[1] * 60000 + self.longitude[2] * 1000 +
                     self.longitude[3]) * self.longitude[4]
     longitude = long(0x80000000) + milliseconds
     altitude = long(self.altitude) + long(10000000)
     size = _encode_size(self.size, "size")
     hprec = _encode_size(self.horizontal_precision, "horizontal precision")
     vprec = _encode_size(self.vertical_precision, "vertical precision")
     wire = struct.pack("!BBBBIII", 0, size, hprec, vprec, latitude,
                        longitude, altitude)
     file.write(wire)
Example #6
0
def _decode_size(what, desc):
    exponent = what & 0x0F
    if exponent > 9:
        raise dns.exception.SyntaxError("bad %s exponent" % desc)
    base = (what & 0xF0) >> 4
    if base > 9:
        raise dns.exception.SyntaxError("bad %s base" % desc)
    return long(base) * pow(10, exponent)
Example #7
0
def _decode_size(what, desc):
    exponent = what & 0x0F
    if exponent > 9:
        raise dns.exception.SyntaxError("bad %s exponent" % desc)
    base = (what & 0xF0) >> 4
    if base > 9:
        raise dns.exception.SyntaxError("bad %s base" % desc)
    return long(base) * pow(10, exponent)
Example #8
0
def _exponent_of(what, desc):
    if what == 0:
        return 0
    exp = None
    for i in xrange(len(_pows)):
        if what // _pows[i] == long(0):
            exp = i - 1
            break
    if exp is None or exp < 0:
        raise dns.exception.SyntaxError("%s value out of bounds" % desc)
    return exp
Example #9
0
def _exponent_of(what, desc):
    if what == 0:
        return 0
    exp = None
    for i in xrange(len(_pows)):
        if what // _pows[i] == long(0):
            exp = i - 1
            break
    if exp is None or exp < 0:
        raise dns.exception.SyntaxError("%s value out of bounds" % desc)
    return exp
Example #10
0
    def testGenerate1(self):
        z = dns.zone.from_text(example_text4, 'example.', relativize=True)
        l = list(z.iterate_rdatas())
        l.sort(key=_rdata_sort)
        exl = [(dns.name.from_text('@', None),
                long(3600),
                dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.NS,
                                    'ns1')),
               (dns.name.from_text('@', None),
                long(3600),
                dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.NS,
                                    'ns2')),
               (dns.name.from_text('@', None),
                long(3600),
                dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.SOA,
                                    'foo bar 1 2 3 4 5')),
               (dns.name.from_text('bar.foo', None),
                long(300),
                dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.MX,
                                    '0 blaz.foo')),
               (dns.name.from_text('ns1', None),
                long(3600),
                dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A,
                                    '10.0.0.1')),
               (dns.name.from_text('ns2', None),
                long(3600),
                dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A,
                                    '10.0.0.2')),

                (dns.name.from_text('wp-db01.services.mozilla.com', None),
                    long(0),
                dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.CNAME,
                                    'SERVER.FOOBAR.')),

                (dns.name.from_text('wp-db02.services.mozilla.com', None),
                    long(0),
                dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.CNAME,
                                    'SERVER.FOOBAR.')),

                (dns.name.from_text('wp-db03.services.mozilla.com', None),
                    long(0),
                dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.CNAME,
                                    'SERVER.FOOBAR.'))]
        exl.sort(key=_rdata_sort)
        self.assertEqual(l, exl)
Example #11
0
    def testGenerate4(self):
        z = dns.zone.from_text(example_text7, 'example.', relativize=True)
        l = list(z.iterate_rdatas())
        l.sort(key=_rdata_sort)
        exl = [(dns.name.from_text('@', None),
                long(3600),
                dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.NS,
                                    'ns1')),
               (dns.name.from_text('@', None),
                long(3600),
                dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.NS,
                                    'ns2')),
               (dns.name.from_text('@', None),
                long(3600),
                dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.SOA,
                                    'foo bar 1 2 3 4 5')),
               (dns.name.from_text('bar.foo', None),
                long(300),
                dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.MX,
                                    '0 blaz.foo')),
               (dns.name.from_text('ns1', None),
                long(3600),
                dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A,
                                    '10.0.0.1')),
               (dns.name.from_text('ns2', None),
                long(3600),
                dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A,
                                    '10.0.0.2')),

                (dns.name.from_text('sync1.db', None), long(3600),
                dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A,
                                    '10.10.16.0')),

                (dns.name.from_text('sync2.db', None), long(3600),
                dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A,
                                    '10.10.16.0')),

                (dns.name.from_text('sync3.db', None), long(3600),
                dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A,
                                    '10.10.16.0'))]
        exl.sort(key=_rdata_sort)
        self.failUnless(l == exl)
Example #12
0
def _float_to_tuple(what):
    if what < 0:
        sign = -1
        what *= -1
    else:
        sign = 1
    what = long(round(what * 3600000))
    degrees = int(what // 3600000)
    what -= degrees * 3600000
    minutes = int(what // 60000)
    what -= minutes * 60000
    seconds = int(what // 1000)
    what -= int(seconds * 1000)
    what = int(what)
    return (degrees, minutes, seconds, what, sign)
Example #13
0
def _float_to_tuple(what):
    if what < 0:
        sign = -1
        what *= -1
    else:
        sign = 1
    what = long(round(what * 3600000))
    degrees = int(what // 3600000)
    what -= degrees * 3600000
    minutes = int(what // 60000)
    what -= minutes * 60000
    seconds = int(what // 1000)
    what -= int(seconds * 1000)
    what = int(what)
    return (degrees, minutes, seconds, what, sign)
Example #14
0
 def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
     (version, size, hprec, vprec, latitude, longitude, altitude) = \
         struct.unpack("!BBBBIII", wire[current: current + rdlen])
     if latitude > long(0x80000000):
         latitude = float(latitude - long(0x80000000)) / 3600000
     else:
         latitude = -1 * float(long(0x80000000) - latitude) / 3600000
     if latitude < -90.0 or latitude > 90.0:
         raise dns.exception.FormError("bad latitude")
     if longitude > long(0x80000000):
         longitude = float(longitude - long(0x80000000)) / 3600000
     else:
         longitude = -1 * float(long(0x80000000) - longitude) / 3600000
     if longitude < -180.0 or longitude > 180.0:
         raise dns.exception.FormError("bad longitude")
     altitude = float(altitude) - 10000000.0
     size = _decode_size(size, "size")
     hprec = _decode_size(hprec, "horizontal precision")
     vprec = _decode_size(vprec, "vertical precision")
     return cls(rdclass, rdtype, latitude, longitude, altitude,
                size, hprec, vprec)
Example #15
0
 def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
     (version, size, hprec, vprec, latitude, longitude, altitude) = \
         struct.unpack("!BBBBIII", wire[current: current + rdlen])
     if latitude > long(0x80000000):
         latitude = float(latitude - long(0x80000000)) / 3600000
     else:
         latitude = -1 * float(long(0x80000000) - latitude) / 3600000
     if latitude < -90.0 or latitude > 90.0:
         raise dns.exception.FormError("bad latitude")
     if longitude > long(0x80000000):
         longitude = float(longitude - long(0x80000000)) / 3600000
     else:
         longitude = -1 * float(long(0x80000000) - longitude) / 3600000
     if longitude < -180.0 or longitude > 180.0:
         raise dns.exception.FormError("bad longitude")
     altitude = float(altitude) - 10000000.0
     size = _decode_size(size, "size")
     hprec = _decode_size(hprec, "horizontal precision")
     vprec = _decode_size(vprec, "vertical precision")
     return cls(rdclass, rdtype, latitude, longitude, altitude, size, hprec,
                vprec)
Example #16
0
def _encode_size(what, desc):
    what = long(what)
    exponent = _exponent_of(what, desc) & 0xF
    base = what // pow(10, exponent) & 0xF
    return base * 16 + exponent
Example #17
0
# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

import struct

import dns.exception
import dns.rdata
from dns._compat import long, xrange


_pows = tuple(long(10**i) for i in range(0, 11))

# default values are in centimeters
_default_size = 100.0
_default_hprec = 1000000.0
_default_vprec = 1000.0


def _exponent_of(what, desc):
    if what == 0:
        return 0
    exp = None
    for i in xrange(len(_pows)):
        if what // _pows[i] == long(0):
            exp = i - 1
            break
Example #18
0
def _encode_size(what, desc):
    what = long(what)
    exponent = _exponent_of(what, desc) & 0xF
    base = what // pow(10, exponent) & 0xF
    return base * 16 + exponent
Example #19
0
#
# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

import struct

import dns.exception
import dns.rdata
from dns._compat import long, xrange

_pows = tuple(long(10**i) for i in range(0, 11))

# default values are in centimeters
_default_size = 100.0
_default_hprec = 1000000.0
_default_vprec = 1000.0


def _exponent_of(what, desc):
    if what == 0:
        return 0
    exp = None
    for i in xrange(len(_pows)):
        if what // _pows[i] == long(0):
            exp = i - 1
            break