Skip to content
This repository has been archived by the owner on Dec 27, 2019. It is now read-only.

Commit

Permalink
wg-quick: darwin: support being called from launchd
Browse files Browse the repository at this point in the history
This causes wg-quick up to wait for the monitor to exit before it exits,
so that launchd can correctly wait on it.

Reported-by: Cameron Palmer <[email protected]>
  • Loading branch information
zx2c4 committed Jun 19, 2019
1 parent 525f15f commit 814d7b7
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 1 deletion.
12 changes: 12 additions & 0 deletions contrib/examples/launchd/README
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
WireGuard for Launchd
=====================

The example `com.wireguard.wg0.plist` file may be used for running wg-quick(8)
as a launchd service. Note that the `PATH` variable is modified to point to
the PATH used by Homebrew or Macports, so that it uses the non-system bash(1).

Usage
-----

$ sudo cp com.wireguard.wg0.plist /Library/LaunchDaemons
$ sudo launchctl load /Library/LaunchDaemons/com.wireguard.wg0.plist
25 changes: 25 additions & 0 deletions contrib/examples/launchd/com.wireguard.wg0.plist
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd";>
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.wireguard.wg0</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/wg-quick</string>
<string>up</string>
<string>/usr/local/etc/wireguard/wg0.conf</string>
</array>
<key>OnDemand</key>
<false/>
<key>RunAtLoad</key>
<true/>
<key>TimeOut</key>
<integer>90</integer>
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
</dict>
</dict>
</plist>
17 changes: 16 additions & 1 deletion src/tools/wg-quick/darwin.bash
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,17 @@ parse_options() {
shopt -u nocasematch
}

detect_launchd() {
unset LAUNCHED_BY_LAUNCHD
local line
while read -r line; do
if [[ $line =~ ^\s*domain\ =\ ]]; then
LAUNCHED_BY_LAUNCHD=1
break
fi
done < <(launchctl procinfo $$ 2>/dev/null)
}

read_bool() {
case "$2" in
true) printf -v "$1" 1 ;;
Expand Down Expand Up @@ -308,7 +319,8 @@ monitor_daemon() {
set_dns
sleep 2 && kill -ALRM $pid 2>/dev/null &
fi
done < <(route -n monitor)) & disown
done < <(route -n monitor)) &
[[ -n $LAUNCHED_BY_LAUNCHD ]] || disown
}

add_route() {
Expand Down Expand Up @@ -463,6 +475,7 @@ if [[ $# -eq 1 && ( $1 == --help || $1 == -h || $1 == help ) ]]; then
cmd_usage
elif [[ $# -eq 2 && $1 == up ]]; then
auto_su
detect_launchd
parse_options "$2"
cmd_up
elif [[ $# -eq 2 && $1 == down ]]; then
Expand All @@ -482,4 +495,6 @@ else
exit 1
fi

[[ -n $LAUNCHED_BY_LAUNCHD ]] && wait

exit 0

0 comments on commit 814d7b7

Please sign in to comment.