openvpn: Allow override of interface name
authorMichal Hrusecky <michal@hrusecky.net>
Mon, 20 Jul 2020 13:23:07 +0000 (15:23 +0200)
committerJo-Philipp Wich <jo@mein.io>
Thu, 23 Jul 2020 11:10:09 +0000 (13:10 +0200)
If using a configuration file for OpenVPN, allow overriding name of the
interface. The reason is that then people could use configuration file
provided by VPN provider directly and override the name of the interface
to include it in correct firewall zone without need to alter the
configuration file.

Signed-off-by: Michal Hrusecky <michal@hrusecky.net>
(cherry picked from commit c93667358515ec078ef4ac96393623ac084e5c9e)

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

index 3bd7ad8d1ccb25d849de1e18c923b6d2bb7743a6..8126b3a7c7087cb0a27e10787d7f6b2fcd1ba2a4 100644 (file)
@@ -10,7 +10,7 @@ include $(TOPDIR)/rules.mk
 PKG_NAME:=openvpn
 
 PKG_VERSION:=2.4.9
-PKG_RELEASE:=2
+PKG_RELEASE:=3
 
 PKG_SOURCE_URL:=\
        https://build.openvpn.net/downloads/releases/ \
index a560b89ff243cbd37c430cfdac4216cdb8c443c6..a454eb4ba0197115881f60b3c096a741437e2978 100644 (file)
@@ -69,6 +69,40 @@ section_enabled() {
        [ $enable -gt 0 ] || [ $enabled -gt 0 ]
 }
 
+openvpn_get_dev() {
+       local dev dev_type
+       local name="$1"
+       local conf="$2"
+
+       # Do override only for configurations with config_file
+       config_get config_file "$name" config
+       [ -n "$config_file" ] || return
+
+       # Check there is someething to override
+       config_get dev "$name" dev
+       config_get dev_type "$name" dev_type
+       [ -n "$dev" ] || return
+
+       # If there is a no dev_type, try to guess it
+       if [ -z "$dev_type" ]; then
+               . /lib/functions/openvpn.sh
+
+               local odev odev_type
+               get_openvpn_option "$conf" odev dev
+               get_openvpn_option "$conf" odev_type dev-type
+               [ -n "$odev_type" ] || odev_type="$odev"
+
+               case "$odev_type" in
+                       tun*) dev_type="tun" ;;
+                       tap*) dev_type="tap" ;;
+                       *) return;;
+               esac
+       fi
+
+       # Return overrides
+       echo "--dev-type $dev_type --dev $dev"
+}
+
 openvpn_add_instance() {
        local name="$1"
        local dir="$2"
@@ -83,7 +117,8 @@ openvpn_add_instance() {
                --config "$conf" \
                --up "/usr/libexec/openvpn-hotplug up $name" \
                --down "/usr/libexec/openvpn-hotplug down $name" \
-               --script-security "${security:-2}"
+               --script-security "${security:-2}" \
+               $(openvpn_get_dev "$name" "$conf")
        procd_set_param file "$dir/$conf"
        procd_set_param term_timeout 15
        procd_set_param respawn