Skip to content
Merged
3 changes: 3 additions & 0 deletions run-tests
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,9 @@ function runtest {
[[ ${busctl_called} -eq 0 ]] && \
_pass "busctl was not called, as expected" || \
_fail "busctl was called, not expected"
else
[[ ${busctl_called} -eq 0 ]] && \
_fail "busctl was not called, not expected"
fi

echo
Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
script_type="up"
dev="tun04"
dev="tun03"
foreign_option_1="dhcp-option DNS 1.23.4.56"
foreign_option_2="dhcp-option DNS 5.6.7.89"
foreign_option_3="dhcp-option DNS 34.5.67.8"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
script_type="up"
dev="tun05"
dev="tun04"
foreign_option_1="dhcp-option DOMAIN example.com"

TEST_TITLE="DNS Domain Only"
TEST_TITLE="Single DNS Domain"
TEST_BUSCTL_CALLED=1
TEST_BUSCTL_DOMAINS="1 example.com false"
8 changes: 8 additions & 0 deletions tests/04b_multiple_dns_domains.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
script_type="up"
dev="tun04"
foreign_option_1="dhcp-option DOMAIN example.com"
foreign_option_2="dhcp-option DOMAIN example.co"

TEST_TITLE="Multiple DNS Domains"
TEST_BUSCTL_CALLED=1
TEST_BUSCTL_DOMAINS="1 example.co false"
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
script_type="up"
dev="tun06"
dev="tun05"
foreign_option_1="dhcp-option DOMAIN example.com"
foreign_option_2="dhcp-option DOMAIN-SEARCH example.org"

TEST_TITLE="DNS Domain and Search (Part 1)"
TEST_TITLE="DNS Single Domain and Single Search"
TEST_BUSCTL_CALLED=1
TEST_BUSCTL_DOMAINS="2 example.com false example.org true"
TEST_BUSCTL_DOMAINS="2 example.com false example.org false"
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
script_type="up"
dev="tun07"
dev="tun05"
foreign_option_1="dhcp-option DOMAIN example.com"
foreign_option_2="dhcp-option DOMAIN-SEARCH example.org"
foreign_option_3="dhcp-option DOMAIN-SEARCH example.net"

TEST_TITLE="DNS Domain and Search (Part 2)"
TEST_TITLE="DNS Single Domain and Dual Search"
TEST_BUSCTL_CALLED=1
TEST_BUSCTL_DOMAINS="3 example.com false example.org true example.net true"
TEST_BUSCTL_DOMAINS="3 example.com false example.org false example.net false"
9 changes: 9 additions & 0 deletions tests/05c_dns_domain_and_search_3.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
script_type="up"
dev="tun05"
foreign_option_1="dhcp-option DOMAIN-SEARCH example.org"
foreign_option_2="dhcp-option DOMAIN example.com"
foreign_option_3="dhcp-option DOMAIN-SEARCH example.net"

TEST_TITLE="DNS Single Domain and Dual Search (with Order Check)"
TEST_BUSCTL_CALLED=1
TEST_BUSCTL_DOMAINS="3 example.com false example.org false example.net false"
10 changes: 10 additions & 0 deletions tests/05d_dns_domain_and_search_4.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
script_type="up"
dev="tun05"
foreign_option_1="dhcp-option DOMAIN-SEARCH example.org"
foreign_option_2="dhcp-option DOMAIN example.co"
foreign_option_3="dhcp-option DOMAIN example.com"
foreign_option_4="dhcp-option DOMAIN-SEARCH example.net"

TEST_TITLE="DNS Dual Domain and Dual Search (with Order Check)"
TEST_BUSCTL_CALLED=1
TEST_BUSCTL_DOMAINS="3 example.com false example.org false example.net false"
7 changes: 7 additions & 0 deletions tests/06a_single_domain_route.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
script_type="up"
dev="tun06"
foreign_option_1="dhcp-option DOMAIN-ROUTE example.com"

TEST_TITLE="Single DNS Route"
TEST_BUSCTL_CALLED=1
TEST_BUSCTL_DOMAINS="1 example.com true"
9 changes: 9 additions & 0 deletions tests/06b_multiple_domain_routes.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
script_type="up"
dev="tun06"
foreign_option_1="dhcp-option DOMAIN-ROUTE example.com"
foreign_option_2="dhcp-option DOMAIN-ROUTE example.co"
foreign_option_3="dhcp-option DOMAIN-ROUTE example.co.uk"

TEST_TITLE="Single DNS Route"
TEST_BUSCTL_DOMAINS="3 example.com true example.co true example.co.uk true"
TEST_BUSCTL_CALLED=1
10 changes: 10 additions & 0 deletions tests/07a_dns_domain_search_and_route_1.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
script_type="up"
dev="tun07"
foreign_option_1="dhcp-option DOMAIN example.com"
foreign_option_2="dhcp-option DOMAIN-SEARCH example.org"
foreign_option_3="dhcp-option DOMAIN-SEARCH example.co.uk"
foreign_option_4="dhcp-option DOMAIN-ROUTE example.net"

TEST_TITLE="DNS Single Domain, Dual Search, Single Route"
TEST_BUSCTL_CALLED=1
TEST_BUSCTL_DOMAINS="4 example.com false example.org false example.co.uk false example.net true"
12 changes: 12 additions & 0 deletions tests/07b_dns_domain_search_and_route_2.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
script_type="up"
dev="tun07"
foreign_option_1="dhcp-option DOMAIN example.com"
foreign_option_2="dhcp-option DOMAIN-SEARCH example.org"
foreign_option_3="dhcp-option DOMAIN-ROUTE example.net"
foreign_option_4="dhcp-option DOMAIN-SEARCH example.co.uk"
foreign_option_5="dhcp-option DOMAIN example.co"
foreign_option_6="dhcp-option DOMAIN-ROUTE example.uk.com"

TEST_TITLE="DNS Dual Domain, Dual Search, Dual Route (with Order Check)"
TEST_BUSCTL_CALLED=1
TEST_BUSCTL_DOMAINS="5 example.co false example.org false example.co.uk false example.net true example.uk.com true"
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
script_type="up"
dev="tun09"
dev="tun08"
foreign_option_1="dhcp-option DNS 1.23.4.56"
foreign_option_2="dhcp-option DNS 2.34.5.67"
foreign_option_3="dhcp-option DOMAIN example.co.uk"
Expand All @@ -9,4 +9,4 @@ foreign_option_5="dhcp-option DOMAIN-SEARCH example.com"
TEST_TITLE="DNS IPv4 Servers, Domain, and Search"
TEST_BUSCTL_CALLED=1
TEST_BUSCTL_DNS="2 2 4 1 23 4 56 2 4 2 34 5 67"
TEST_BUSCTL_DOMAINS="3 example.co.uk false example.co true example.com true"
TEST_BUSCTL_DOMAINS="3 example.co.uk false example.co false example.com false"
12 changes: 12 additions & 0 deletions tests/08b_dns_ipv4_domain_search_and_route.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
script_type="up"
dev="tun08"
foreign_option_1="dhcp-option DNS 1.23.4.56"
foreign_option_2="dhcp-option DNS 2.34.5.67"
foreign_option_3="dhcp-option DOMAIN example.co.uk"
foreign_option_4="dhcp-option DOMAIN-SEARCH example.co"
foreign_option_5="dhcp-option DOMAIN-ROUTE example.com"

TEST_TITLE="DNS IPv4 Servers, Domain, Search, and Route"
TEST_BUSCTL_CALLED=1
TEST_BUSCTL_DNS="2 2 4 1 23 4 56 2 4 2 34 5 67"
TEST_BUSCTL_DOMAINS="3 example.co.uk false example.co false example.com true"
2 changes: 1 addition & 1 deletion tests/18_dns_ipv4_ipv6_domain_and_search.sh
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,4 @@ foreign_option_6="dhcp-option DOMAIN-SEARCH example.co"
TEST_TITLE="DNS IPv4 and IPv6 Servers, plus Domain and Search"
TEST_BUSCTL_CALLED=1
TEST_BUSCTL_DNS="4 2 4 1 23 4 56 2 4 2 34 56 7 2 16 18 52 5 103 0 137 0 0 0 0 0 0 0 171 205 239 2 16 18 52 5 103 0 137 0 0 0 0 0 0 0 186 205 239"
TEST_BUSCTL_DOMAINS="2 example.com false example.co true"
TEST_BUSCTL_DOMAINS="2 example.com false example.co false"
39 changes: 30 additions & 9 deletions update-systemd-resolved
Original file line number Diff line number Diff line change
Expand Up @@ -80,8 +80,8 @@ up() {

# Preset values for processing -- will be altered in the various process_*
# functions.
local -a dns_servers=() dns_domains=()
local -i dns_server_count=0 dns_domain_count=0
local -a dns_servers=() dns_domain=() dns_search=() dns_routed=()
local -i dns_server_count=0 dns_domain_count=0 dns_search_count=0 dns_routed_count=0

while read -r setting; do
setting_type="${setting%% *}"
Expand All @@ -103,8 +103,20 @@ up() {
busctl_call SetLinkDNS 'ia(iay)' "${busctl_params[@]}" || return $?
fi

if [[ "${#dns_domains[*]}" -gt 0 ]]; then
busctl_params=("$if_index" "$dns_domain_count" "${dns_domains[@]}")
if [[ "${#dns_domain[*]}" -gt 0 \
|| "${#dns_search[*]}" -gt 0 \
|| "${#dns_routed[*]}" -gt 0 ]]; then
dns_count=$((dns_domain_count+dns_search_count+dns_routed_count))
busctl_params=("$if_index" "$dns_count")
if [[ "${#dns_domain[*]}" -gt 0 ]]; then
busctl_params+=("${dns_domain[@]}")
fi
if [[ "${#dns_search[*]}" -gt 0 ]]; then
busctl_params+=("${dns_search[@]}")
fi
if [[ "${#dns_routed[*]}" -gt 0 ]]; then
busctl_params+=("${dns_routed[@]}")
fi
info "SetLinkDomains(${busctl_params[*]})"
busctl_call SetLinkDomains 'ia(sb)' "${busctl_params[@]}" || return $?
fi
Expand Down Expand Up @@ -305,18 +317,27 @@ process_domain() {
local domain="$1"
shift

info "Adding DNS Domain ${domain}"
(( dns_domain_count += 1 ))
dns_domains+=("${domain}" false)
info "Setting DNS Domain ${domain}"
(( dns_domain_count = 1 ))
dns_domain=("${domain}" false)
}

process_domain_search() {
local domain="$1"
shift

info "Adding DNS Search Domain ${domain}"
(( dns_domain_count += 1 ))
dns_domains+=("${domain}" true)
(( dns_search_count += 1 ))
dns_search+=("${domain}" false)
}

process_domain_route() {
local domain="$1"
shift

info "Adding DNS Routed Domain ${domain}"
(( dns_routed_count += 1 ))
dns_routed+=("${domain}" true)
}

main() {
Expand Down