From e0775354bde9b8d977f4fd7980492886981621c9 Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Thu, 9 Nov 2017 14:12:06 +0900 Subject: [PATCH] wg-quick: allow for tabs in keys Signed-off-by: Jason A. Donenfeld --- contrib/reresolve-dns/reresolve-dns.sh | 36 +++++++++++++------------- src/wg-quick.bash | 4 +-- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/contrib/reresolve-dns/reresolve-dns.sh b/contrib/reresolve-dns/reresolve-dns.sh index d63f5fa..abd5cbf 100755 --- a/contrib/reresolve-dns/reresolve-dns.sh +++ b/contrib/reresolve-dns/reresolve-dns.sh @@ -10,30 +10,30 @@ CONFIG_FILE="$1" INTERFACE="${BASH_REMATCH[1]}" process_peer() { - [[ $PEER_SECTION -ne 1 || -z $PUBLIC_KEY || -z $ENDPOINT ]] && return 0 - [[ $(wg show "$INTERFACE" latest-handshakes) =~ ^${PUBLIC_KEY//+/\\+}\ ([0-9]+)$ ]] || return 0 - (( ($(date +%s) - ${BASH_REMATCH[1]}) > 135 )) || return 0 - wg set "$INTERFACE" peer "$PUBLIC_KEY" endpoint "$ENDPOINT" - reset_peer_section + [[ $PEER_SECTION -ne 1 || -z $PUBLIC_KEY || -z $ENDPOINT ]] && return 0 + [[ $(wg show "$INTERFACE" latest-handshakes) =~ ^${PUBLIC_KEY//+/\\+}\ ([0-9]+)$ ]] || return 0 + (( ($(date +%s) - ${BASH_REMATCH[1]}) > 135 )) || return 0 + wg set "$INTERFACE" peer "$PUBLIC_KEY" endpoint "$ENDPOINT" + reset_peer_section } reset_peer_section() { - PEER_SECTION=0 - PUBLIC_KEY="" - ENDPOINT="" + PEER_SECTION=0 + PUBLIC_KEY="" + ENDPOINT="" } reset_peer_section while read -r line || [[ -n $line ]]; do - key="${line%%=*}"; key="${key##*( )}"; key="${key%%*( )}" - value="${line#*=}"; value="${value##*( )}"; value="${value%%*( )}" - [[ $key == "["* ]] && { process_peer; reset_peer_section; } - [[ $key == "[Peer]" ]] && PEER_SECTION=1 - if [[ $PEER_SECTION -eq 1 ]]; then - case "$key" in - PublicKey) PUBLIC_KEY="$value"; continue ;; - Endpoint) ENDPOINT="$value"; continue ;; - esac - fi + key="${line%%=*}"; key="${key##*([[:space:]])}"; key="${key%%*([[:space:]])}" + value="${line#*=}"; value="${value##*([[:space:]])}"; value="${value%%*([[:space:]])}" + [[ $key == "["* ]] && { process_peer; reset_peer_section; } + [[ $key == "[Peer]" ]] && PEER_SECTION=1 + if [[ $PEER_SECTION -eq 1 ]]; then + case "$key" in + PublicKey) PUBLIC_KEY="$value"; continue ;; + Endpoint) ENDPOINT="$value"; continue ;; + esac + fi done < "$CONFIG_FILE" process_peer diff --git a/src/wg-quick.bash b/src/wg-quick.bash index f69061a..42bf265 100755 --- a/src/wg-quick.bash +++ b/src/wg-quick.bash @@ -35,8 +35,8 @@ parse_options() { INTERFACE="${BASH_REMATCH[1]}" shopt -s nocasematch while read -r line || [[ -n $line ]]; do - key="${line%%=*}"; key="${key##*( )}"; key="${key%%*( )}" - value="${line#*=}"; value="${value##*( )}"; value="${value%%*( )}" + key="${line%%=*}"; key="${key##*([[:space:]])}"; key="${key%%*([[:space:]])}" + value="${line#*=}"; value="${value##*([[:space:]])}"; value="${value%%*([[:space:]])}" [[ $key == "["* ]] && interface_section=0 [[ $key == "[Interface]" ]] && interface_section=1 if [[ $interface_section -eq 1 ]]; then