base-files, mac80211 (#6491) - 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
SVN-Revision: 19118
This commit is contained in:
parent
5f84b8a838
commit
cb30b52ec1
2 changed files with 37 additions and 14 deletions
|
@ -34,6 +34,19 @@ bridge_interface() {(
|
||||||
[ "$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() {
|
wifi_fixup_hwmode() {
|
||||||
local device="$1"
|
local device="$1"
|
||||||
local default="$2"
|
local default="$2"
|
||||||
|
|
|
@ -176,20 +176,30 @@ enable_mac80211() {
|
||||||
# configured to handle the wep connection
|
# configured to handle the wep connection
|
||||||
if [ ! "$mode" = "ap" ]; then
|
if [ ! "$mode" = "ap" ]; then
|
||||||
case "$enc" in
|
case "$enc" in
|
||||||
wep)
|
*wep*)
|
||||||
config_get keymgmt "$vif" keymgmt
|
config_get keymgmt "$vif" keymgmt
|
||||||
if [ -n "$keymgmt" ]; then
|
if [ -z "$keymgmt" ]; then
|
||||||
|
config_get key "$vif" key
|
||||||
|
key="${key:-1}"
|
||||||
|
case "$key" in
|
||||||
|
[1234])
|
||||||
for idx in 1 2 3 4; do
|
for idx in 1 2 3 4; do
|
||||||
local zidx
|
local zidx
|
||||||
zidx=$(($idx - 1))
|
zidx=$(($idx - 1))
|
||||||
config_get key "$vif" "key${idx}"
|
config_get ckey "$vif" "key${idx}"
|
||||||
if [ -n "$key" ]; then
|
if [ -n "$ckey" ]; then
|
||||||
append keystring "${zidx}:${key} "
|
[ $idx -eq $key ] && zidx="d:${zidx}"
|
||||||
|
append keystring "${zidx}:$(prepare_key_wep "$ckey")"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
keystring="d:0:$(prepare_key_wep "$key")"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
*wpa*|*psk*)
|
*psk*|*wpa*)
|
||||||
config_get key "$vif" key
|
config_get key "$vif" key
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
@ -241,10 +251,10 @@ enable_mac80211() {
|
||||||
sta|mesh)
|
sta|mesh)
|
||||||
config_get bssid "$vif" bssid
|
config_get bssid "$vif" bssid
|
||||||
case "$enc" in
|
case "$enc" in
|
||||||
wep)
|
*wep*)
|
||||||
if [ -n "$keymgmt" ]; then
|
if [ -z "$keymgmt" ]; then
|
||||||
[ -n "$keystring" ] &&
|
[ -n "$keystring" ] &&
|
||||||
iw dev "$ifname" connect "$ssid" ${fixed:+$freq} $bssid key "$keystring"
|
iw dev "$ifname" connect "$ssid" ${fixed:+$freq} $bssid key $keystring
|
||||||
else
|
else
|
||||||
if eval "type wpa_supplicant_setup_vif" 2>/dev/null >/dev/null; then
|
if eval "type wpa_supplicant_setup_vif" 2>/dev/null >/dev/null; then
|
||||||
wpa_supplicant_setup_vif "$vif" wext || {
|
wpa_supplicant_setup_vif "$vif" wext || {
|
||||||
|
|
Loading…
Reference in a new issue