]> www.infradead.org Git - users/dwmw2/vpnc-scripts.git/commitdiff
leave support for older systemd-resolved (v229-v238) in place
authorDaniel Lenski <dlenski@gmail.com>
Wed, 9 Sep 2020 02:23:35 +0000 (19:23 -0700)
committerDaniel Lenski <dlenski@gmail.com>
Wed, 9 Sep 2020 02:23:35 +0000 (19:23 -0700)
Signed-off-by: Daniel Lenski <dlenski@gmail.com>
vpnc-script

index 6cae9cf393b214807841cce986aa754398fbf77b..ac67c371bb256a4bbd5bf3b17f72d660f26a10d1 100755 (executable)
@@ -131,9 +131,13 @@ if [ -r /etc/openwrt_release ] && [ -n "$OPENWRT_INTERFACE" ]; then
        MODIFYRESOLVCONF=modify_resolvconf_openwrt
        RESTORERESOLVCONF=restore_resolvconf_openwrt
 elif [ -x /usr/bin/resolvectl ] && [ ${RESOLVEDENABLED} = 1 ]; then
-       # For systemd-resolved (version 229 and above)
+       # For systemd-resolved (version 239 and above)
        MODIFYRESOLVCONF=modify_resolved_manager
        RESTORERESOLVCONF=restore_resolved_manager
+elif [ -x /usr/bin/busctl ] && [ ${RESOLVEDENABLED} = 1 ]; then
+       # For systemd-resolved (version 229 and above)
+       MODIFYRESOLVCONF=modify_resolved_manager_old
+       RESTORERESOLVCONF=restore_resolved_manager_old
 elif [ -x /sbin/resolvconf ]; then
        # Optional tool on Debian, Ubuntu, Gentoo and FreeBSD
        MODIFYRESOLVCONF=modify_resolvconf_manager
@@ -699,12 +703,33 @@ 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
+       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}
+}
+
 resolvectl_set_nameservers() {
        local if_index addresses
        if_index=$1
@@ -713,6 +738,18 @@ resolvectl_set_nameservers() {
        /usr/bin/resolvectl dns $if_index $addresses
 }
 
+busctl_set_search() {
+       local if_index domains args domain
+       if_index=$1
+       shift
+       domains="$@"
+       args="$if_index $#"
+       for domain in ${domains}; do
+               args="$args ${domain} false"
+       done
+       busctl_call SetLinkDomains 'ia(sb)' ${args}
+}
+
 resolvectl_set_search() {
        local if_index domains
        if_index=$1
@@ -731,12 +768,27 @@ modify_resolved_manager() {
        fi
 }
 
+modify_resolved_manager_old() {
+       local if_index
+       if_index=$(get_if_index $TUNDEV)
+       busctl_set_nameservers $if_index $INTERNAL_IP4_DNS
+       if [ -n "$CISCO_DEF_DOMAIN" ]; then
+               busctl_set_search $if_index $CISCO_DEF_DOMAIN
+       fi
+}
+
 restore_resolved_manager() {
        local if_index
        if_index=$(get_if_index $TUNDEV)
        /usr/bin/resolvectl revert $if_index
 }
 
+restore_resolved_manager_old() {
+       local if_index
+       if_index=$(get_if_index $TUNDEV)
+       busctl_call RevertLink 'i' $if_index
+}
+
 # === resolv.conf handling via unbound =========
 
 modify_resolvconf_unbound() {