diff --git a/CHANGES b/CHANGES index 7de75422ed..963aab639a 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,5 @@ +3969. [test] Added 'delv' system test. [RT #36901] + 3968. [bug] Silence spurious log messages when using 'named -[46]'. [RT #37308] diff --git a/bin/delv/delv.c b/bin/delv/delv.c index 0bb874d461..955169167d 100644 --- a/bin/delv/delv.c +++ b/bin/delv/delv.c @@ -711,10 +711,17 @@ setup_dnsseckeys(dns_client_t *client) { #endif } - if (trust_anchor == NULL) + if (trust_anchor == NULL) { trust_anchor = isc_mem_strdup(mctx, "."); - if (dlv_anchor == NULL) + if (trust_anchor == NULL) + fatal("out of memory"); + } + + if (dlv_anchor == NULL) { dlv_anchor = isc_mem_strdup(mctx, "dlv.isc.org"); + if (dlv_anchor == NULL) + fatal("out of memory"); + } CHECK(convert_name(&afn, &anchor_name, trust_anchor)); CHECK(convert_name(&dfn, &dlv_name, dlv_anchor)); @@ -1026,8 +1033,11 @@ plus_option(char *option) { if (state && no_sigs) break; dlv_validation = state; - if (value != NULL) + if (value != NULL) { dlv_anchor = isc_mem_strdup(mctx, value); + if (dlv_anchor == NULL) + fatal("out of memory"); + } break; case 'n': /* dnssec */ FULLCHECK("dnssec"); @@ -1059,8 +1069,11 @@ plus_option(char *option) { if (state && no_sigs) break; root_validation = state; - if (value != NULL) + if (value != NULL) { trust_anchor = isc_mem_strdup(mctx, value); + if (trust_anchor == NULL) + fatal("out of memory"); + } break; case 'r': /* rrcomments */ FULLCHECK("rrcomments"); @@ -1231,6 +1244,8 @@ dash_option(char *option, char *next, isc_boolean_t *open_type_class) { switch (opt) { case 'a': anchorfile = isc_mem_strdup(mctx, value); + if (anchorfile == NULL) + fatal("out of memory"); return (value_from_next); case 'b': hash = strchr(value, '#'); @@ -1289,11 +1304,13 @@ dash_option(char *option, char *next, isc_boolean_t *open_type_class) { port = value; return (value_from_next); case 'q': - if (qname != NULL) { + if (curqname != NULL) { warn("extra query name"); - isc_mem_free(mctx, qname); + isc_mem_free(mctx, curqname); } - curqname = value; + curqname = isc_mem_strdup(mctx, value); + if (curqname == NULL) + fatal("out of memory"); return (value_from_next); case 't': *open_type_class = ISC_FALSE; @@ -1316,9 +1333,13 @@ dash_option(char *option, char *next, isc_boolean_t *open_type_class) { result = get_reverse(textname, sizeof(textname), value, ISC_FALSE); if (result == ISC_R_SUCCESS) { - if (curqname != NULL) + if (curqname != NULL) { + isc_mem_free(mctx, curqname); warn("extra query name"); + } curqname = isc_mem_strdup(mctx, textname); + if (curqname == NULL) + fatal("out of memory"); if (typeset) warn("extra query type"); qtype = dns_rdatatype_ptr; @@ -1426,8 +1447,11 @@ parse_args(int argc, char **argv) { } } - if (curqname == NULL) - curqname = argv[0]; + if (curqname == NULL) { + curqname = isc_mem_strdup(mctx, argv[0]); + if (curqname == NULL) + fatal("out of memory"); + } } } @@ -1440,10 +1464,13 @@ parse_args(int argc, char **argv) { if (curqname == NULL) { qname = isc_mem_strdup(mctx, "."); + if (qname == NULL) + fatal("out of memory"); + if (!typeset) qtype = dns_rdatatype_ns; } else - qname = isc_mem_strdup(mctx, curqname); + qname = curqname; } static isc_result_t diff --git a/bin/tests/system/conf.sh.in b/bin/tests/system/conf.sh.in index ae576cc1b6..a7ea35a871 100644 --- a/bin/tests/system/conf.sh.in +++ b/bin/tests/system/conf.sh.in @@ -66,8 +66,8 @@ RANDFILE=$TOP/bin/tests/system/random.data # v6synth SUBDIRS="acl additional allow_query addzone autosign builtin cacheclean case checkconf @CHECKDS@ checknames checkzone - @COVERAGE@ database dlv dlvauto dlz dlzexternal dname dns64 - dnssec dsdigest dscp ecdsa ednscompliance emptyzones + @COVERAGE@ database delv dlv dlvauto dlz dlzexternal + dname dns64 dnssec dsdigest dscp ecdsa ednscompliance emptyzones filter-aaaa formerr forward geoip glue gost ixfr inline limits logfileconfig lwresd masterfile masterformat metadata notify nslookup nsupdate pending @PKCS11_TEST@ redirect diff --git a/bin/tests/system/delv/clean.sh b/bin/tests/system/delv/clean.sh new file mode 100644 index 0000000000..e10c430f82 --- /dev/null +++ b/bin/tests/system/delv/clean.sh @@ -0,0 +1,19 @@ +#!/bin/sh +# +# Copyright (C) 2014 Internet Systems Consortium, Inc. ("ISC") +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH +# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, +# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. + +rm -f delv.out.test* +rm -f */named.memstats +rm -f */named.run diff --git a/bin/tests/system/delv/ns1/named.conf b/bin/tests/system/delv/ns1/named.conf new file mode 100644 index 0000000000..8f3cc63d8a --- /dev/null +++ b/bin/tests/system/delv/ns1/named.conf @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2014 Internet Systems Consortium, Inc. ("ISC") + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH + * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, + * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE + * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +// NS1 + +controls { /* empty */ }; + +options { + query-source address 10.53.0.1; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.1; }; + listen-on-v6 { fd92:7065:b8e:ffff::1; }; + recursion no; + notify yes; + dnssec-enable no; + dnssec-validation no; +}; + +zone "." { + type master; + file "root.db"; +}; + diff --git a/bin/tests/system/delv/ns1/root.db b/bin/tests/system/delv/ns1/root.db new file mode 100644 index 0000000000..cce91c375b --- /dev/null +++ b/bin/tests/system/delv/ns1/root.db @@ -0,0 +1,29 @@ +; Copyright (C) 2014 Internet Systems Consortium, Inc. ("ISC") +; +; Permission to use, copy, modify, and/or distribute this software for any +; purpose with or without fee is hereby granted, provided that the above +; copyright notice and this permission notice appear in all copies. +; +; THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH +; REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +; AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, +; INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +; LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +; OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +; PERFORMANCE OF THIS SOFTWARE. + +$TTL 300 +. IN SOA gson.nominum.com. a.root.servers.nil. ( + 2000042100 ; serial + 600 ; refresh + 600 ; retry + 1200 ; expire + 600 ; minimum + ) +. NS a.root-servers.nil. +a.root-servers.nil. A 10.53.0.1 +a.root-servers.nil. AAAA fd92:7065:b8e:ffff::1 + +example. NS ns2.example. +ns2.example. A 10.53.0.2 +ns2.example. AAAA fd92:7065:b8e:ffff::2 diff --git a/bin/tests/system/delv/ns2/example.db b/bin/tests/system/delv/ns2/example.db new file mode 100644 index 0000000000..b94dc32b8c --- /dev/null +++ b/bin/tests/system/delv/ns2/example.db @@ -0,0 +1,39 @@ +; Copyright (C) 2014 Internet Systems Consortium, Inc. ("ISC") +; +; Permission to use, copy, modify, and/or distribute this software for any +; purpose with or without fee is hereby granted, provided that the above +; copyright notice and this permission notice appear in all copies. +; +; THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH +; REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +; AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, +; INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +; LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +; OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +; PERFORMANCE OF THIS SOFTWARE. + +$TTL 300 ; 5 minutes +@ IN SOA mname1. . ( + 2000042407 ; serial + 20 ; refresh (20 seconds) + 20 ; retry (20 seconds) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) + NS ns2 + NS ns3 +ns2 A 10.53.0.2 +ns2 AAAA fd92:7065:b8e:ffff::2 +ns3 A 10.53.0.3 +ns3 AAAA fd92:7065:b8e:ffff::3 + +a A 10.0.0.1 +a AAAA fd92:7065:b8e:ffff::1 +b A 10.0.0.2 +b AAAA fd92:7065:b8e:ffff::2 +c A 10.0.0.3 +c AAAA fd92:7065:b8e:ffff::3 + +foo TXT "testing" +foo A 10.0.1.0 +foo SSHFP 2 1 123456789abcdef67890123456789abcdef67890 diff --git a/bin/tests/system/delv/ns2/named.conf b/bin/tests/system/delv/ns2/named.conf new file mode 100644 index 0000000000..04bf1aadd9 --- /dev/null +++ b/bin/tests/system/delv/ns2/named.conf @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2014 Internet Systems Consortium, Inc. ("ISC") + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH + * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, + * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE + * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +// NS2 + +controls { /* empty */ }; + +options { + query-source address 10.53.0.2; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.2; }; + listen-on-v6 { fd92:7065:b8e:ffff::2; }; + recursion no; + dnssec-enable no; + dnssec-validation no; +}; + +zone "." { + type hint; + file "../../common/root.hint"; +}; + +zone "example" { + type master; + file "example.db"; +}; diff --git a/bin/tests/system/delv/ns3/named.conf b/bin/tests/system/delv/ns3/named.conf new file mode 100644 index 0000000000..9033663703 --- /dev/null +++ b/bin/tests/system/delv/ns3/named.conf @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2014 Internet Systems Consortium, Inc. ("ISC") + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH + * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, + * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE + * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +// NS4 + +controls { /* empty */ }; + +options { + query-source address 10.53.0.3 dscp 1; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.3; }; + listen-on-v6 { fd92:7065:b8e:ffff::3; }; + recursion yes; + acache-enable yes; + dnssec-enable no; + dnssec-validation no; +}; + +zone "." { + type hint; + file "../../common/root.hint"; +}; diff --git a/bin/tests/system/delv/tests.sh b/bin/tests/system/delv/tests.sh new file mode 100644 index 0000000000..2b0d1f98bf --- /dev/null +++ b/bin/tests/system/delv/tests.sh @@ -0,0 +1,72 @@ +# Copyright (C) 2014 Internet Systems Consortium, Inc. ("ISC") +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH +# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, +# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. + +SYSTEMTESTTOP=.. +. $SYSTEMTESTTOP/conf.sh + +status=0 +n=0 +# using delv insecure mode as not testing dnssec here +DELVOPTS="-i -p 5300" + +if [ -x ${DELV} ] ; then + n=`expr $n + 1` + echo "I:checking delv short form works ($n)" + ret=0 + $DELV $DELVOPTS @10.53.0.3 +short a a.example > delv.out.test$n || ret=1 + if test `wc -l < delv.out.test$n` != 1 ; then ret=1 ; fi + if [ $ret != 0 ]; then echo "I:failed"; fi + status=`expr $status + $ret` + + n=`expr $n + 1` + echo "I:checking delv split width works ($n)" + ret=0 + $DELV $DELVOPTS @10.53.0.3 +split=4 -t sshfp foo.example > delv.out.test$n || ret=1 + grep " 9ABC DEF6 7890 " < delv.out.test$n > /dev/null || ret=1 + if [ $ret != 0 ]; then echo "I:failed"; fi + status=`expr $status + $ret` + + echo "I:checking delv with IPv6 on IPv4 does not work ($n)" + n=`expr $n + 1` + if $TESTSOCK6 fd92:7065:b8e:ffff::3 + then + ret=0 + # following should fail because @IPv4 overrides earlier @IPv6 above + # and -6 forces IPv6 so this should fail, such as: + # ;; getaddrinfo failed: hostname nor servname provided, or not known + # ;; resolution failed: not found + # note that delv returns success even on lookup failure + $DELV $DELVOPTS @fd92:7065:b8e:ffff::3 @10.53.0.3 -6 -t txt foo.example > delv.out.test$n 2>&1 || ret=1 + # it should have no results but error output + grep "testing" < delv.out.test$n > /dev/null && ret=1 + grep "getaddrinfo failed:" < delv.out.test$n > /dev/null || ret=1 + if [ $ret != 0 ]; then echo "I:failed"; fi + status=`expr $status + $ret` + else + echo "I:IPv6 unavailable; skipping" + fi + + n=`expr $n + 1` + echo "I:checking delv with reverse lookup works ($n)" + ret=0 + $DELV $DELVOPTS @10.53.0.3 -x 127.0.0.1 > delv.out.test$n 2>&1 || ret=1 + # doesn't matter if has answer + grep -i "127\.in-addr\.arpa\." < delv.out.test$n > /dev/null || ret=1 + if [ $ret != 0 ]; then echo "I:failed"; fi + status=`expr $status + $ret` + + exit $status +else + echo "$DELV is needed, so skipping these delv tests" +fi