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:
Jo-Philipp Wich 2010-01-13 18:39:44 +00:00
parent 5f84b8a838
commit cb30b52ec1
2 changed files with 37 additions and 14 deletions

View file

@ -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"

View file

@ -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 || {