]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
[master] add delv system test
authorEvan Hunt <each@isc.org>
Fri, 3 Oct 2014 05:36:50 +0000 (22:36 -0700)
committerEvan Hunt <each@isc.org>
Fri, 3 Oct 2014 05:37:20 +0000 (22:37 -0700)
3969. [test] Added 'delv' system test. [RT #36901]

CHANGES
bin/delv/delv.c
bin/tests/system/conf.sh.in
bin/tests/system/delv/clean.sh [new file with mode: 0644]
bin/tests/system/delv/ns1/named.conf [new file with mode: 0644]
bin/tests/system/delv/ns1/root.db [new file with mode: 0644]
bin/tests/system/delv/ns2/example.db [new file with mode: 0644]
bin/tests/system/delv/ns2/named.conf [new file with mode: 0644]
bin/tests/system/delv/ns3/named.conf [new file with mode: 0644]
bin/tests/system/delv/tests.sh [new file with mode: 0644]

diff --git a/CHANGES b/CHANGES
index 7de75422ed8e63a6256ab65f58294b71a93d155f..963aab639a699dbf5ef3b93cd1859c3c0de6b4db 100644 (file)
--- 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]
 
index 0bb874d461fdba0a9cd48a27975f79d1fa86c23a..955169167d66a64303dd5a1af0eaa2035d6a5c2c 100644 (file)
@@ -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
index ae576cc1b6c3c6c2eecf571d7053a1a51c246c91..a7ea35a871ff70f4aba3fa214c0c7ac9797a129b 100644 (file)
@@ -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 (file)
index 0000000..e10c430
--- /dev/null
@@ -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 (file)
index 0000000..8f3cc63
--- /dev/null
@@ -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 (file)
index 0000000..cce91c3
--- /dev/null
@@ -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 (file)
index 0000000..b94dc32
--- /dev/null
@@ -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 (file)
index 0000000..04bf1aa
--- /dev/null
@@ -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 (file)
index 0000000..9033663
--- /dev/null
@@ -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 (file)
index 0000000..2b0d1f9
--- /dev/null
@@ -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