openpvn: Split out config parsing code for reuse
authorMichal Hrusecky <michal@hrusecky.net>
Thu, 23 Jul 2020 10:10:45 +0000 (12:10 +0200)
committerJo-Philipp Wich <jo@mein.io>
Thu, 23 Jul 2020 11:10:09 +0000 (13:10 +0200)
Split out code that parses openvpn configuration file into separate file
that can be later included in various scripts and reused.

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

package/network/services/openvpn/Makefile
package/network/services/openvpn/files/etc/hotplug.d/openvpn/01-user
package/network/services/openvpn/files/lib/functions/openvpn.sh [new file with mode: 0644]

index f1170bbd37dd21a762d3ed1ea266eb8d29e61db2..3bd7ad8d1ccb25d849de1e18c923b6d2bb7743a6 100644 (file)
@@ -112,6 +112,7 @@ define Package/openvpn-$(BUILD_VARIANT)/install
                $(1)/etc/init.d \
                $(1)/etc/config \
                $(1)/etc/openvpn \
+               $(1)/lib/functions \
                $(1)/lib/upgrade/keep.d \
                $(1)/usr/libexec \
                $(1)/etc/hotplug.d/openvpn
@@ -128,6 +129,10 @@ define Package/openvpn-$(BUILD_VARIANT)/install
                files/usr/libexec/openvpn-hotplug \
                $(1)/usr/libexec/openvpn-hotplug
 
+       $(INSTALL_DATA) \
+               files/lib/functions/openvpn.sh \
+               $(1)/lib/functions/openvpn.sh
+
        $(INSTALL_DATA) \
                files/etc/hotplug.d/openvpn/01-user \
                $(1)/etc/hotplug.d/openvpn/01-user
index 6d45f0b7c69059a220db2e6d791f50be70f6eb32..86be69e80574497ab46fc80583f5262fbdad3f5e 100644 (file)
@@ -1,17 +1,6 @@
 #!/bin/sh
 
-get_option() {
-       local variable="$1"
-       local option="$2"
-
-       local value="$(sed -rne 's/^[ \t]*'"$option"'[ \t]+(([^ \t\\]|\\.)+)[ \t]*$/\1/p' "$config" | tail -n1 | sed -re 's/\\(.)/\1/g')"
-       [ -n "$value" ] || value="$(sed -rne 's/^[ \t]*'"$option"'[ \t]+'"'([^']+)'"'[ \t]*$/\1/p' "$config" | tail -n1)"
-       [ -n "$value" ] || value="$(sed -rne 's/^[ \t]*'"$option"'[ \t]+"(([^"\\]|\\.)+)"[ \t]*$/\1/p' "$config" | tail -n1 | sed -re 's/\\(.)/\1/g')"
-       [ -n "$value" ] || return 1
-
-       export -n "$variable=$value"
-       return 0
-}
+. /lib/functions/openvpn.sh
 
 [ -e "/etc/openvpn.user" ] && {
        env -i ACTION="$ACTION" INSTANCE="$INSTANCE" \
@@ -23,7 +12,7 @@ get_option() {
 # Wrap user defined scripts on up/down events
 case "$ACTION" in
        up|down)
-               if get_option command "$ACTION"; then
+               if get_openvpn_option "$config" command "$ACTION"; then
                        exec /bin/sh -c "$command $ACTION $INSTANCE $*"
                fi
        ;;
diff --git a/package/network/services/openvpn/files/lib/functions/openvpn.sh b/package/network/services/openvpn/files/lib/functions/openvpn.sh
new file mode 100644 (file)
index 0000000..83fb1bb
--- /dev/null
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+get_openvpn_option() {
+       local config="$1"
+       local variable="$2"
+       local option="$3"
+
+       local value="$(sed -rne 's/^[ \t]*'"$option"'[ \t]+(([^ \t\\]|\\.)+)[ \t]*$/\1/p' "$config" | tail -n1 | sed -re 's/\\(.)/\1/g')"
+       [ -n "$value" ] || value="$(sed -rne 's/^[ \t]*'"$option"'[ \t]+'"'([^']+)'"'[ \t]*$/\1/p' "$config" | tail -n1)"
+       [ -n "$value" ] || value="$(sed -rne 's/^[ \t]*'"$option"'[ \t]+"(([^"\\]|\\.)+)"[ \t]*$/\1/p' "$config" | tail -n1 | sed -re 's/\\(.)/\1/g')"
+       [ -n "$value" ] || return 1
+
+       export -n "$variable=$value"
+       return 0
+}
+