[arch-projects] [netctl][PATCH] wifi-menu: generate keys in proper quoting syntax

Jouke Witteveen j.witteveen at gmail.com
Thu Feb 27 08:28:40 EST 2014


---
 src/wifi-menu | 30 ++++++++++++++++++++++++------
 1 file changed, 24 insertions(+), 6 deletions(-)

diff --git a/src/wifi-menu b/src/wifi-menu
index 0323e51..80eadd4 100755
--- a/src/wifi-menu
+++ b/src/wifi-menu
@@ -19,6 +19,16 @@ Arguments:
 END
 }
 
+# Prepares $1 for use in a special quoting context
+quote_safe()
+{
+    if [[ "$1" = \"* ]]; then
+        printf '""%s"' "$1"
+    else
+        printf "%s" "$1"
+    fi
+}
+
 # Fills PROFILES and ESSIDS with the profile names and essids of the profiles
 # for interface $1.
 init_profiles()
@@ -125,13 +135,21 @@ create_profile()
         [[ "$OBSCURE" ]] && box="--insecure --passwordbox" || box="--inputbox"
         msg="Enter $security security key for\n'$1'"
         key=$(dialog $box "$msg" 10 40 --stdout) || return $?
-        if [[ "${#key}" -ge 8 && "${#key}" -le 63 ]]; then
+        if [[ "${BASH_REMATCH[0]}" = "WEP" ]]; then
+            if [[ "$key" = +([[:xdigit:]][[:xdigit:]]) ]]; then
+                key="\"$key"
+            else
+                key=$(quote_safe "$key")
+            fi
+        elif [[ "${#key}" -ge 8 && "${#key}" -le 63 ]]; then
             if [[ "$OBSCURE" ]]; then
-                key=$(wpa_passphrase "$1" "$key" | sed -n "s/^[[:space:]]*psk=//p")
+                key="\"$(wpa_passphrase "$1" "$key" | sed -n "s/^[[:space:]]*psk=//p")"
             else
-                key=$(printf "%q" "$key")
+                key=$(quote_safe "$key")
             fi
-        elif ! [[ "${#key}" -eq 64 && "$key" = +([[:xdigit:]]) ]]; then
+        elif [[ "${#key}" -eq 64 && "$key" = +([[:xdigit:]]) ]]; then
+            key="\"$key"
+        else
             return 4
         fi
     fi
@@ -140,9 +158,9 @@ Description='Automatically generated profile by wifi-menu'
 Interface=$INTERFACE
 Connection=wireless
 Security=$security
-ESSID=$(printf "%q" "$1")
+ESSID=$(printf "%q" "$(quote_safe "$1")")
 IP=dhcp
-${key+Key=$key}
+${key+Key=$(printf "%q" "$key")}
 EOF
     printf "%s" "$PROFILE"
     return 0
-- 
1.9.0



More information about the arch-projects mailing list