From 8483bf3126583041bd6f5808978dc3b14ad15a1a Mon Sep 17 00:00:00 2001 From: Michal Hrusecky Date: Thu, 23 Jul 2020 12:10:45 +0200 Subject: [PATCH] openpvn: Split out config parsing code for reuse 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 (cherry picked from commit 86d8467c8ab792c79809a08c223dd9d40da6da2e) --- package/network/services/openvpn/Makefile | 5 +++++ .../openvpn/files/etc/hotplug.d/openvpn/01-user | 15 ++------------- .../openvpn/files/lib/functions/openvpn.sh | 16 ++++++++++++++++ 3 files changed, 23 insertions(+), 13 deletions(-) create mode 100644 package/network/services/openvpn/files/lib/functions/openvpn.sh diff --git a/package/network/services/openvpn/Makefile b/package/network/services/openvpn/Makefile index f1170bbd37..3bd7ad8d1c 100644 --- a/package/network/services/openvpn/Makefile +++ b/package/network/services/openvpn/Makefile @@ -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 diff --git a/package/network/services/openvpn/files/etc/hotplug.d/openvpn/01-user b/package/network/services/openvpn/files/etc/hotplug.d/openvpn/01-user index 6d45f0b7c6..86be69e805 100644 --- a/package/network/services/openvpn/files/etc/hotplug.d/openvpn/01-user +++ b/package/network/services/openvpn/files/etc/hotplug.d/openvpn/01-user @@ -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 index 0000000000..83fb1bb453 --- /dev/null +++ b/package/network/services/openvpn/files/lib/functions/openvpn.sh @@ -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 +} +