From: Kees Monshouwer Date: Fri, 7 Apr 2017 20:51:06 +0000 (+0200) Subject: signpipe stumbles over interrupted rrsets X-Git-Tag: rec-4.1.0-alpha1~164^2~1 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=75f2589f0e48ded7c4e9cb3eba1ccad19b128206;p=thirdparty%2Fpdns.git signpipe stumbles over interrupted rrsets --- diff --git a/pdns/tcpreceiver.cc b/pdns/tcpreceiver.cc index 6f71871721..e2540935a2 100644 --- a/pdns/tcpreceiver.cc +++ b/pdns/tcpreceiver.cc @@ -809,6 +809,11 @@ int TCPNameserver::doAXFR(const DNSName &target, shared_ptr q, int ou } } + // Group records by name and type, signpipe stumbles over interrupted rrsets + sort(zrrs.begin(), zrrs.end(), [](const DNSZoneRecord& a, const DNSZoneRecord& b) { + return tie(a.dr.d_name, a.dr.d_type) < tie(b.dr.d_name, b.dr.d_type); + }); + if(rectify) { // set auth for(DNSZoneRecord &zrr : zrrs) { diff --git a/regression-tests.nobackend/tinydns-data-check/expected_result b/regression-tests.nobackend/tinydns-data-check/expected_result index efb87fbd65..52547b5dab 100644 --- a/regression-tests.nobackend/tinydns-data-check/expected_result +++ b/regression-tests.nobackend/tinydns-data-check/expected_result @@ -1,5 +1,5 @@ 17a1219ca79020c1c67ad173a291d3c8 ../regression-tests/zones/example.com -b4feb02bd50f7b78cd5c40c7a560019c ../regression-tests/zones/test.com +fe49d2784b1bcc3b91ddd5619f0b6cc1 ../regression-tests/zones/test.com 005b3381db2a7dc70b690484f6ab7770 ../regression-tests/zones/test.dyndns 0861783f9f83acd9044278cda2528ee2 ../regression-tests/zones/wtest.com 42b442de632686e94bde75acf66cf524 ../regression-tests/zones/nztest.com diff --git a/regression-tests/tests/ent-axfr/expected_result b/regression-tests/tests/ent-axfr/expected_result index f24685c759..6d5692c511 100644 --- a/regression-tests/tests/ent-axfr/expected_result +++ b/regression-tests/tests/ent-axfr/expected_result @@ -10,7 +10,8 @@ blah.test.com. 86400 IN NSEC b.c.test.com. NS RRSIG NSEC counter.test.com. 86400 IN NSEC d.test.com. A RRSIG NSEC d.test.com. 86400 IN NSEC _double._tcp.dc.test.com. DNAME RRSIG NSEC enum.test.com. 86400 IN NSEC hightxt.test.com. NAPTR RRSIG NSEC -hightxt.test.com. 86400 IN NSEC ns1.test.com. TXT RRSIG NSEC SPF +hightxt.test.com. 86400 IN NSEC interrupted-rrset.test.com. TXT RRSIG NSEC SPF +interrupted-rrset.test.com. 86400 IN NSEC ns1.test.com. A TXT RRSIG NSEC ns1.test.com. 86400 IN NSEC ns2.test.com. A RRSIG NSEC ns2.test.com. 86400 IN NSEC server1.test.com. A RRSIG NSEC server1.test.com. 86400 IN NSEC *.test.test.com. A RP RRSIG NSEC diff --git a/regression-tests/tests/ent-axfr/expected_result.nsec3 b/regression-tests/tests/ent-axfr/expected_result.nsec3 index 10c1729790..b92a0b3134 100644 --- a/regression-tests/tests/ent-axfr/expected_result.nsec3 +++ b/regression-tests/tests/ent-axfr/expected_result.nsec3 @@ -13,7 +13,8 @@ aovp95mr44hqefrqus6nomsd944bm3vb.test.com. 86400 IN NSEC3 1 0 1 abcd B022O9DKSAJ b022o9dksaj737fh77e7kqqtj3om56ki.test.com. 86400 IN NSEC3 1 0 1 abcd DAFC69CV5N2TFCF6OVBVTV94DRGMQJO5 dafc69cv5n2tfcf6ovbvtv94drgmqjo5.test.com. 86400 IN NSEC3 1 0 1 abcd DE592K86U3HEVDJ57JPBT7J5KV7DOO78 TXT RRSIG de592k86u3hevdj57jpbt7j5kv7doo78.test.com. 86400 IN NSEC3 1 0 1 abcd EBAN51BJGUGORB20UNP5PEEC7S5D2EKA NS -eban51bjgugorb20unp5peec7s5d2eka.test.com. 86400 IN NSEC3 1 0 1 abcd H5855RVON2AASM8QV1NK49I1B2MKBEJP SRV RRSIG +eban51bjgugorb20unp5peec7s5d2eka.test.com. 86400 IN NSEC3 1 0 1 abcd ENG6HBK77VJMQFVG6S04HAJOA2201LII SRV RRSIG +eng6hbk77vjmqfvg6s04hajoa2201lii.test.com. 86400 IN NSEC3 1 0 1 abcd H5855RVON2AASM8QV1NK49I1B2MKBEJP A TXT RRSIG h5855rvon2aasm8qv1nk49i1b2mkbejp.test.com. 86400 IN NSEC3 1 0 1 abcd IAI9HIN25MEH689R5V5GTIFK8OM5DI0E A RRSIG iai9hin25meh689r5v5gtifk8om5di0e.test.com. 86400 IN NSEC3 1 0 1 abcd IGF4M7OTECACH14P0A6INGI7DBUAS5B2 A RRSIG igf4m7otecach14p0a6ingi7dbuas5b2.test.com. 86400 IN NSEC3 1 0 1 abcd N5RSKFSBG0UK5SSPJ595R6546HKK5VK1 A RP RRSIG diff --git a/regression-tests/tests/ent-axfr/expected_result.nsec3-optout b/regression-tests/tests/ent-axfr/expected_result.nsec3-optout index e83ea26554..07ea72cf83 100644 --- a/regression-tests/tests/ent-axfr/expected_result.nsec3-optout +++ b/regression-tests/tests/ent-axfr/expected_result.nsec3-optout @@ -12,7 +12,8 @@ a5labagjjevr86gh0hf3jg7nufhga5ar.test.com. 86400 IN NSEC3 1 1 1 abcd AOVP95MR44H aovp95mr44hqefrqus6nomsd944bm3vb.test.com. 86400 IN NSEC3 1 1 1 abcd B022O9DKSAJ737FH77E7KQQTJ3OM56KI A RRSIG b022o9dksaj737fh77e7kqqtj3om56ki.test.com. 86400 IN NSEC3 1 1 1 abcd DAFC69CV5N2TFCF6OVBVTV94DRGMQJO5 dafc69cv5n2tfcf6ovbvtv94drgmqjo5.test.com. 86400 IN NSEC3 1 1 1 abcd EBAN51BJGUGORB20UNP5PEEC7S5D2EKA TXT RRSIG -eban51bjgugorb20unp5peec7s5d2eka.test.com. 86400 IN NSEC3 1 1 1 abcd H5855RVON2AASM8QV1NK49I1B2MKBEJP SRV RRSIG +eban51bjgugorb20unp5peec7s5d2eka.test.com. 86400 IN NSEC3 1 1 1 abcd ENG6HBK77VJMQFVG6S04HAJOA2201LII SRV RRSIG +eng6hbk77vjmqfvg6s04hajoa2201lii.test.com. 86400 IN NSEC3 1 1 1 abcd H5855RVON2AASM8QV1NK49I1B2MKBEJP A TXT RRSIG h5855rvon2aasm8qv1nk49i1b2mkbejp.test.com. 86400 IN NSEC3 1 1 1 abcd IAI9HIN25MEH689R5V5GTIFK8OM5DI0E A RRSIG iai9hin25meh689r5v5gtifk8om5di0e.test.com. 86400 IN NSEC3 1 1 1 abcd IGF4M7OTECACH14P0A6INGI7DBUAS5B2 A RRSIG igf4m7otecach14p0a6ingi7dbuas5b2.test.com. 86400 IN NSEC3 1 1 1 abcd N5RSKFSBG0UK5SSPJ595R6546HKK5VK1 A RP RRSIG diff --git a/regression-tests/zones/test.com b/regression-tests/zones/test.com index bdfcbe5546..d040d06edf 100644 --- a/regression-tests/zones/test.com +++ b/regression-tests/zones/test.com @@ -38,3 +38,6 @@ hightxt IN TXT "v=spf1 mx ip4:78.46.192.210 –all" hightxt IN SPF "v=spf1 mx ip4:78.46.192.210 –all" d IN DNAME d2.test2.com. urc65226 IN TYPE65226 \# 3 414243 +interrupted-rrset IN A 1.1.1.1 +interrupted-rrset IN TXT "check AXFR signpipe" +interrupted-rrset IN A 2.2.2.2