" form of answers - global "
"option)\n"
" +[no]showbadcookie (Show BADCOOKIE message)\n"
+ " +[no]showbadvers (Show BADVERS message)\n"
" +[no]showsearch (Search with intermediate "
"results)\n"
" +[no]split=## (Split hex/base64 fields "
FULLCHECK("edns");
if (!state) {
lookup->edns = -1;
+ lookup->original_edns =
+ -1;
break;
}
if (value == NULL) {
goto exit_or_usage;
}
lookup->edns = num;
+ lookup->original_edns = num;
break;
case 'f':
FULLCHECK("ednsflags");
case 'w': /* showsearch */
switch (cmd[4]) {
case 'b':
- FULLCHECK("showbadcookie");
- lookup->showbadcookie = state;
+ switch (cmd[7]) {
+ case 'c':
+ FULLCHECK("showbadcookie");
+ lookup->showbadcookie = state;
+ break;
+ case 'v':
+ FULLCHECK("showbadvers");
+ lookup->showbadvers = state;
+ break;
+ default:
+ goto invalid_option;
+ }
break;
case 's':
FULLCHECK("showsearch");
BADCOOKIE rcode before retrying the request or not. The default
is to not show the messages.
+.. option:: +showbadvers, +noshowbadvers
+
+ This option toggles whether to show the message containing the
+ BADVERS rcode before retrying the request or not. The default
+ is to not show the messages.
+
.. option:: +showsearch, +noshowsearch
This option performs [or does not perform] a search showing intermediate results.
.idnout = idnout,
.udpsize = -1,
.edns = -1,
+ .original_edns = -1,
.recurse = true,
.retries = tries,
.comments = true,
}
looknew->showbadcookie = lookold->showbadcookie;
+ looknew->showbadvers = lookold->showbadvers;
looknew->sendcookie = lookold->sendcookie;
looknew->seenbadcookie = lookold->seenbadcookie;
looknew->badcookie = lookold->badcookie;
looknew->idnout = lookold->idnout;
looknew->udpsize = lookold->udpsize;
looknew->edns = lookold->edns;
+ looknew->original_edns = lookold->original_edns;
looknew->recurse = lookold->recurse;
looknew->aaonly = lookold->aaonly;
looknew->adflag = lookold->adflag;
}
domain = dns_fixedname_name(&lookup->fdomain);
dns_name_copy(name, domain);
+ lookup->edns = lookup->original_edns;
}
debug("adding server %s", namestr);
num = getaddresses(lookup, namestr, &lresult);
lookup->udpsize = DEFAULT_EDNS_BUFSIZE;
}
if (lookup->edns < 0) {
- lookup->edns = DEFAULT_EDNS_VERSION;
+ lookup->original_edns = lookup->edns =
+ DEFAULT_EDNS_VERSION;
}
if (lookup->nsid) {
if (msg->rcode == dns_rcode_badvers && msg->opt != NULL &&
(newedns = ednsvers(msg->opt)) < l->edns && l->ednsneg)
{
+ if (l->showbadvers) {
+ dighost_printmessage(query, &b, msg, true);
+ dighost_received(isc_buffer_usedlength(&b), &peer,
+ query);
+ }
/*
* Add minimum EDNS version required checks here if needed.
*/
section_answer, section_authority, section_question,
seenbadcookie, sendcookie, servfail_stops,
setqid, /*% use a speciied query ID */
- showbadcookie, stats, tcflag, tcp_keepalive, tcp_mode,
- tcp_mode_set, tls_mode, /*% connect using TLS */
- trace, /*% dig +trace */
+ showbadcookie, showbadvers, stats, tcflag, tcp_keepalive,
+ tcp_mode, tcp_mode_set, tls_mode, /*% connect using TLS */
+ trace, /*% dig +trace */
trace_root, /*% initial query for either +trace or +nssearch */
ttlunits, use_usec, waiting_connect, zflag;
char textname[MXNAME]; /*% Name we're going to be looking up */
int nsfound;
int16_t udpsize;
int16_t edns;
+ int16_t original_edns;
int16_t padding;
uint32_t ixfr_serial;
isc_buffer_t rdatabuf;