|
18 | 18 |
|
19 | 19 | # This script will parse DHCP options set via OpenVPN (dhcp-option) to update |
20 | 20 | # systemd-resolved directly via DBus, instead of updating /etc/resolv.conf. To |
21 | | -# install, set as the 'up' and 'down' script in your OpenVPN configuration file |
| 21 | +# install, set as the 'up' and 'down-pre' script in your OpenVPN configuration file |
22 | 22 | # or command-line argument. For example: |
23 | 23 | # up /etc/openvpn/update-systemd-resolved |
24 | | -# down /etc/openvpn/update-systemd-resolved |
| 24 | +# down-pre /etc/openvpn/update-systemd-resolved |
25 | 25 |
|
26 | 26 | # Define what needs to be called via DBus |
27 | 27 | DBUS_DEST="org.freedesktop.resolve1" |
|
82 | 82 | # functions. |
83 | 83 | local -a dns_servers=() dns_domain=() dns_search=() dns_routed=() |
84 | 84 | local -i dns_server_count=0 dns_domain_count=0 dns_search_count=0 dns_routed_count=0 |
| 85 | + local dns_sec="" |
85 | 86 |
|
86 | 87 | while read -r setting; do |
87 | 88 | setting_type="${setting%% *}" |
@@ -120,6 +121,17 @@ up() { |
120 | 121 | info "SetLinkDomains(${busctl_params[*]})" |
121 | 122 | busctl_call SetLinkDomains 'ia(sb)' "${busctl_params[@]}" || return $? |
122 | 123 | fi |
| 124 | + |
| 125 | + if [[ -n "${dns_sec}" ]]; then |
| 126 | + if [[ "${dns_sec}" == "default" ]]; then |
| 127 | + # We need to provide an empty string to use the default settings |
| 128 | + busctl_params=("$if_index" '""') |
| 129 | + else |
| 130 | + busctl_params=("$if_index" "${dns_sec}") |
| 131 | + fi |
| 132 | + info "SetLinkDNSSEC(${busctl_params[*]})" |
| 133 | + busctl_call SetLinkDNSSEC 'is' "${busctl_params[@]}" || return $? |
| 134 | + fi |
123 | 135 | } |
124 | 136 |
|
125 | 137 | down() { |
@@ -340,6 +352,29 @@ process_domain_route() { |
340 | 352 | dns_routed+=("${domain}" true) |
341 | 353 | } |
342 | 354 |
|
| 355 | +process_dnssec() { |
| 356 | + local option="$1" setting="" |
| 357 | + shift |
| 358 | + |
| 359 | + case "${option,,}" in |
| 360 | + yes|true) |
| 361 | + setting="yes" ;; |
| 362 | + no|false) |
| 363 | + setting="no" ;; |
| 364 | + default) |
| 365 | + setting="default" ;; |
| 366 | + allow-downgrade) |
| 367 | + setting="allow-downgrade" ;; |
| 368 | + *) |
| 369 | + local message="\`$option' is not a valid DNSSEC option" |
| 370 | + emerg "${message}" |
| 371 | + return 1 ;; |
| 372 | + esac |
| 373 | + |
| 374 | + info "Setting DNSSEC to ${setting}" |
| 375 | + dns_sec="${setting}" |
| 376 | +} |
| 377 | + |
343 | 378 | main() { |
344 | 379 | local script_type="$1" |
345 | 380 | shift |
@@ -368,5 +403,5 @@ main() { |
368 | 403 | if [[ "${BASH_SOURCE[0]}" == "$0" ]] || [[ "$AUTOMATED_TESTING" == 1 ]]; then |
369 | 404 | set -o nounset |
370 | 405 |
|
371 | | - main "$script_type" "$dev" "$@" |
| 406 | + main "${script_type:-}" "${dev:-}" "$@" |
372 | 407 | fi |
0 commit comments