- unbound-host does not fail on type ANY.

- Fixed wireparse failure to put RRSIGs together with data in some
	  long ANY mix cases, which fixes validation failures.


git-svn-id: file:///svn/unbound/trunk@1903 be551aaa-1e26-0410-a405-d3ace91eadb9
This commit is contained in:
Wouter Wijngaards 2009-11-13 14:51:36 +00:00
parent a4a7894f79
commit 23af66982c
6 changed files with 69 additions and 17 deletions

View file

@ -1,5 +1,8 @@
13 November 2009: Wouter 13 November 2009: Wouter
- Fixed validation failure for CNAME to optout NSEC3 nodata answer. - Fixed validation failure for CNAME to optout NSEC3 nodata answer.
- unbound-host does not fail on type ANY.
- Fixed wireparse failure to put RRSIGs together with data in some
long ANY mix cases, which fixes validation failures.
12 November 2009: Wouter 12 November 2009: Wouter
- iana portlist updated. - iana portlist updated.

View file

@ -200,24 +200,18 @@ secure_str(struct ub_result* result)
static void static void
pretty_type(char* s, size_t len, int t) pretty_type(char* s, size_t len, int t)
{ {
const ldns_rr_descriptor *d = ldns_rr_descript((uint16_t)t); char* d = ldns_rr_type2str(t);
if(d) { snprintf(s, len, "%s", d);
snprintf(s, len, "%s", d->_name); free(d);
} else {
snprintf(s, len, "TYPE%d", t);
}
} }
/** nice string for class */ /** nice string for class */
static void static void
pretty_class(char* s, size_t len, int c) pretty_class(char* s, size_t len, int c)
{ {
ldns_lookup_table *cl = ldns_lookup_by_id(ldns_rr_classes, c); char* d = ldns_rr_class2str(c);
if(cl) { snprintf(s, len, "%s", d);
snprintf(s, len, "%s", cl->name); free(d);
} else {
snprintf(s, len, "CLASS%d", c);
}
} }
/** nice string for rcode */ /** nice string for rcode */
@ -333,7 +327,26 @@ pretty_output(char* q, int t, int c, struct ub_result* result, int docname)
printf(" has no domain name ptr"); printf(" has no domain name ptr");
else if(t == LDNS_RR_TYPE_MX) else if(t == LDNS_RR_TYPE_MX)
printf(" has no mail handler record"); printf(" has no mail handler record");
else printf(" has no %s record", tstr); else if(t == LDNS_RR_TYPE_ANY) {
ldns_pkt* p = NULL;
if(ldns_wire2pkt(&p, result->answer_packet,
result->answer_len) == LDNS_STATUS_OK){
if(ldns_rr_list_rr_count(
ldns_pkt_answer(p)) == 0)
printf(" has no records\n");
else {
printf(" ANY:\n");
ldns_rr_list_print(stdout,
ldns_pkt_answer(p));
}
} else {
fprintf(stderr, "could not parse "
"reply packet to ANY query\n");
exit(1);
}
ldns_pkt_free(p);
} else printf(" has no %s record", tstr);
printf(" %s\n", secstatus); printf(" %s\n", secstatus);
} }
/* else: emptiness to indicate no data */ /* else: emptiness to indicate no data */

View file

@ -518,6 +518,7 @@ void msgparse_test()
matches_nolocation = 1; /* RR order not important for the next test */ matches_nolocation = 1; /* RR order not important for the next test */
testfromdrillfile(pkt, &alloc, out, "testdata/test_packets.6"); testfromdrillfile(pkt, &alloc, out, "testdata/test_packets.6");
testfromdrillfile(pkt, &alloc, out, "testdata/test_packets.7");
matches_nolocation = 0; matches_nolocation = 0;
/* cleanup */ /* cleanup */

19
testdata/test_packets.7 vendored Normal file
View file

