#!/bin/sh -u BINDDIR=/var/lib/bind/etc BIND_OPTIONS="$BINDDIR/resolvconf-options.conf" BIND_ZONES="$BINDDIR/resolvconf-zones.conf" DNSMASQ_CONF_DIR=/etc/dnsmasq.conf.d DNSMASQ_RESOLV_CONF=/etc/resolv.conf.dnsmasq DNSMASQ_CONF="$DNSMASQ_CONF_DIR/60-resolvconf" ### Test configs RESOLV_CONF_1=\ 'nameserver 1.2.3.4 nameserver 5.6.7.8 domain test1.domain' RESOLV_CONF_2=\ 'nameserver 127.0.0.1' RESOLV_CONF_3=\ 'nameserver 21.22.23.24 domain test3.domain search test3_1.search test3_2.search test3_3.search' ### Expected results EXPECTED_RESOLV_CONF_1=\ 'domain test1.domain nameserver 1.2.3.4 nameserver 5.6.7.8' EXPECTED_DNSMASQ_RESOLV_CONF_1=\ 'nameserver 1.2.3.4 nameserver 5.6.7.8' EXPECTED_DNSMASQ_CONF_1=\ 'server=/test1.domain/1.2.3.4 server=/test1.domain/5.6.7.8' EXPECTED_BIND_OPTIONS_1=\ 'forward first; forwarders { 1.2.3.4; 5.6.7.8; };' EXPECTED_BIND_ZONES_1=\ 'zone "test1.domain" { type forward; forward first; forwarders { 1.2.3.4; 5.6.7.8; }; };' EXPECTED_RESOLV_CONF_2=\ 'domain test1.domain nameserver 127.0.0.1 nameserver 1.2.3.4 nameserver 5.6.7.8' EXPECTED_DNSMASQ_RESOLV_CONF_2="$EXPECTED_DNSMASQ_RESOLV_CONF_1" EXPECTED_DNSMASQ_CONF_2="$EXPECTED_DNSMASQ_CONF_1" EXPECTED_BIND_OPTIONS_2="$EXPECTED_BIND_OPTIONS_1" EXPECTED_BIND_ZONES_2="$EXPECTED_BIND_ZONES_1" EXPECTED_RESOLV_CONF_3="$EXPECTED_RESOLV_CONF_2" EXPECTED_DNSMASQ_RESOLV_CONF_3="$EXPECTED_DNSMASQ_RESOLV_CONF_2" EXPECTED_DNSMASQ_CONF_3="$EXPECTED_DNSMASQ_CONF_2" EXPECTED_BIND_OPTIONS_3="$EXPECTED_BIND_OPTIONS_2" EXPECTED_BIND_ZONES_3="$EXPECTED_BIND_ZONES_2" EXPECTED_RESOLV_CONF_4=\ 'domain test1.domain search test1.domain test3_1.search test3_2.search test3_3.search nameserver 127.0.0.1 nameserver 1.2.3.4 nameserver 5.6.7.8 nameserver 21.22.23.24' EXPECTED_DNSMASQ_RESOLV_CONF_4=\ 'nameserver 1.2.3.4 nameserver 5.6.7.8 nameserver 21.22.23.24' EXPECTED_DNSMASQ_CONF_4=\ 'server=/test1.domain/1.2.3.4 server=/test1.domain/5.6.7.8 server=/test3_1.search/21.22.23.24 server=/test3_2.search/21.22.23.24 server=/test3_3.search/21.22.23.24' EXPECTED_BIND_OPTIONS_4=\ 'forward first; forwarders { 1.2.3.4; 5.6.7.8; 21.22.23.24; };' EXPECTED_BIND_ZONES_4=\ 'zone "test1.domain" { type forward; forward first; forwarders { 1.2.3.4; 5.6.7.8; }; }; zone "test3_1.search" { type forward; forward first; forwarders { 21.22.23.24; }; }; zone "test3_2.search" { type forward; forward first; forwarders { 21.22.23.24; }; }; zone "test3_3.search" { type forward; forward first; forwarders { 21.22.23.24; }; };' EXPECTED_RESOLV_CONF_5="$EXPECTED_RESOLV_CONF_4" EXPECTED_DNSMASQ_RESOLV_CONF_5="$EXPECTED_DNSMASQ_RESOLV_CONF_4" EXPECTED_DNSMASQ_CONF_5="$EXPECTED_DNSMASQ_CONF_4" EXPECTED_BIND_OPTIONS_5="$EXPECTED_BIND_OPTIONS_4" EXPECTED_BIND_ZONES_5="$EXPECTED_BIND_ZONES_4" EXPECTED_RESOLV_CONF_6=\ 'domain test1.domain search test1.domain test3_1.search test3_2.search test3_3.search nameserver 127.0.0.1 nameserver 1.2.3.4 nameserver 5.6.7.8 nameserver 21.22.23.24' EXPECTED_DNSMASQ_RESOLV_CONF_6="$EXPECTED_DNSMASQ_RESOLV_CONF_4" EXPECTED_DNSMASQ_CONF_6="$EXPECTED_DNSMASQ_CONF_4" EXPECTED_BIND_OPTIONS_6="$EXPECTED_BIND_OPTIONS_4" EXPECTED_BIND_ZONES_6="$EXPECTED_BIND_ZONES_4" EXPECTED_RESOLV_CONF_7="$EXPECTED_RESOLV_CONF_6" EXPECTED_DNSMASQ_RESOLV_CONF_7="$EXPECTED_DNSMASQ_RESOLV_CONF_6" EXPECTED_DNSMASQ_CONF_7="$EXPECTED_DNSMASQ_CONF_6" EXPECTED_BIND_OPTIONS_7="$EXPECTED_BIND_OPTIONS_6" EXPECTED_BIND_ZONES_7="$EXPECTED_BIND_ZONES_6" EXPECTED_RESOLV_CONF_8=\ 'domain test3.domain search test3_1.search test3_2.search test3_3.search nameserver 127.0.0.1 nameserver 21.22.23.24' EXPECTED_DNSMASQ_RESOLV_CONF_8=\ 'nameserver 21.22.23.24' EXPECTED_DNSMASQ_CONF_8=\ 'server=/test3_1.search/21.22.23.24 server=/test3_2.search/21.22.23.24 server=/test3_3.search/21.22.23.24' EXPECTED_BIND_OPTIONS_8=\ 'forward first; forwarders { 21.22.23.24; };' EXPECTED_BIND_ZONES_8=\ 'zone "test3_1.search" { type forward; forward first; forwarders { 21.22.23.24; }; }; zone "test3_2.search" { type forward; forward first; forwarders { 21.22.23.24; }; }; zone "test3_3.search" { type forward; forward first; forwarders { 21.22.23.24; }; };' EXPECTED_RESOLV_CONF_9= EXPECTED_DNSMASQ_RESOLV_CONF_9= EXPECTED_DNSMASQ_CONF_9= EXPECTED_BIND_OPTIONS_9= EXPECTED_BIND_ZONES_9= EXPECTED_RESOLV_CONF_10=\ 'domain test3.domain search test3_1.search test3_2.search test3_3.search test1.domain nameserver 21.22.23.24 nameserver 1.2.3.4 nameserver 5.6.7.8' EXPECTED_DNSMASQ_RESOLV_CONF_10=\ 'nameserver 21.22.23.24 nameserver 1.2.3.4 nameserver 5.6.7.8' EXPECTED_DNSMASQ_CONF_10=\ 'server=/test3_1.search/21.22.23.24 server=/test3_2.search/21.22.23.24 server=/test3_3.search/21.22.23.24 server=/test1.domain/1.2.3.4 server=/test1.domain/5.6.7.8' EXPECTED_BIND_OPTIONS_10=\ 'forward first; forwarders { 21.22.23.24; 1.2.3.4; 5.6.7.8; };' EXPECTED_BIND_ZONES_10=\ 'zone "test3_1.search" { type forward; forward first; forwarders { 21.22.23.24; }; }; zone "test3_2.search" { type forward; forward first; forwarders { 21.22.23.24; }; }; zone "test3_3.search" { type forward; forward first; forwarders { 21.22.23.24; }; }; zone "test1.domain" { type forward; forward first; forwarders { 1.2.3.4; 5.6.7.8; }; };' EXPECTED_RESOLV_CONF_11=\ 'domain test1.domain search test1.domain test3_1.search test3_2.search test3_3.search nameserver 1.2.3.4 nameserver 5.6.7.8 nameserver 21.22.23.24' EXPECTED_DNSMASQ_RESOLV_CONF_11="$EXPECTED_DNSMASQ_RESOLV_CONF_4" EXPECTED_DNSMASQ_CONF_11="$EXPECTED_DNSMASQ_CONF_4" EXPECTED_BIND_OPTIONS_11="$EXPECTED_BIND_OPTIONS_4" EXPECTED_BIND_ZONES_11="$EXPECTED_BIND_ZONES_4" ### compare_result() { [ -n "$1" -a -f "$1" ] && [ "$(sed '/^#/d' "$1")" = "$2" ] } check_result_resolv() { compare_result "$TESTDIR/etc/resolv.conf" "$1" } check_result_dnsmasq() { compare_result "$TESTDIR/$DNSMASQ_RESOLV_CONF" "$1" && compare_result "$TESTDIR/$DNSMASQ_CONF" "$2" } check_result_bind() { compare_result "$TESTDIR/$BIND_OPTIONS" "$1" && compare_result "$TESTDIR/$BIND_ZONES" "$2" } check_result() { check_result_resolv "$EXPECTED_RESOLV_CONF" && check_result_dnsmasq "$EXPECTED_DNSMASQ_RESOLV_CONF" "$EXPECTED_DNSMASQ_CONF" && check_result_bind "$EXPECTED_BIND_OPTIONS" "$EXPECTED_BIND_ZONES" } test_resolvconf() { eval "EXPECTED_RESOLV_CONF=\"\$EXPECTED_RESOLV_CONF_$1\"" eval "EXPECTED_DNSMASQ_RESOLV_CONF=\"\$EXPECTED_DNSMASQ_RESOLV_CONF_$1\"" eval "EXPECTED_DNSMASQ_CONF=\"\$EXPECTED_DNSMASQ_CONF_$1\"" eval "EXPECTED_BIND_OPTIONS=\"\$EXPECTED_BIND_OPTIONS_$1\"" eval "EXPECTED_BIND_ZONES=\"\$EXPECTED_BIND_ZONES_$1\"" echo -n "test $1: " check_result "$1" local ret="$?" [ "$ret" = 0 ] && echo "OK" || echo "FAIL" RET="$(($RET + $ret))" return "$ret" } TESTDIR="$(mktemp -dt openresolv-testXXXXXXXX)" RESOLVCONF="$TESTDIR/sbin/resolvconf" [ -n "$TESTDIR" -a -d "$TESTDIR" ] || exit 1 [ -f ./Makefile ] || cd openresolv ./configure --prefix="$TESTDIR" --sbindir="$TESTDIR/sbin" \ --libexecdir="$TESTDIR/lib" --localstatedir="$TESTDIR/var" \ --rundir="$TESTDIR/run" \ --os=linux \ --restartcmd=true make make install make clean install -d "$TESTDIR/$BINDDIR" install -d "$TESTDIR/$DNSMASQ_CONF_DIR" install -d "$TESTDIR/run" sed -i "s|=/|=$TESTDIR/|" "$TESTDIR/etc/resolvconf.conf" # For tests list all nameservers, not only local echo "resolv_conf_local_only=no" >>"$TESTDIR/etc/resolvconf.conf" RET=0 echo "$RESOLV_CONF_1" | "$RESOLVCONF" -a _test1 &>/dev/null test_resolvconf 1 echo "$RESOLV_CONF_2" | "$RESOLVCONF" -a _test2 &>/dev/null test_resolvconf 2 echo "$RESOLV_CONF_1" | "$RESOLVCONF" -a _test3 &>/dev/null test_resolvconf 3 echo "$RESOLV_CONF_3" | "$RESOLVCONF" -a _test4 &>/dev/null test_resolvconf 4 "$RESOLVCONF" -d _test3 &>/dev/null test_resolvconf 5 echo "$RESOLV_CONF_2" | "$RESOLVCONF" -a lo.test6 &>/dev/null test_resolvconf 6 "$RESOLVCONF" -d _test2 &>/dev/null test_resolvconf 7 "$RESOLVCONF" -d _test1 &>/dev/null test_resolvconf 8 "$RESOLVCONF" -d lo.test6 &>/dev/null "$RESOLVCONF" -d _test4 &>/dev/null test_resolvconf 9 echo "$RESOLV_CONF_1" | "$RESOLVCONF" -m 10 -a _test1 &>/dev/null echo "$RESOLV_CONF_3" | "$RESOLVCONF" -m 5 -a _test2 &>/dev/null test_resolvconf 10 echo "$RESOLV_CONF_3" | "$RESOLVCONF" -m 15 -a _test2 &>/dev/null test_resolvconf 11 rm -rf "$TESTDIR" exit "$RET"