Пример #1
0
 def test_CAA_from_wire(self):
     rdata = dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.CAA, u'0 issue "ca.example.net"')
     f = BytesIO()
     rdata.to_wire(f)
     wire = f.getvalue()
     rdlen = len(wire)
     wire += b"trailing garbage"
     rdata2 = dns.rdata.from_wire(dns.rdataclass.IN, dns.rdatatype.CAA, wire, 0, rdlen)
     self.failUnless(rdata == rdata2)
Пример #2
0
 def test_CAA_from_wire(self):
     rdata = dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.CAA,
                                 u'0 issue "ca.example.net"')
     f = BytesIO()
     rdata.to_wire(f)
     wire = f.getvalue()
     rdlen = len(wire)
     wire += b"trailing garbage"
     rdata2 = dns.rdata.from_wire(dns.rdataclass.IN, dns.rdatatype.CAA,
                                  wire, 0, rdlen)
     self.failUnless(rdata == rdata2)
Пример #3
0
    def test_NSEC3_bad_bitmaps(self):
        rdata = dns.rdata.from_text(
            dns.rdataclass.IN, dns.rdatatype.NSEC3,
            u"1 0 100 ABCD SCBCQHKU35969L2A68P3AD59LHF30715 A CAA")

        with self.assertRaises(dns.exception.FormError):
            copy = bytearray(rdata.to_wire())
            copy[-3] = 0
            dns.rdata.from_wire('IN', 'NSEC3', copy, 0, len(copy))
Пример #4
0
def chop_and_write_rr_response(rr):
    name = dns.name.from_text(rr.rrname)
    #	print rr.rrname

    wire = name.to_wire()
    fp.write(pack('B', len(wire)))
    fp.write(wire)
    fp.write(pack('H', rr.type))
    fp.write(pack('H', rr.rclass))
    fp.write(pack('L', rr.ttl))

    try:
        rdata = dns.rdata.from_wire(rr.rclass, rr.type, rr.rdata, 0,
                                    len(rr.rdata))
        fp.write(pack('H', len(rr.rdata)))
        #		print "type ", rr.type, "length ", len(rr.rdata)
        #		OPT has length 0 - it should have no rdata
        rdata.to_wire(fp)
    except:

        try:
            #			if rr.rdata[0] != '\#':
            rdata = dns.rdata.from_text(rr.rclass, rr.type, rr.rdata)
            try:
                fp.write(pack('H', len(rdata)))
            except:
                # no length - no way to know wire length
                try:
                    #					print "unknown length for type", rr.type
                    #						if rr.type == 2:
                    #							fp.seek(1, 1)
                    #							old = fp.tell()
                    #							rdata.to_wire(fp)
                    #							size = fp.tell() - old
                    #							fp.seek(-(size + 1), 1)
                    #							fp.write(pack('B', size))
                    #							fp.seek(0, 2)
                    #						else:
                    rdata.to_wire(fp)
                except Exception as e:
                    print 'Error, exiting: ', e
                    sys.exit(-1)
        except Exception as e:
            print 'Error,', e
            print 'could not parse rdata type: ', rr.type
            print 'dumping directly (hopefully it is SOA)'
            # i need to do some kind of rollback here...
            fp.write(pack('H', len(rr.rdata)))
            fp.write(rr.rdata)

    if rr.type == 50:
        f = open('nsec3debug', 'wb')
        rdata.to_wire(f)
        f.close()
Пример #5
0
def chop_and_write_rr_response(rr):
	name = dns.name.from_text(rr.rrname)
#	print rr.rrname

	wire = name.to_wire()
	fp.write(pack('B', len(wire)))
	fp.write(wire)
	fp.write(pack('H', rr.type))
	fp.write(pack('H', rr.rclass))
	fp.write(pack('L', rr.ttl))

	try:
		rdata = dns.rdata.from_wire(rr.rclass, rr.type, rr.rdata, 0, len(rr.rdata))
		fp.write(pack('H', len(rr.rdata)))
#		print "type ", rr.type, "length ", len(rr.rdata)
#		OPT has length 0 - it should have no rdata
		rdata.to_wire(fp)
	except:

		try:
#			if rr.rdata[0] != '\#':
			rdata = dns.rdata.from_text(rr.rclass, rr.type, rr.rdata)
			try:
				fp.write(pack('H', len(rdata)))
			except:
				# no length - no way to know wire length
				try:
#					print "unknown length for type", rr.type
#						if rr.type == 2:
#							fp.seek(1, 1)
#							old = fp.tell()
#							rdata.to_wire(fp)
#							size = fp.tell() - old
#							fp.seek(-(size + 1), 1)
#							fp.write(pack('B', size))
#							fp.seek(0, 2)
#						else:
					rdata.to_wire(fp)
				except Exception as e:
					print 'Error, exiting: ', e
					sys.exit(-1)
		except Exception as e:
			print 'Error,', e
			print 'could not parse rdata type: ', rr.type
			print 'dumping directly (hopefully it is SOA)'
# i need to do some kind of rollback here...
			fp.write(pack('H', len(rr.rdata)))
			fp.write(rr.rdata)


	if rr.type == 50:
		f = open('nsec3debug', 'wb')
		rdata.to_wire(f)
		f.close()
Пример #6
0
 def test_digestable_no_downcasing(self):
     # Make sure that currently known types with domain names that
     # are NOT supposed to be downcased when canonicalized are
     # handled properly.
     #
     cases = [
         ('HIP', '2 200100107B1A74DF365639CC39F1D578 Ym9ndXM= NAME name'),
         ('IPSECKEY', '10 3 2 NAME Ym9ndXM='),
         ('NSEC', 'NAME A'),
     ]
     for rdtype, text in cases:
         origin = dns.name.from_text('example')
         rdata = dns.rdata.from_text(dns.rdataclass.IN, rdtype, text,
                                     origin=origin, relativize=False)
         digestable_wire = rdata.to_digestable(origin)
         expected_wire = rdata.to_wire(origin=origin)
         self.assertEqual(digestable_wire, expected_wire)