@ -0,0 +1,19 @@
; switch.ch ANY with strange RRSIG ordering.
B0518510000100170000001A067377697463680263680000FF0001C00C0006000100015180002A067363736E6D73C00C0A686F73746D6173746572C00C77C09B050000708000001C2000093A80000000B4C00C00230001000151800024006400320173075349502B44325500045F736970045F7564700673776974636802636800C076000100010000003C0004823B8A22C076001C00010000003C0010200106200000001B000000000000000BC076002E000100015180007D00060502000151804B24A0F24AFD13F2FC60067377697463680263680077281AD5F78041CC354CA718703D133A36D0CE63C8E1FA0378DA2B3B4EB935E241225C23F786F5365D2D
F39E8A84702BEDA2591A82BCBDF4E8DD9094296CED48301DAA5DD71B0B8E60E69A858B8FD1ABD555C6711911D966FDFED53C9AC5A477C0CB002E00010002A300007D000205020002A3004B11ADE94AEA20E9FC600673776974636802636800BE4DD85BC15B5AB0575FA1E4ACE582D25A853D8A914FE431B2D057D56CE07B8017FC0994664AFB4B3B830B7E9A88B5C3FB7DACA5921B886BF6B20D4A08E24C73FCE86FDC3738DDBAAF8DB36321FABE9DCE94479C752AABB17B7FAF3D1B2B3F53C154002E00010000003C007D000105020000003C4B11ADE94AEA20E9FC60067377697463680263680000F41CF28713DCE591995F7FABB71832669065F359F2BE0F
1369BFA762005BD24ED3B9EB0E3706BC00F38810D2B60389AE55A5481B2662F76D09C632C9A0171F7ECD22D58E99106A1D5F3A4599AAD7287ECD20FB96BD6FBE4ADB87CACE63D358C1DD002E00010000012C007D000F05020000012C4B11ADE94AEA20E9FC600673776974636802636800DD53A4C140E5717101092724AD0CB23D2C47D5486711171C0BCFADA2B161202A964A663419C1A077E6D9ADAFD2749DF11930F03AED5E295A2C592E4EE9816E6AF1BF504DDEC5B99370BFA58330F165807DE37FD96BAFF859F263F37B16A37D4DC266002E00010000003C007D001C05020000003C4B11ADE94AEA20E9FC6006737769746368026368007A30FB0344B3
5150669907042E30A66B1F674DE2E659710BC63B900522C22C209BDE6BBD7660F0BA579E2D497E3BA5C8098EE2B4F6247B6CA182AC9473B47738367FC67AB4D4CD5341B51F50A3AF16BA576E3F3C7C893E44AE04180FF631574DC2EF002E000100015180007D001D0502000151804B11ADE94AEA20E9FC60067377697463680263680028FB119F1E1F9DCDD48F3FC65030CA2AB06700A9331030EE4DFB933C6E6EA93EC22867117951F7E820D9D069DC44F78B7F5C740154AFCC7B8749DA956FFB80A9AEA311D503404A3CB8D771A1486F8E388F8CC410C7C433551FEE2DC8A8B89312C378002E000100015180007D00230502000151804B11ADE94AEA20E9FC
6006737769746368026368004930DC3A37A7BBE7585E62BFC6C024F68A421977CA990DF5D60CB6313A8F24829CAACC70F284DC4184CBA8C774BAFD72D418F81E5E14195BE398CC532824933260536DF58BD66A395D46FFDFF9F9902FD42E7C699A6A3EF50D22D3648829DAB3C401002F0001000000B4001F0672657331303203313032067377697463680263680000076201000C100380C483002E0001000000B4007D002F0502000000B44B12C1EC4AEB34ECFC600673776974636802636800039A5F99A0EAA9F55C2D138044208FC77DC2C0B85968CE642F9D6B1F7D5F83A800FD8908855FC55F7177CFCFCB5F1F2703C2BC5CDDC3346062BD1DFB28CFD91D
7E2B8DF25BEDBD2ADAC1539224DAF7BD8B4CC265955B0169DBFFF55DBEB92E6CC4B5003000010001518001080101030503010001BC06344005077BCC13F4DC094F157C2E49A33E9ED3835E32401A0BE8DB36214601E6D848CEF9A2A34788090081E953DCAD10A8A9B98E5ACBDF0B69AD0F106FC3385C3293253E0A14B78BAD1BD7CCF86B96209EAD12DFEDF02CF5B7BEB524F5753248B4354C5451277AF881CD5A4E1710C3B69ADB4FDD5C5A09B20F3324E658AD29D5E1BD4A1A17853DEF9CFBF1C80718850EE179A4486CA6CFCA577E9CDA80D35AC732D275E6678FDA0F1042880A7F4BCAF49F74CDF948D7E71586B10F9D908DC3C5C81232DC4C36218D7582
E5CD9960272EDFD95CB613352C49393CFC07C94BF871292B8895493731EB8942D0E588DB49BFA4979AF5A7D900DCEE20FE80D6F3C4B5003000010001518000680100030503010001D7AE707CBD0F618702D448E87AF0020008AC85EBA502F5F39D2F396D1581A99F3928CDA7E2FF138224CED79D1F1CE7D303DAEE1A4323F79416FD892D7290FBEA3C00FA5DC25F4BFDA357953A047597F1560D768BCBB367102933102E8353E415C4B5003000010001518000680100030503010001E0835B08C93B89970736B288A7F8A7BC1A27B1307949EC4EC016931A5F10B722E22695741BA0CD83DFB19220F51E9320F932DCBA0F00F9888C27367DB1642A7AC623B849
8D7006311C11248069AC5C78057652B23B2F19BE8C182F9EC474A55FC4B5002E000100015180011D00300502000151804B24A0F24AFD13F2AB3D0673776974636802636800B1F71FCBF44A0FDA3F339DC419113966FCD4DDA1A032681F5018E3FC2E3740105A2A3A3DBC66EE954BB9518C4AFA0F0463001D68BD8578D52085B73CB4777E13C07D3E479F925D3EA2133FA4D6AE1F3FF8AABD9A8CA37501131A5DA53780C6F697EABE2AE5027D96451B82EAE2E0AB9F62BA518D41C49C1D001D15F31B115F7656C6294E23C7F9CBFA7CA28A5B5F6E56A61C08238802F4342B7DF893013328BB638EA81A39ADE7BC737E097EFDA9A1F6E929AE49AE40E275369E48
9E9ACFF2639EF00665FEFC67EB7F384AF0E4C6514445C6F4F8AA0C96137B45CD9FF1E075002FD75060E67AD07430365998CF5AE2AF1D6DC2F10CE7267BF320C40B62CF2C97C73A002E000100015180007D00300502000151804B24A0F24AFD13F2FC6006737769746368026368004AA60548E8E119C5028898B96F3E719947B0E6EE1E867B861022342D79E09B38540ABC2F7D2BE2F257F8B090AD21743A613627F03ECF18FEC2EDEB5225225F431FA76573BB94DADF6FC20FB09896D2C8248FB3DD3F0CD1CEC09CCC918299B23BC863000200010002A3000002C027C863000200010002A3000009066D6572617069C863C863001D0001000151800010001216
138A2AAAA981D5657900994648C863000F00010000012C000C001407616C6574736368C863C863000F00010000012C000A0014056D6564656CC86306616E75626973C86300010001000151800004823B0A5C0865737472656C6C61C86300010001000151800004823B6C6FC8E8000100010002A3000004823BD30AC8E8001C00010002A300001020010620000000000000000000000005C027000100010002A3000004823B011EC027000100010002A3000004823B0A1EC027001C00010002A300001020010620000000000000000000000001C933000100010000012C0004823B6C26C933000100010000012C0004823B6C27C933001C00010000012C001020
0106200000001402144FFFFE754774C933001C00010000012C0010200106200000001402144FFFFE754775C91B000100010000012C0004823B8A1AC91B000100010000012C0004823B8A1BC91B001C00010000012C0010200106200000001B0203BAFFFEBE9059C91B001C00010000012C0010200106200000001B0203BAFFFEBE905AC06C002E00010000012C007D002105040000012C4B11ADE94AEA20E9FC600673776974636802636800976C32190811F36B7EB9AF4D6F0A19E0CEE36B0293D8F956D43CDB55A9E7E07079590DB7EF6BC21E8AB71EEC0C7FEF4F6654C30A594118E0879FE0419B3F081C55C5C79464FB4E22B47A7342117613CA9EFAB15F
B6BD39DFC78DE09EDD8C84EEC93B002E000100015180007D00010503000151804B11ADE94AEA20E9FC6006737769746368026368002C0DBE38052528746486C66537C3605EC7B3EDCB661F9833AE84BFFAF581FEE5CE430C349B3F33E9564CFCC5D761F2FE04C7CDACE04543A2BA0386E86A74C2608ACE110A17A3E21342F4D3247D97340C2BF599FF73A46F870EB43D77CFDEA1CFC952002E000100015180007D00010503000151804B11ADE94AEA20E9FC6006737769746368026368005F3C8F014D97512C6EE50BEEB1436B2735438D21383291FC5CFFF824ED091BFBBA2EFB6F375B89CAA75A82DEED0BBDCE9CEDD342D029D7AB934FA41968A561C19840
3FCAB16C7D6145F2F9B864CB73AB12D6BA0E4BF8B57FEF274A638A908E63C8E8002E00010002A300007D000105030002A3004B11ADE94AEA20E9FC600673776974636802636800DCA5BD623C5D2F4F05A9560A1529FD438FBC535898AD50AE9FE275372F18222302FBAA104BF199C119F69ABF8732BBB0123341F6CEDB586CD19918914C04CFBD2EBB8318C28899123F9F0F906275756DF005ACFAAF57DE18DBF32A11CB86F45EC8E8002E00010002A300007D001C05030002A3004B11ADE94AEA20E9FC60067377697463680263680086533D7CE4D47F70A42B4FE06CF2F5B3C30308130533F184D838436E61952148946224F0CEE10A2BE3931A0B2A339385
A608C7155005EBEDCA2176A559EFAF28D5DA1E91F540874BAA1C46BB08B1BAAE1812699A18139CF02851AB058D044DB8C027002E00010002A300007D000105030002A3004B11ADE94AEA20E9FC60067377697463680263680077107EC5D87E073BDE7E022FD121A8E0D6FF851C38633197FC0C16900C916F617EBB895E985476BB68B62025C5378EBC8F6949CF045493041D7E0CBA75BA11F2DE6C0E0CBE40EE77BF9C72CF2D9789DFF31D39CFA37277FEE26D1685CAD8EF13C027002E00010002A300007D001C05030002A3004B11ADE94AEA20E9FC600673776974636802636800AF3A14ECD3CB4138D4335C4C21A8A11938100397E939D167C3AAD6BE357E
13BBDA2EC641FB23993A72ED6606C8C85E0D1660CC1770769697CEE7EB8E6474714984D7FF41FBBE48FF4A70669101BF00320340B82DC590B2C19D0006841121DC6AC933002E00010000012C007D000105030000012C4B11ADE94AEA20E9FC600673776974636802636800561C052414445D427CE00A40ACE2DA2EC168523823830CA724B087B8116F46B3CD051C5EC5874F6FC75CF6BA846279E469C474A75F9334242BB66FDD367C73B8BBC3F8748736BC5E6AED8B9B7C5FB5FE2DEDFBF46B403BC173DE958C038CFCCAC933002E00010000012C007D001C05030000012C4B11ADE94AEA20E9FC600673776974636802636800A6F44063C12A5A8BF5BCFADD
745C5B3915E463DA478131E636347EED414675023BBCA5BA2AABEC2FA3DF976A2343B4AA3403D1AFA3D470D25812BD1A319FBB5B833244D0FA18A59BB69ABB77BBDB3D7F62740D3871A69A5B9D43331D78AB8AE8C91B002E00010000012C007D000105030000012C4B11ADE94AEA20E9FC6006737769746368026368008906D2CFEFC3AA652125DD021CAB6392EBC4A9B4B3CFE3B07E4AFE7DA3263C7B8CE5DC3B66DA45D120E75B3D49ADC1F7D2E9A04A31760698FCFDEAB4AC82915D8E0AD2494DB4F11C02E115C3BD47DC8E57EDA7805BF0E7820A445F93A07698DF0000291000000080000000

