diff options
| -rwxr-xr-x | package/base-files/files/sbin/wifi | 13 | ||||
| -rw-r--r-- | package/mac80211/files/lib/wifi/mac80211.sh | 38 | 
2 files changed, 37 insertions, 14 deletions
diff --git a/package/base-files/files/sbin/wifi b/package/base-files/files/sbin/wifi index 90aeef725..5b6007f0a 100755 --- a/package/base-files/files/sbin/wifi +++ b/package/base-files/files/sbin/wifi @@ -34,6 +34,19 @@ bridge_interface() {(  	[ "$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" diff --git a/package/mac80211/files/lib/wifi/mac80211.sh b/package/mac80211/files/lib/wifi/mac80211.sh index 742c1bb44..06f4b84da 100644 --- a/package/mac80211/files/lib/wifi/mac80211.sh +++ b/package/mac80211/files/lib/wifi/mac80211.sh @@ -176,20 +176,30 @@ enable_mac80211() {  		# configured to handle the wep connection  		if [ ! "$mode" = "ap" ]; then  			case "$enc" in -				wep) +				*wep*)  					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  					fi  				;; -				*wpa*|*psk*) +				*psk*|*wpa*)  					config_get key "$vif" key  				;;  			esac @@ -241,10 +251,10 @@ enable_mac80211() {  			sta|mesh)  				config_get bssid "$vif" bssid  				case "$enc" in -					wep) -						if [ -n "$keymgmt" ]; then +					*wep*) +						if [ -z "$keymgmt" ]; then  							[ -n "$keystring" ] && -								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 || {  | 
