From 725258b9e349eaa17bc4234439b8482fba1053e0 Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Tue, 6 Feb 2018 12:52:09 +0100 Subject: [PATCH] wg-quick: match from beginning rather than shift right Before, this meant that it simply took the last 15 characters, instead of erroring out when there's more than 15 chars. Signed-off-by: Jason A. Donenfeld --- src/wg-quick.bash | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/wg-quick.bash b/src/wg-quick.bash index a028b98..80921bf 100755 --- a/src/wg-quick.bash +++ b/src/wg-quick.bash @@ -31,10 +31,10 @@ parse_options() { CONFIG_FILE="$1" [[ $CONFIG_FILE =~ ^[a-zA-Z0-9_=+.-]{1,15}$ ]] && CONFIG_FILE="/etc/wireguard/$CONFIG_FILE.conf" [[ -e $CONFIG_FILE ]] || die "\`$CONFIG_FILE' does not exist" - [[ $CONFIG_FILE =~ /?([a-zA-Z0-9_=+.-]{1,15})\.conf$ ]] || die "The config file must be a valid interface name, followed by .conf" + [[ $CONFIG_FILE =~ (^|/)([a-zA-Z0-9_=+.-]{1,15})\.conf$ ]] || die "The config file must be a valid interface name, followed by .conf" CONFIG_FILE="$(readlink -f "$CONFIG_FILE")" ((($(stat -c '0%#a' "$CONFIG_FILE") & $(stat -c '0%#a' "${CONFIG_FILE%/*}") & 0007) == 0)) || echo "Warning: \`$CONFIG_FILE' is world accessible" >&2 - INTERFACE="${BASH_REMATCH[1]}" + INTERFACE="${BASH_REMATCH[2]}" shopt -s nocasematch while read -r line || [[ -n $line ]]; do key="${line%%=*}"; key="${key##*([[:space:]])}"; key="${key%%*([[:space:]])}"