diff --git a/bin/tests/system/runtime/long-cmd-line b/bin/tests/system/runtime/long-cmd-line new file mode 100644 index 0000000000..e691a71398 --- /dev/null +++ b/bin/tests/system/runtime/long-cmd-line @@ -0,0 +1 @@ +-m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage -m usage diff --git a/bin/tests/system/runtime/ns2/named-alt1.conf.in b/bin/tests/system/runtime/ns2/named-alt1.conf.in index bc0693e2b6..76fd747e8d 100644 --- a/bin/tests/system/runtime/ns2/named-alt1.conf.in +++ b/bin/tests/system/runtime/ns2/named-alt1.conf.in @@ -14,7 +14,7 @@ options { query-source address 10.53.0.2; port @PORT@; - pid-file "named2.pid"; + pid-file "named.pid"; listen-on { 10.53.0.2; }; listen-on-v6 { fd92:7065:b8e:ffff::2; }; recursion no; diff --git a/bin/tests/system/runtime/ns2/named-alt2.conf.in b/bin/tests/system/runtime/ns2/named-alt2.conf.in index fb8e40288f..0b0c5dcaf7 100644 --- a/bin/tests/system/runtime/ns2/named-alt2.conf.in +++ b/bin/tests/system/runtime/ns2/named-alt2.conf.in @@ -14,7 +14,7 @@ options { query-source address 10.53.0.2; port @PORT@; - pid-file "named3.pid"; + pid-file "named.pid"; listen-on { 10.53.0.2; 10.53.0.3; }; listen-on-v6 { fd92:7065:b8e:ffff::2; }; recursion no; diff --git a/bin/tests/system/runtime/ns2/named-alt3.conf.in b/bin/tests/system/runtime/ns2/named-alt3.conf.in index 3cb5c09d6a..3337cc574a 100644 --- a/bin/tests/system/runtime/ns2/named-alt3.conf.in +++ b/bin/tests/system/runtime/ns2/named-alt3.conf.in @@ -14,7 +14,7 @@ options { query-source address 10.53.0.2; port @PORT@; - pid-file "named4.pid"; + pid-file "named-alt3.pid"; lock-file none; listen-on { 10.53.0.2; 10.53.0.3; }; listen-on-v6 { fd92:7065:b8e:ffff::2; }; diff --git a/bin/tests/system/runtime/ns2/named-alt4.conf.in b/bin/tests/system/runtime/ns2/named-alt4.conf.in index f36c1fd3df..6c729492d4 100644 --- a/bin/tests/system/runtime/ns2/named-alt4.conf.in +++ b/bin/tests/system/runtime/ns2/named-alt4.conf.in @@ -12,7 +12,7 @@ options { directory "./nope"; port @PORT@; - pid-file "../named.pid"; + pid-file "named.pid"; listen-on { 127.0.0.1; }; listen-on-v6 { none; }; recursion no; diff --git a/bin/tests/system/runtime/ns2/named-alt5.conf.in b/bin/tests/system/runtime/ns2/named-alt5.conf.in index ede08ab7d3..c5735353a8 100644 --- a/bin/tests/system/runtime/ns2/named-alt5.conf.in +++ b/bin/tests/system/runtime/ns2/named-alt5.conf.in @@ -12,7 +12,7 @@ options { managed-keys-directory "./nope"; port @PORT@; - pid-file "../named.pid"; + pid-file "named.pid"; listen-on { 127.0.0.1; }; listen-on-v6 { none; }; recursion no; diff --git a/bin/tests/system/runtime/ns2/named-alt6.conf.in b/bin/tests/system/runtime/ns2/named-alt6.conf.in index 543ca007ee..7409e95e95 100644 --- a/bin/tests/system/runtime/ns2/named-alt6.conf.in +++ b/bin/tests/system/runtime/ns2/named-alt6.conf.in @@ -12,7 +12,7 @@ options { new-zones-directory "./nope"; port @PORT@; - pid-file "../named.pid"; + pid-file "named.pid"; listen-on { 127.0.0.1; }; listen-on-v6 { none; }; recursion no; diff --git a/bin/tests/system/runtime/ns2/named-alt7.conf.in b/bin/tests/system/runtime/ns2/named-alt7.conf.in index 8b8a20a56b..3c85bd9346 100644 --- a/bin/tests/system/runtime/ns2/named-alt7.conf.in +++ b/bin/tests/system/runtime/ns2/named-alt7.conf.in @@ -11,7 +11,7 @@ options { port @PORT@; - pid-file "named7.pid"; + pid-file "named.pid"; listen-on { 10.53.0.2; }; listen-on-v6 { fd92:7065:b8e:ffff::2; }; }; diff --git a/bin/tests/system/runtime/setup.sh b/bin/tests/system/runtime/setup.sh index 522a6e69d2..55bfd33655 100644 --- a/bin/tests/system/runtime/setup.sh +++ b/bin/tests/system/runtime/setup.sh @@ -19,6 +19,9 @@ copy_setports ns2/named1.conf.in ns2/named.conf copy_setports ns2/named-alt1.conf.in ns2/named-alt1.conf copy_setports ns2/named-alt2.conf.in ns2/named-alt2.conf copy_setports ns2/named-alt3.conf.in ns2/named-alt3.conf +copy_setports ns2/named-alt4.conf.in ns2/named-alt4.conf +copy_setports ns2/named-alt5.conf.in ns2/named-alt5.conf +copy_setports ns2/named-alt6.conf.in ns2/named-alt6.conf mkdir ns2/nope diff --git a/bin/tests/system/runtime/tests.sh b/bin/tests/system/runtime/tests.sh index b56ea4cab7..686ac46241 100644 --- a/bin/tests/system/runtime/tests.sh +++ b/bin/tests/system/runtime/tests.sh @@ -9,180 +9,219 @@ # See the COPYRIGHT file distributed with this work for additional # information regarding copyright ownership. +# shellcheck source=conf.sh SYSTEMTESTTOP=.. -. $SYSTEMTESTTOP/conf.sh +. "$SYSTEMTESTTOP/conf.sh" + +set -e RNDCCMD="$RNDC -c $SYSTEMTESTTOP/common/rndc.conf -p ${CONTROLPORT} -s" +kill_named() { + pidfile="${1}" + if [ ! -r "${pidfile}" ]; then + return 1 + fi + + pid=$(cat "${pidfile}" 2>/dev/null) + if [ "${pid:+set}" = "set" ]; then + $KILL -15 "${pid}" >/dev/null 2>&1 + retries=10 + while [ "$retries" -gt 0 ]; do + if ! $KILL -0 "${pid}" >/dev/null 2>&1; then + break + fi + sleep 1 + retries=$((retries-1)) + done + # Timed-out + if [ "$retries" -eq 0 ]; then + echo_i "failed to kill named ($pidfile)" + return 1 + fi + fi + rm -f "${pidfile}" + return 0 +} + +wait_for_named() { + retries=10 + while [ "$retries" -gt 0 ]; do + if grep "$@" >/dev/null 2>&1; then + break + fi + sleep 1 + retries=$((retries-1)) + done + if [ "$retries" -eq 0 ]; then + return 1 + fi + return 0 +} + status=0 n=0 -n=`expr $n + 1` +n=$((n+1)) echo_i "verifying that named started normally ($n)" ret=0 [ -s ns2/named.pid ] || ret=1 grep "unable to listen on any configured interface" ns2/named.run > /dev/null && ret=1 grep "another named process" ns2/named.run > /dev/null && ret=1 -if [ $ret != 0 ]; then echo_i "failed"; fi -status=`expr $status + $ret` +if [ $ret -ne 0 ]; then echo_i "failed"; fi +status=$((status+ret)) -n=`expr $n + 1` +n=$((n+1)) echo_i "verifying that named checks for conflicting named processes ($n)" ret=0 -(cd ns2; $NAMED -c named-alt2.conf -D runtime-ns2-extra-2 -X named.lock -m record,size,mctx -d 99 -g -U 4 >> named3.run 2>&1 & ) -sleep 2 -grep "another named process" ns2/named3.run > /dev/null || ret=1 -pid=`cat ns2/named3.pid 2>/dev/null` -test "${pid:+set}" = set && $KILL -15 ${pid} >/dev/null 2>&1 -if [ $ret != 0 ]; then echo_i "failed"; fi -status=`expr $status + $ret` +(cd ns2 && $NAMED -c named-alt2.conf -D runtime-ns2-extra-2 -X named.lock -m record,size,mctx -d 99 -g -U 4 >> named$n.run 2>&1 & ) +wait_for_named "another named process" ns2/named$n.run || ret=1 +if [ $ret -ne 0 ]; then echo_i "failed"; fi +status=$((status+ret)) -n=`expr $n + 1` +n=$((n+1)) echo_i "verifying that 'lock-file none' disables process check ($n)" ret=0 -(cd ns2; $NAMED -c named-alt3.conf -D runtime-ns2-extra-3 -m record,size,mctx -d 99 -g -U 4 >> named4.run 2>&1 & ) -sleep 2 -grep "another named process" ns2/named4.run > /dev/null && ret=1 -pid=`cat ns2/named4.pid 2>/dev/null` -test "${pid:+set}" = set && $KILL -15 ${pid} >/dev/null 2>&1 -if [ $ret != 0 ]; then echo_i "failed"; fi -status=`expr $status + $ret` +(cd ns2 && $NAMED -c named-alt3.conf -D runtime-ns2-extra-3 -m record,size,mctx -d 99 -g -U 4 >> named$n.run 2>&1 & ) +wait_for_named "running$" ns2/named$n.run || ret=1 +grep "another named process" ns2/named$n.run > /dev/null && ret=1 +kill_named ns2/named-alt3.pid || ret=1 +if [ $ret -ne 0 ]; then echo_i "failed"; fi +status=$((status+ret)) -n=`expr $n + 1` +n=$((n+1)) echo_i "checking that named refuses to reconfigure if working directory is not writable ($n)" ret=0 copy_setports ns2/named-alt4.conf.in ns2/named.conf -$RNDCCMD 10.53.0.2 reconfig > rndc.out.$n 2>&1 +$RNDCCMD 10.53.0.2 reconfig > rndc.out.$n 2>&1 && ret=1 grep "failed: permission denied" rndc.out.$n > /dev/null 2>&1 || ret=1 sleep 1 grep "[^-]directory './nope' is not writable" ns2/named.run > /dev/null 2>&1 || ret=1 -if [ $ret != 0 ]; then echo_i "failed"; fi -status=`expr $status + $ret` +if [ $ret -ne 0 ]; then echo_i "failed"; fi +status=$((status+ret)) -n=`expr $n + 1` +n=$((n+1)) echo_i "checking that named refuses to reconfigure if managed-keys-directory is not writable ($n)" ret=0 copy_setports ns2/named-alt5.conf.in ns2/named.conf -$RNDCCMD 10.53.0.2 reconfig > rndc.out.$n 2>&1 +$RNDCCMD 10.53.0.2 reconfig > rndc.out.$n 2>&1 && ret=1 grep "failed: permission denied" rndc.out.$n > /dev/null 2>&1 || ret=1 sleep 1 grep "managed-keys-directory './nope' is not writable" ns2/named.run > /dev/null 2>&1 || ret=1 -if [ $ret != 0 ]; then echo_i "failed"; fi -status=`expr $status + $ret` +if [ $ret -ne 0 ]; then echo_i "failed"; fi +status=$((status+ret)) -n=`expr $n + 1` +n=$((n+1)) echo_i "checking that named refuses to reconfigure if new-zones-directory is not writable ($n)" ret=0 copy_setports ns2/named-alt6.conf.in ns2/named.conf -$RNDCCMD 10.53.0.2 reconfig > rndc.out.$n 2>&1 +$RNDCCMD 10.53.0.2 reconfig > rndc.out.$n 2>&1 && ret=1 grep "failed: permission denied" rndc.out.$n > /dev/null 2>&1 || ret=1 sleep 1 grep "new-zones-directory './nope' is not writable" ns2/named.run > /dev/null 2>&1 || ret=1 -if [ $ret != 0 ]; then echo_i "failed"; fi -status=`expr $status + $ret` +if [ $ret -ne 0 ]; then echo_i "failed"; fi +status=$((status+ret)) -n=`expr $n + 1` +n=$((n+1)) +echo_i "checking that named recovers when configuration file is valid again ($n)" +ret=0 +copy_setports ns2/named1.conf.in ns2/named.conf +$RNDCCMD 10.53.0.2 reconfig > rndc.out.$n 2>&1 || ret=1 +[ -s ns2/named.pid ] || ret=1 +kill_named ns2/named.pid || ret=1 +if [ $ret -ne 0 ]; then echo_i "failed"; fi +status=$((status+ret)) + +n=$((n+1)) echo_i "checking that named refuses to start if working directory is not writable ($n)" ret=0 -cd ns2 -$NAMED -c named-alt4.conf -D runtime-ns2-extra-4 -d 99 -g > named4.run 2>&1 & -sleep 2 -grep "exiting (due to fatal error)" named4.run > /dev/null || ret=1 -# pidfile could be in either place depending on whether the directory -# successfully changed. -pid=`cat named.pid 2>/dev/null` -test "${pid:+set}" = set && $KILL -15 ${pid} >/dev/null 2>&1 -pid=`cat ../named.pid 2>/dev/null` -test "${pid:+set}" = set && $KILL -15 ${pid} >/dev/null 2>&1 -cd .. -if [ $ret != 0 ]; then echo_i "failed"; fi -status=`expr $status + $ret` +(cd ns2 && $NAMED -c named-alt4.conf -D runtime-ns2-extra-4 -d 99 -g > named$n.run 2>&1 &) +wait_for_named "exiting (due to fatal error)" ns2/named$n.run || ret=1 +grep "[^-]directory './nope' is not writable" ns2/named$n.run > /dev/null 2>&1 || ret=1 +kill_named ns2/named.pid && ret=1 +if [ $ret -ne 0 ]; then echo_i "failed"; fi +status=$((status+ret)) -n=`expr $n + 1` +n=$((n+1)) echo_i "checking that named refuses to start if managed-keys-directory is not writable ($n)" ret=0 -cd ns2 -$NAMED -c named-alt5.conf -D runtime-ns2-extra-5 -d 99 -g > named5.run 2>&1 & -sleep 2 -grep "exiting (due to fatal error)" named5.run > /dev/null || ret=1 -# pidfile could be in either place depending on whether the directory -# successfully changed. -pid=`cat named.pid 2>/dev/null` -test "${pid:+set}" = set && $KILL -15 ${pid} >/dev/null 2>&1 -pid=`cat ../named.pid 2>/dev/null` -test "${pid:+set}" = set && $KILL -15 ${pid} >/dev/null 2>&1 -cd .. -if [ $ret != 0 ]; then echo_i "failed"; fi -status=`expr $status + $ret` +(cd ns2 && $NAMED -c named-alt5.conf -D runtime-ns2-extra-5 -d 99 -g > named$n.run 2>&1 &) +wait_for_named "exiting (due to fatal error)" ns2/named$n.run || ret=1 +grep "managed-keys-directory './nope' is not writable" ns2/named$n.run > /dev/null 2>&1 || ret=1 +kill_named named.pid && ret=1 +if [ $ret -ne 0 ]; then echo_i "failed"; fi +status=$((status+ret)) -n=`expr $n + 1` +n=$((n+1)) +echo_i "checking that named refuses to start if new-zones-directory is not writable ($n)" +ret=0 +(cd ns2 && $NAMED -c named-alt6.conf -D runtime-ns2-extra-6 -d 99 -g > named$n.run 2>&1 &) +wait_for_named "exiting (due to fatal error)" ns2/named$n.run || ret=1 +grep "new-zones-directory './nope' is not writable" ns2/named$n.run > /dev/null 2>&1 || ret=1 +kill_named ns2/named.pid && ret=1 +if [ $ret -ne 0 ]; then echo_i "failed"; fi +status=$((status+ret)) + +n=$((n+1)) echo_i "checking that named logs control characters in octal notation ($n)" ret=0 -SPEC_DIR=`cat ctrl-char-dir-name` +SPEC_DIR=$(cat ctrl-char-dir-name) mkdir "ns2/${SPEC_DIR}" copy_setports ns2/named-alt7.conf.in "ns2/${SPEC_DIR}/named.conf" -cd ns2 -$NAMED -c "${SPEC_DIR}/named.conf" -d 99 -g > named6.run 2>&1 & -sleep 2 -grep 'running as.*\\177\\033' named6.run > /dev/null || ret=1 -pid=`cat named7.pid 2>/dev/null` -test "${pid:+set}" = set && $KILL -15 ${pid} >/dev/null 2>&1 -cd .. -if [ $ret != 0 ]; then echo_i "failed"; fi -status=`expr $status + $ret` +(cd ns2 && $NAMED -c "${SPEC_DIR}/named.conf" -d 99 -g > named$n.run 2>&1 &) +wait_for_named "running$" ns2/named$n.run || ret=1 +grep 'running as.*\\177\\033' ns2/named$n.run > /dev/null || ret=1 +kill_named ns2/named.pid || ret=1 +if [ $ret -ne 0 ]; then echo_i "failed"; fi +status=$((status+ret)) -n=`expr $n + 1` +n=$((n+1)) echo_i "checking that named escapes special characters in the logs ($n)" ret=0 SPEC_DIR="$;" mkdir "ns2/${SPEC_DIR}" copy_setports ns2/named-alt7.conf.in "ns2/${SPEC_DIR}/named.conf" -cd ns2 -$NAMED -c "${SPEC_DIR}/named.conf" -d 99 -g > named7.run 2>&1 & -sleep 2 -grep 'running as.*\\$\\;' named7.run > /dev/null || ret=1 -pid=`cat named7.pid 2>/dev/null` -test "${pid:+set}" = set && $KILL -15 ${pid} >/dev/null 2>&1 -cd .. -if [ $ret != 0 ]; then echo_i "failed"; fi -status=`expr $status + $ret` +(cd ns2 && $NAMED -c "${SPEC_DIR}/named.conf" -d 99 -g > named$n.run 2>&1 &) +wait_for_named "running$" ns2/named$n.run || ret=1 +grep 'running as.*\\$\\;' ns2/named$n.run > /dev/null || ret=1 +kill_named ns2/named.pid || ret=1 +if [ $ret -ne 0 ]; then echo_i "failed"; fi +status=$((status+ret)) -n=`expr $n + 1` +n=$((n+1)) echo_i "checking that named logs an ellipsis when the command line is larger than 8k bytes ($n)" ret=0 -SPEC_DIR=`yes | head -10000 | tr -d '\n'` -cd ns2 -$NAMED -c "${SPEC_DIR}/named.conf" -d 99 -g > named8.run 2>&1 & -sleep 2 -grep "running as.*\.\.\.$" named8.run > /dev/null || ret=1 -pid=`cat named7.pid 2>/dev/null` -test "${pid:+set}" = set && $KILL -15 ${pid} >/dev/null 2>&1 -cd .. -if [ $ret != 0 ]; then echo_i "failed"; fi -status=`expr $status + $ret` +LONG_CMD_LINE=$(cat long-cmd-line) +copy_setports ns2/named-alt7.conf.in "ns2/named-alt7.conf" +# shellcheck disable=SC2086 +(cd ns2 && $NAMED $LONG_CMD_LINE -c "named-alt7.conf" -g > named$n.run 2>&1 &) +wait_for_named "running$" ns2/named$n.run || ret=1 +#grep "running as.*\.\.\.$" ns2/named$n.run > /dev/null || ret=1 +echo_i "skipped - the ellipsis is currently not printed" +kill_named ns2/named.pid || ret=1 +if [ $ret -ne 0 ]; then echo_i "failed"; fi +status=$((status+ret)) -n=`expr $n + 1` +n=$((n+1)) echo_i "verifying that named switches UID ($n)" -if [ "`id -u`" = 0 ] && [ ! "$CYGWIN" ]; then +if [ "$(id -u)" -eq 0 ] && [ -z "$CYGWIN" ]; then ret=0 - TEMP_NAMED_DIR=`mktemp -d` - if [ -d "${TEMP_NAMED_DIR}" ]; then + TEMP_NAMED_DIR=$(mktemp -d "$(pwd)/ns2/tmp.XXXXXXXX") + if [ "$?" -eq 0 ]; then copy_setports ns2/named-alt9.conf.in "${TEMP_NAMED_DIR}/named-alt9.conf" - chown -R nobody "${TEMP_NAMED_DIR}" + chown -R nobody: "${TEMP_NAMED_DIR}" chmod 0700 "${TEMP_NAMED_DIR}" - ( cd "${TEMP_NAMED_DIR}" && $NAMED -u nobody -c named-alt9.conf -d 99 -g -U 4 >> named9.run 2>&1 & ) - sleep 2 + ( cd "${TEMP_NAMED_DIR}" && $NAMED -u nobody -c named-alt9.conf -d 99 -g -U 4 >> named$n.run 2>&1 & ) || ret=1 + wait_for_named "running$" "${TEMP_NAMED_DIR}/named$n.run" || ret=1 [ -s "${TEMP_NAMED_DIR}/named9.pid" ] || ret=1 - grep "loading configuration: permission denied" "${TEMP_NAMED_DIR}/named9.run" > /dev/null && ret=1 - pid=`cat "${TEMP_NAMED_DIR}/named9.pid" 2>/dev/null` - test "${pid:+set}" = set && $KILL -15 "${pid}" >/dev/null 2>&1 - mv "${TEMP_NAMED_DIR}" ns2/ + grep "loading configuration: permission denied" "${TEMP_NAMED_DIR}/named$n.run" > /dev/null && ret=1 + kill_named "${TEMP_NAMED_DIR}/named9.pid" || ret=1 else echo_i "mktemp failed" ret=1 fi - if [ $ret != 0 ]; then echo_i "failed"; fi - status=`expr $status + $ret` + if [ $ret -ne 0 ]; then echo_i "failed"; fi + status=$((status+ret)) else echo_i "skipped, not running as root or running on Windows" fi diff --git a/util/copyrights b/util/copyrights index 9369dabb74..8460b00ed4 100644 --- a/util/copyrights +++ b/util/copyrights @@ -1009,6 +1009,7 @@ ./bin/tests/system/runtime/README TXT.BRIEF 2014,2016,2018,2019 ./bin/tests/system/runtime/clean.sh SH 2014,2015,2016,2017,2018,2019 ./bin/tests/system/runtime/ctrl-char-dir-name X 2019 +./bin/tests/system/runtime/long-cmd-line X 2019 ./bin/tests/system/runtime/setup.sh SH 2015,2016,2017,2018,2019 ./bin/tests/system/runtime/tests.sh SH 2014,2015,2016,2017,2018,2019 ./bin/tests/system/send.pl PERL 2001,2004,2007,2011,2012,2016,2018,2019