]> www.infradead.org Git - users/dwmw2/vpnc-scripts.git/commitdiff
Use resolvectl for systemd-resolved
authorFlorian Domain <f.domain@criteo.com>
Mon, 10 Aug 2020 12:13:26 +0000 (14:13 +0200)
committerFlorian Domain <f.domain@criteo.com>
Mon, 10 Aug 2020 12:13:26 +0000 (14:13 +0200)
- resolvectl is embedded in systemd-resolved and is more simpler
to use than calling directly busctl as we don't have to format IPs or
specify which address family it belongs.
- fix IPv6 nameserver, address family was previously hardcoded to IPv4
so the call to the busctl was failing.

vpnc-script

index 80915e8d262cb350f9bbc8c083cb3eda7fb943ed..7b5b9be4dae1d45b4b255aaea4322cf83a26f464 100755 (executable)
@@ -129,7 +129,7 @@ if [ -r /etc/openwrt_release ] && [ -n "$OPENWRT_INTERFACE" ]; then
        include /lib/network
        MODIFYRESOLVCONF=modify_resolvconf_openwrt
        RESTORERESOLVCONF=restore_resolvconf_openwrt
-elif [ -x /usr/bin/busctl ] && [ ${RESOLVEDENABLED} = 1 ]; then
+elif [ -x /usr/bin/resolvectl ] && [ ${RESOLVEDENABLED} = 1 ]; then
        # For systemd-resolved (version 229 and above)
        MODIFYRESOLVCONF=modify_resolved_manager
        RESTORERESOLVCONF=restore_resolved_manager
@@ -698,58 +698,41 @@ restore_resolvconf_manager() {
        /sbin/resolvconf -d $TUNDEV
 }
 
-AF_INET=2
-
 get_if_index() {
        local link
        link="$(ip link show dev "$1")" || return $?
        echo ${link} | awk -F: '{print $1}'
 }
 
-busctl_call() {
-       local dest node
-       dest=org.freedesktop.resolve1
-       node=/org/freedesktop/resolve1
-       busctl call "$dest" "${node}" "${dest}.Manager" "$@"
-}
-
-busctl_set_nameservers() {
-       local if_index addresses args addr
+resolvectl_set_nameservers() {
+       local if_index addresses
        if_index=$1
        shift
        addresses="$@"
-       args="$if_index $#"
-       for addr in ${addresses}; do
-               args="$args ${AF_INET} 4 $(echo $addr | sed 's/[.]/ /g')"
-       done
-       busctl_call SetLinkDNS 'ia(iay)' ${args}
+       /usr/bin/resolvectl dns $if_index $addresses
 }
 
-busctl_set_search() {
-       local if_index domains args domain
+resolvectl_set_search() {
+       local if_index domains
        if_index=$1
        shift
        domains="$@"
-       args="$if_index $#"
-       for domain in ${domains}; do
-               args="$args ${domain} false"
-       done
-       busctl_call SetLinkDomains 'ia(sb)' ${args}
+       /usr/bin/resolvectl domain $if_index $domains
 }
 
 modify_resolved_manager() {
        local if_index
        if_index=$(get_if_index $TUNDEV)
-       busctl_set_nameservers $if_index $INTERNAL_IP4_DNS
+       resolvectl_set_nameservers $if_index $INTERNAL_IP4_DNS
        if [ -n "$CISCO_DEF_DOMAIN" ]; then
-               busctl_set_search $if_index $CISCO_DEF_DOMAIN
+               resolvectl_set_search $if_index $CISCO_DEF_DOMAIN
        fi
 }
 
 restore_resolved_manager() {
        local if_index
        if_index=$(get_if_index $TUNDEV)
-       busctl_call RevertLink 'i' $if_index
+       /usr/bin/resolvectl revert $if_index
 }
 
 # === resolv.conf handling via unbound =========