From 16650c6fa27bd1b8f65a8d43800e4bfb6afcb1ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20K=C4=99pie=C5=84?= Date: Wed, 16 Aug 2017 11:10:24 +0200 Subject: [PATCH] [v9_10] Ensure consistent handling of -4/-6 command line options in all tools 4690. [bug] Command line options -4/-6 were handled inconsistently between tools. [RT #45632] (cherry picked from commit d6814700de754c28096c94dd903cc8aacf53bceb) --- CHANGES | 3 +++ bin/delv/delv.c | 20 +++++++++++++++++--- bin/delv/delv.docbook | 6 ++++-- bin/dig/dig.docbook | 6 ++++-- bin/dig/host.docbook | 6 ++++-- bin/named/lwresd.docbook | 6 ++++-- bin/named/named.docbook | 6 ++++-- bin/tests/system/digdelv/tests.sh | 8 ++++++++ 8 files changed, 48 insertions(+), 13 deletions(-) diff --git a/CHANGES b/CHANGES index bc2d60760f..381b1389ff 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,6 @@ +4690. [bug] Command line options -4/-6 were handled inconsistently + between tools. [RT #45632] + 4689. [cleanup] Turn on minimal responses for CDNSKEY and CDS in addition to DNSKEY and DS. Thanks to Tony Finch. [RT #45690] diff --git a/bin/delv/delv.c b/bin/delv/delv.c index 0d660c13f4..0a312bf4fa 100644 --- a/bin/delv/delv.c +++ b/bin/delv/delv.c @@ -1367,6 +1367,7 @@ dash_option(char *option, char *next, isc_boolean_t *open_type_class) { */ static void preparse_args(int argc, char **argv) { + isc_boolean_t ipv4only = ISC_FALSE, ipv6only = ISC_FALSE; char *option; for (argc--, argv++; argc > 0; argc--, argv++) { @@ -1374,10 +1375,23 @@ preparse_args(int argc, char **argv) { continue; option = &argv[0][1]; while (strpbrk(option, single_dash_opts) == &option[0]) { - if (option[0] == 'm') { + switch (option[0]) { + case 'm': isc_mem_debugging = ISC_MEM_DEBUGTRACE | ISC_MEM_DEBUGRECORD; - return; + break; + case '4': + if (ipv6only) { + fatal("only one of -4 and -6 allowed"); + } + ipv4only = ISC_TRUE; + break; + case '6': + if (ipv4only) { + fatal("only one of -4 and -6 allowed"); + } + ipv6only = ISC_TRUE; + break; } option = &option[1]; } @@ -1565,8 +1579,8 @@ main(int argc, char *argv[]) { struct sigaction sa; #endif - preparse_args(argc, argv); progname = argv[0]; + preparse_args(argc, argv); argc--; argv++; diff --git a/bin/delv/delv.docbook b/bin/delv/delv.docbook index ce040ed922..4c7d33c99c 100644 --- a/bin/delv/delv.docbook +++ b/bin/delv/delv.docbook @@ -51,8 +51,10 @@ delv @server - - + + + + diff --git a/bin/dig/dig.docbook b/bin/dig/dig.docbook index 2baa13eaa0..dad3138c15 100644 --- a/bin/dig/dig.docbook +++ b/bin/dig/dig.docbook @@ -79,8 +79,10 @@ - - + + + + name type class diff --git a/bin/dig/host.docbook b/bin/dig/host.docbook index 17eccf8a9d..06480a317a 100644 --- a/bin/dig/host.docbook +++ b/bin/dig/host.docbook @@ -68,8 +68,10 @@ - - + + + + name diff --git a/bin/named/lwresd.docbook b/bin/named/lwresd.docbook index bf370ba71f..b1a8d5dd68 100644 --- a/bin/named/lwresd.docbook +++ b/bin/named/lwresd.docbook @@ -72,8 +72,10 @@ - - + + + + diff --git a/bin/named/named.docbook b/bin/named/named.docbook index 2faca02a7c..4c31224169 100644 --- a/bin/named/named.docbook +++ b/bin/named/named.docbook @@ -62,8 +62,10 @@ named - - + + + + diff --git a/bin/tests/system/digdelv/tests.sh b/bin/tests/system/digdelv/tests.sh index d87b008e14..cfec83be96 100644 --- a/bin/tests/system/digdelv/tests.sh +++ b/bin/tests/system/digdelv/tests.sh @@ -337,6 +337,14 @@ if [ -x ${DELV} ] ; then if [ $ret != 0 ]; then echo "I:failed"; fi status=`expr $status + $ret` + n=`expr $n + 1` + echo "I:checking delv -4 -6 ($n)" + ret=0 + $DELV $DELVOPTS @10.53.0.3 -4 -6 A a.example > delv.out.test$n 2>&1 && ret=1 + grep "only one of -4 and -6 allowed" < delv.out.test$n > /dev/null || ret=1 + if [ $ret != 0 ]; then echo "I:failed"; fi + status=`expr $status + $ret` + n=`expr $n + 1` echo "I:checking delv with IPv6 on IPv4 does not work ($n)" if $TESTSOCK6 fd92:7065:b8e:ffff::3