openvpn: autostart openvpn instances for each .conf file in /etc/openvpn
authorJo-Philipp Wich <jow@openwrt.org>
Sat, 7 Feb 2015 21:01:28 +0000 (21:01 +0000)
committerJo-Philipp Wich <jow@openwrt.org>
Sat, 7 Feb 2015 21:01:28 +0000 (21:01 +0000)
Align init behaviour with other distros by starting an OpenVPN instance
for each config file found in /etc/openvpn/. This removes the additional
requirement to "register" the configs with uci and thus simplifies the
setup.

Make sure to respect the disabled state in uci to not suddenly autostart
instances which have been previously set to disabled, also skip configs
which are already started due to uci configuration.

Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
SVN-Revision: 44310

package/network/services/openvpn/Makefile
package/network/services/openvpn/files/openvpn.init

index 98ccea07cb0ced28a10aad1617c2d29c93d9c5d0..2b0b038a290b9a8ed44dd4b30c54c74f355e99d5 100644 (file)
@@ -10,7 +10,7 @@ include $(TOPDIR)/rules.mk
 PKG_NAME:=openvpn
 
 PKG_VERSION:=2.3.6
-PKG_RELEASE:=2
+PKG_RELEASE:=3
 
 PKG_SOURCE_URL:=http://swupdate.openvpn.net/community/releases
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
index 1e0f384f97806da84eafe24f3a4db1aef411d802..294e3ed71031dc8a4185278dc31dda4a71ce7a96 100644 (file)
@@ -13,6 +13,9 @@ PROG=/usr/sbin/openvpn
 LIST_SEP="
 "
 
+UCI_STARTED=
+UCI_DISABLED=
+
 append_param() {
        local s="$1"
        local v="$2"
@@ -59,6 +62,7 @@ openvpn_add_instance() {
        procd_open_instance
        procd_set_param command "$PROG" \
                --syslog "openvpn($name)" \
+               --status "/var/run/openvpn.$name.status" \
                --cd "$dir" \
                --config "$conf"
        procd_set_param file "$dir/$conf"
@@ -69,14 +73,19 @@ openvpn_add_instance() {
 start_instance() {
        local s="$1"
 
-       section_enabled "$s" || return 1
-
        config_get config "$s" config
+       config="${config:+$(readlink -f "$config")}"
+
+       section_enabled "$s" || {
+               append UCI_DISABLED "$config" "$LIST_SEP"
+               return 1
+       }
 
        [ ! -d "/var/run" ] && mkdir -p "/var/run"
 
        if [ ! -z "$config" ]; then
-               openvpn_add_instance "$s" "$(dirname "$config")" "$(basename "$config")"
+               append UCI_STARTED "$config" "$LIST_SEP"
+               openvpn_add_instance "$s" "${config%/*}" "$config"
                return
        fi
 
@@ -123,4 +132,23 @@ start_instance() {
 start_service() {
        config_load 'openvpn'
        config_foreach start_instance 'openvpn'
+
+       local path name
+       for path in /etc/openvpn/*.conf; do
+               if [ -f "$path" ]; then
+                       name="${path##*/}"; name="${name%.conf}"
+
+                       # don't start configs again that are already started by uci
+                       if echo "$UCI_STARTED" | grep -qxF "$path"; then
+                               continue
+
+                       # don't start configs which are set to disabled in uci
+                       elif echo "$UCI_DISABLED" | grep -qxF "$path"; then
+                               logger -t openvpn "$name.conf is disabled in /etc/config/openvpn"
+                               continue
+                       fi
+
+                       openvpn_add_instance "$name" "${path%/*}" "$path"
+               fi
+       done
 }