View file

@ -142,11 +142,13 @@ ENTRY_END
STEP 10 CHECK_ANSWER STEP 10 CHECK_ANSWER
ENTRY_BEGIN ENTRY_BEGIN
MATCH all MATCH all
REPLY QR RD RA SERVFAIL ; insecure! not bogus! (due to optout)
REPLY QR RD RA NOERROR
SECTION QUESTION SECTION QUESTION
a.z.w.example. IN AAAA a.z.w.example. IN AAAA
SECTION ANSWER SECTION ANSWER
SECTION AUTHORITY SECTION AUTHORITY
example. 3600 IN SOA ns1.example. bugs.x.w.example. 1 3600 300 3600000 3600
SECTION ADDITIONAL SECTION ADDITIONAL
ENTRY_END ENTRY_END

View file

@ -395,7 +395,8 @@ change_rrsig_rrset(struct rrset_parse* sigset, struct msg_parse* msg,
} }
if(!moveover_rrsigs(pkt, region, sigset, dataset, if(!moveover_rrsigs(pkt, region, sigset, dataset,
msg->qtype == LDNS_RR_TYPE_RRSIG || msg->qtype == LDNS_RR_TYPE_RRSIG ||
msg->qtype == LDNS_RR_TYPE_ANY )) (msg->qtype == LDNS_RR_TYPE_ANY &&
section != LDNS_SECTION_ANSWER) ))
return NULL; return NULL;
return dataset; return dataset;
} }
@ -456,7 +457,8 @@ find_rrset(struct msg_parse* msg, ldns_buffer* pkt, uint8_t* dname,
if(type == *prev_type && dclass == *prev_dclass && if(type == *prev_type && dclass == *prev_dclass &&
dnamelen == *prev_dnamelen && dnamelen == *prev_dnamelen &&
smart_compare(pkt, dname, *prev_dname_first, smart_compare(pkt, dname, *prev_dname_first,
*prev_dname_last) == 0) { *prev_dname_last) == 0 &&
type != LDNS_RR_TYPE_RRSIG) {
/* same as previous */ /* same as previous */
*prev_dname_last = dname; *prev_dname_last = dname;
return 1; return 1;
@ -816,7 +818,19 @@ parse_section(ldns_buffer* pkt, struct msg_parse* msg,
ldns_buffer_read(pkt, &dclass, sizeof(dclass)); ldns_buffer_read(pkt, &dclass, sizeof(dclass));
if(0) { /* debug show what is being parsed. */ if(0) { /* debug show what is being parsed. */
fprintf(stderr, "parse of %s(%d)", if(type == LDNS_RR_TYPE_RRSIG) {
uint16_t t;
if(pkt_rrsig_covered(pkt,
ldns_buffer_current(pkt), &t))
fprintf(stderr, "parse of %s(%d) [%s(%d)]",
ldns_rr_descript(type)?
ldns_rr_descript(type)->_name: "??",
(int)type,
ldns_rr_descript(t)?
ldns_rr_descript(t)->_name: "??",
(int)t);
} else
fprintf(stderr, "parse of %s(%d)",
ldns_rr_descript(type)? ldns_rr_descript(type)?
ldns_rr_descript(type)->_name: "??", ldns_rr_descript(type)->_name: "??",
(int)type); (int)type);