From: Peter van Dijk Date: Tue, 18 Jun 2013 17:02:49 +0000 (+0200) Subject: fix OPT inclusion in truncated responses to EDNS queries X-Git-Tag: rec-3.6.0-rc1~647 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=75fc7cbca4239cdeb9c8d9ce966a1154d7bfe841;p=pdns fix OPT inclusion in truncated responses to EDNS queries --- 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<