]> git.ipfire.org Git - thirdparty/wireguard-tools.git/commitdiff
wg-quick: darwin: set DNS servers after delay on route change
authorJason A. Donenfeld <Jason@zx2c4.com>
Tue, 29 May 2018 23:37:57 +0000 (01:37 +0200)
committerJason A. Donenfeld <Jason@zx2c4.com>
Wed, 30 May 2018 23:24:51 +0000 (01:24 +0200)
This works around a race condition in macOS's network daemons, while
also adding one in the form of possibly calling kill -ALRM on a stale
PID; unfortunately bash can't wait from a trap.

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
src/wg-quick/darwin.bash

index 81139e6de70da33de02f9aa1b35f5966c611cb4b..8bcc40467da36b532ef520463bf8e19afe1e092d 100755 (executable)
@@ -293,7 +293,8 @@ monitor_daemon() {
        echo "[+] Backgrounding route monitor" >&2
        (trap 'del_routes; del_dns; exit 0' INT TERM EXIT
        exec >/dev/null 2>&1
-       local event
+       local event pid=$BASHPID
+       [[ ${#DNS[@]} -gt 0 ]] && trap set_dns ALRM
        # TODO: this should also check to see if the endpoint actually changes
        # in response to incoming packets, and then call set_endpoint_direct_route
        # then too. That function should be able to gracefully cleanup if the
@@ -303,7 +304,10 @@ monitor_daemon() {
                ifconfig "$REAL_INTERFACE" >/dev/null 2>&1 || break
                [[ $AUTO_ROUTE4 -eq 1 || $AUTO_ROUTE6 -eq 1 ]] && set_endpoint_direct_route
                [[ -z $MTU ]] && set_mtu
-               [[ ${#DNS[@]} -gt 0 ]] && set_dns
+               if [[ ${#DNS[@]} -gt 0 ]]; then
+                       set_dns
+                       sleep 2 && kill -ALRM $pid 2>/dev/null &
+               fi
        done < <(route -n monitor)) & disown
 }