summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--examples/openvpn5
-rw-r--r--src/connections/openvpn57
2 files changed, 62 insertions, 0 deletions
diff --git a/examples/openvpn b/examples/openvpn
new file mode 100644
index 0000000..b6106aa
--- /dev/null
+++ b/examples/openvpn
@@ -0,0 +1,5 @@
+CONNECTION="openvpn"
+INTERFACE="ignore"
+OVPN_CONFIG="/etc/openvpn/example/openvpn.conf"
+OVPN_PID_FILE="/tmp/openvpn.example.pid"
+OVPN_FLAGS=""
diff --git a/src/connections/openvpn b/src/connections/openvpn
new file mode 100644
index 0000000..8a7be44
--- /dev/null
+++ b/src/connections/openvpn
@@ -0,0 +1,57 @@
+#! /bin/bash
+# Originally contributed by Thomas Jost: https://bugs.archlinux.org/task/21490
+
+. /usr/lib/network/network
+
+openvpn_up() {
+ load_profile "$1"
+ [[ -z "$OVPN_CONFIG" ]] && OVPN_CONFIG="/etc/openvpn/openvpn.conf"
+ [[ -z "$OVPN_PID_FILE" ]] && OVPN_PID_FILE="/var/run/openvpn-$1.pid"
+ [[ -z "$OVPN_FLAGS" ]] && OVPN_FLAGS=""
+
+ OVPN_CONF_DIR="`dirname $OVPN_CONFIG`"
+ OVPN_CONF_FILE="`basename $OVPN_CONFIG`"
+
+ /usr/sbin/openvpn --writepid $OVPN_PID_FILE --daemon --cd "$OVPN_CONF_DIR" --config "$OVPN_CONF_FILE" $OVPN_FLAGS
+
+ if [[ $? -ne 0 ]]; then
+ report_fail "OpenVPN connection failed"
+ exit 1
+ fi
+
+ # Generate a new resolv.conf
+ if [[ -n "$DNS" ]]; then
+ [[ -e /etc/resolv.conf ]] && cp /etc/resolv.conf /tmp/openvpn-$1-resolv.conf
+ : >/etc/resolv.conf
+ [[ -n "$DOMAIN" ]] && echo "domain $DOMAIN" >>/etc/resolv.conf
+ [[ -n "$SEARCH" ]] && echo "search $SEARCH" >>/etc/resolv.conf
+
+ for dns in "${DNS[@]}"; do
+ echo "nameserver $dns" >>/etc/resolv.conf
+ done
+ elif [[ -n "$DNS1" ]]; then # support older 'ethernet' syntax.
+ [[ -e /etc/resolv.conf ]] && cp /etc/resolv.conf /tmp/openvpn-$1-resolv.conf
+ : >/etc/resolv.conf
+ [[ -n "$DOMAIN" ]] && echo "domain $DOMAIN" >>/etc/resolv.conf
+ [[ -n "$SEARCH" ]] && echo "search $SEARCH" >>/etc/resolv.conf
+ [[ -n "$DNS1" ]] && echo "nameserver $DNS1" >>/etc/resolv.conf
+ [[ -n "$DNS2" ]] && echo "nameserver $DNS2" >>/etc/resolv.conf
+ fi
+}
+
+openvpn_down() {
+ load_profile "$1"
+ [[ -z "$OVPN_PID_FILE" ]] && OVPN_PID_FILE="/var/run/openvpn-$1.pid"
+
+ kill $(head -1 $OVPN_PID_FILE)
+ rm $OVPN_PID_FILE
+
+ # Restore an old resolv.conf
+ if [[ -e /tmp/openvpn-$1-resolv.conf ]]; then
+ mv -f /tmp/openvpn-$1-resolv.conf /etc/resolv.conf
+ fi
+}
+
+openvpn_$1 "$2"
+exit $?
+# vim: ft=sh ts=4 et sw=4: