+3846. [bug] "dig +notcp ixfr=<serial>" should result in a UDP
+ ixfr query. [RT #35980]
+
3845. [doc] Remove documention for yet to be committed RRL
changes. [RT #35897]
switch (cmd[1]) {
case 'c': /* tcp */
FULLCHECK("tcp");
- if (!is_batchfile)
+ if (!is_batchfile) {
lookup->tcp_mode = state;
+ lookup->tcp_mode_set = ISC_TRUE;
+ }
break;
case 'i': /* timeout */
FULLCHECK("timeout");
break;
case 'v':
FULLCHECK("vc");
- if (!is_batchfile)
+ if (!is_batchfile) {
lookup->tcp_mode = state;
+ lookup->tcp_mode_set = ISC_TRUE;
+ }
break;
default:
invalid_option:
(*lookup)->ixfr_serial = serial;
(*lookup)->section_question = plusquest;
(*lookup)->comments = pluscomm;
- (*lookup)->tcp_mode = ISC_TRUE;
+ if (!(*lookup)->tcp_mode_set)
+ (*lookup)->tcp_mode = ISC_TRUE;
} else {
(*lookup)->rdtype = rdtype;
(*lookup)->rdtypeset = ISC_TRUE;
lookup->section_question =
plusquest;
lookup->comments = pluscomm;
- lookup->tcp_mode = ISC_TRUE;
+ if (!lookup->tcp_mode_set)
+ lookup->tcp_mode = ISC_TRUE;
} else {
lookup->rdtype = rdtype;
lookup->rdtypeset = ISC_TRUE;
<term><option>+[no]tcp</option></term>
<listitem>
<para>
- Use [do not use] TCP when querying name servers. The default
- behavior is to use UDP unless an AXFR or IXFR query is
- requested, in
- which case a TCP connection is used.
+ Use [do not use] TCP when querying name servers. The
+ default behavior is to use UDP unless
+ an <literal>ixfr=N</literal> query is requested, in
+ which case the default is TCP.
+ AXFR queries always use TCP.
</para>
</listitem>
</varlistentry>
looknew->retries = tries;
looknew->nsfound = 0;
looknew->tcp_mode = ISC_FALSE;
+ looknew->tcp_mode_set = ISC_FALSE;
looknew->ip6_int = ISC_FALSE;
looknew->comments = ISC_TRUE;
looknew->stats = ISC_TRUE;
looknew->cdflag = lookold->cdflag;
looknew->ns_search_only = lookold->ns_search_only;
looknew->tcp_mode = lookold->tcp_mode;
+ looknew->tcp_mode_set = lookold->tcp_mode_set;
looknew->comments = lookold->comments;
looknew->stats = lookold->stats;
looknew->section_question = lookold->section_question;
trace, /*% dig +trace */
trace_root, /*% initial query for either +trace or +nssearch */
tcp_mode,
+ tcp_mode_set,
ip6_int,
comments,
stats,
rm -f ns3/*.jnl ns3/mytest.db ns3/subtest.db
rm -f ns4/*.jnl ns4/*.db
rm -f */named.memstats
-rm -f dig.out
+rm -f dig.out dig.out1 dig.out2 dig.out3
rm -f ns3/large.db
messages=`sed -n 's/^;;.*messages \([0-9]*\),.*/\1/p' dig.out`
test ${messages:-0} -gt 1 || { echo "I:failed"; status=1; }
+echo "I:test 'dig +notcp ixfr=<value>' vs 'dig ixfr=<value> +notcp' vs 'dig ixfr=<value>'"
+ret=0
+# Should be "switch to TCP" response
+$DIG +notcp ixfr=1 test -p 5300 @10.53.0.4 > dig.out1 || ret=1
+$DIG ixfr=1 +notcp test -p 5300 @10.53.0.4 > dig.out2 || ret=1
+$PERL ../digcomp.pl dig.out1 dig.out2 || ret=1
+awk '$4 == "SOA" { soacnt++} END {exit(soacnt == 1 ? 0 : 1);}' dig.out1 || ret=1
+awk '$4 == "SOA" { exit($7 == 4 ? 0 : 1);}' dig.out1 || ret=1
+# Should be incremental transfer.
+$DIG ixfr=1 test -p 5300 @10.53.0.4 > dig.out3 || ret=1
+awk '$4 == "SOA" { soacnt++} END {exit(soacnt == 6 ? 0 : 1);}' dig.out3 || ret=1
+if [ ${ret} != 0 ]; then
+ echo "I:failed";
+ status=1;
+fi
+
echo "I:exit status: $status"
exit $status