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)
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))
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()
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)