- fix wep key handling in iw with mac80211 based drivers
- sanitize keys where necessary
- put a procedure prepare_key_wep() into /sbin/wifi for use by other driver backends
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@19118
3c298f89-4303-0410-b956-
a3cf2f4a3e73
[ "$iftype" = bridge ] && config_get "$cfg" ifname
)}
[ "$iftype" = bridge ] && config_get "$cfg" ifname
)}
+prepare_key_wep() {
+ local key="$1"
+ local hex=1
+
+ echo -n "$key" | grep -qE "[^a-fA-F0-9]" && hex=0
+ [ "${#key}" -eq 10 -a $hex -eq 1 ] || \
+ [ "${#key}" -eq 26 -a $hex -eq 1 ] || {
+ [ "${key:0:2}" = "s:" ] && key="${key#s:}"
+ key="$(echo -n "$key" | hexdump -ve '1/1 "%02x" ""')"
+ }
+ echo "$key"
+}
+
wifi_fixup_hwmode() {
local device="$1"
local default="$2"
wifi_fixup_hwmode() {
local device="$1"
local default="$2"
# configured to handle the wep connection
if [ ! "$mode" = "ap" ]; then
case "$enc" in
# configured to handle the wep connection
if [ ! "$mode" = "ap" ]; then
case "$enc" in
config_get keymgmt "$vif" keymgmt
config_get keymgmt "$vif" keymgmt
- if [ -n "$keymgmt" ]; then
- for idx in 1 2 3 4; do
- local zidx
- zidx=$(($idx - 1))
- config_get key "$vif" "key${idx}"
- if [ -n "$key" ]; then
- append keystring "${zidx}:${key} "
- fi
- done
+ if [ -z "$keymgmt" ]; then
+ config_get key "$vif" key
+ key="${key:-1}"
+ case "$key" in
+ [1234])
+ for idx in 1 2 3 4; do
+ local zidx
+ zidx=$(($idx - 1))
+ config_get ckey "$vif" "key${idx}"
+ if [ -n "$ckey" ]; then
+ [ $idx -eq $key ] && zidx="d:${zidx}"
+ append keystring "${zidx}:$(prepare_key_wep "$ckey")"
+ fi
+ done
+ ;;
+ *)
+ keystring="d:0:$(prepare_key_wep "$key")"
+ ;;
+ esac
config_get key "$vif" key
;;
esac
config_get key "$vif" key
;;
esac
sta|mesh)
config_get bssid "$vif" bssid
case "$enc" in
sta|mesh)
config_get bssid "$vif" bssid
case "$enc" in
- wep)
- if [ -n "$keymgmt" ]; then
+ *wep*)
+ if [ -z "$keymgmt" ]; then
- iw dev "$ifname" connect "$ssid" ${fixed:+$freq} $bssid key "$keystring"
+ iw dev "$ifname" connect "$ssid" ${fixed:+$freq} $bssid key $keystring
else
if eval "type wpa_supplicant_setup_vif" 2>/dev/null >/dev/null; then
wpa_supplicant_setup_vif "$vif" wext || {
else
if eval "type wpa_supplicant_setup_vif" 2>/dev/null >/dev/null; then
wpa_supplicant_setup_vif "$vif" wext || {