From 90d361d86661c53749ee94817089beb9f5ab9c55 Mon Sep 17 00:00:00 2001 From: Peter van Dijk Date: Tue, 18 Jun 2013 19:02:49 +0200 Subject: [PATCH] fix OPT inclusion in truncated responses to EDNS queries --- pdns/dnspacket.cc | 11 +++++++---- regression-tests/direct-rrsig/command | 2 +- regression-tests/direct-rrsig/expected_result | 1 + regression-tests/direct-rrsig/expected_result.dnssec | 6 +++++- 4 files changed, 14 insertions(+), 6 deletions(-) diff --git a/pdns/dnspacket.cc b/pdns/dnspacket.cc index 6c4707d6e..d7f082e68 100644 --- a/pdns/dnspacket.cc +++ b/pdns/dnspacket.cc @@ -310,7 +310,7 @@ void DNSPacket::wrapup() if(pos->d_place == DNSResourceRecord::ANSWER || pos->d_place == DNSResourceRecord::AUTHORITY) { pw.getHeader()->tc=1; } - goto noCommit; + goto truncated; } } @@ -323,12 +323,15 @@ void DNSPacket::wrapup() opts.push_back(make_pair(::arg().asNum("edns-subnet-option-number"), opt)); } + pw.commit(); + + truncated:; + if(!opts.empty() || d_haveednssection || d_dnssecOk) + { pw.addOpt(2800, 0, d_dnssecOk ? EDNSOpts::DNSSECOK : 0, opts); - - if(!pw.getHeader()->tc) // protect against double commit from addSignature pw.commit(); - noCommit:; + } } catch(std::exception& e) { L<