On Tue, Nov 02, 2021 at 05:43:03PM +0000, Klemens Nanni wrote:
> On Tue, Nov 02, 2021 at 05:26:17PM +0000, Klemens Nanni wrote:
> > At least bwfm(4) does not support WEP:
> > 
> >     # ifconfig bwfm0 nwkey 12345          
> >     ifconfig: SIOCS80211NWKEY: Operation not supported by device
> >     # echo $?
> >     0
> > 
> > ifconfig(8) must return non-zero in this case.
> > 
> > This is relevant for an upcoming installer fix, but also worth itself.
> > 
> > OK?
> > 
> > Index: ifconfig.c
> > ===================================================================
> > RCS file: /cvs/src/sbin/ifconfig/ifconfig.c,v
> > retrieving revision 1.445
> > diff -u -p -r1.445 ifconfig.c
> > --- ifconfig.c      6 Oct 2021 06:14:08 -0000       1.445
> > +++ ifconfig.c      2 Nov 2021 17:20:01 -0000
> > @@ -2033,7 +2033,7 @@ setifnwkey(const char *val, int d)
> >     }
> >  
> >     if (ioctl(sock, SIOCS80211NWKEY, (caddr_t)&nwkey) == -1)
> > -           warn("SIOCS80211NWKEY");
> > +           err("SIOCS80211NWKEY");
> >  }
> >  
> >  /* ARGSUSED */
> > 
> 
> I noticed the above mentioned error^Wwarning in the installer:
> 
>       Which network interface do you wish to configure? (or 'done') [bse0] 
> bwfm0
>       ifconfig: SIOCS80211NWKEY: Operation not supported by device
>       Access point? (ESSID, 'any', list# or '?') [any] 2
>       Security protocol? (O)pen, (W)EP, WPA-(P)SK [O] 
> 
> 
> This comes from ieee80211_scan():
> 
>       Reset 802.11 settings and determine WPA capability.   
>       ifconfig $_if -nwid -nwkey
>       ifconfig $_if -wpa 2>/dev/null && _has_wpa=1      
> 
> 
> With ifconfig and installer fixed, we can properly detect and skip WEP:
> 
>       Which network interface do you wish to configure? (or 'done') [bse0] 
> bwfm0
>       Access point? (ESSID, 'any', list# or '?') [any] 2
>       Security protocol? (O)pen, WPA-(P)SK [O] w
>       'w' is not a valid choice.
>       Security protocol? (O)pen, WPA-(P)SK [O] p
>       WPA passphrase? (will echo) 

So bwfm(4) still has not fix/support for WEP.

Whether accidentially as demonstrated above or potentially intentionally
by removing WEP from (new) drivers in order to deprecate it,
I think it is a good idea to probe for WEP support independently just
like we do for WPA already.

This way bwfm+WEP users won't run into install scenarios that are known
to be broken;  maybe other drivers have similar problems, so this diff
would reflect it.

If we ever^W^W^WOnce we deprecate WPA (on a per driver basis?), this
diff will have us prepared already.

I tested this on my Pinebook Pro and Pi 4 B which both come with bwfm.

This also nicely decouples the ifconfig(8) commands used to reset;
multiple commands together are not atomic and failure on one command
will effect execution of the others (or not, the past showed both ways),
so best reset step-by-step and be able to handle failure individually.


OK?

Index: install.sub
===================================================================
RCS file: /cvs/src/distrib/miniroot/install.sub,v
retrieving revision 1.1184
diff -u -p -r1.1184 install.sub
--- install.sub 2 Nov 2021 16:54:01 -0000       1.1184
+++ install.sub 13 Nov 2021 13:11:34 -0000
@@ -1228,11 +1228,12 @@ ieee80211_scan() {
 # Configure 802.11 interface $1 and append ifconfig options to hostname.if $2.
 # Ask the user for the access point ESSID, the security protocol and a secret.
 ieee80211_config() {
-       local _if=$1 _hn=$2 _prompt _nwid _haswpa=0 _err
+       local _if=$1 _hn=$2 _prompt _nwid _has_wep=0 _has_wpa=0 _err
 
-       # Reset 802.11 settings and determine wpa capability.
-       ifconfig $_if -nwid -nwkey
-       ifconfig $_if -wpa 2>/dev/null && _haswpa=1
+       # Reset 802.11 settings and determine WEP and WPA capabilities.
+       ifconfig $_if -nwid
+       ifconfig $_if -nwkey 2>/dev/null && _has_wep=1
+       ifconfig $_if -wpa 2>/dev/null && _has_wpa=1
 
        # Empty scan cache.
        rm -f $WLANLIST
@@ -1256,17 +1257,19 @@ ieee80211_config() {
        # 'any' implies that only open access points are considered.
        if [[ $_nwid != any ]]; then
 
-               _prompt="Security protocol? (O)pen, (W)EP"
-               ((_haswpa == 1)) && _prompt="$_prompt, WPA-(P)SK"
+               _prompt="Security protocol? (O)pen"
+               ((_has_wep == 1)) && _prompt="$_prompt, (W)EP"
+               ((_has_wpa == 1)) && _prompt="$_prompt, WPA-(P)SK"
                while :; do
                        ask_until "$_prompt" "O"
-                       case "$_haswpa-$resp" in
-                       ?-[Oo]) # No further questions
+                       case "${_has_wep}${_has_wpa}-${resp}" in
+                       ??-[Oo]) # No further questions
                                ifconfig $_if join "$_nwid"
                                quote join "$_nwid" >>$_hn
                                break
                                ;;
-                       ?-[Ww]) ask_passphrase "WEP key?"
+                       1?-[Ww])
+                               ask_passphrase "WEP key?"
                                # Make sure ifconfig accepts the key.
                                if _err=$(ifconfig $_if join "$_nwid" nwkey 
"$_passphrase" 2>&1) &&
                                        [[ -z $_err ]]; then
@@ -1275,7 +1278,8 @@ ieee80211_config() {
                                fi
                                echo "$_err"
                                ;;
-                       1-[Pp]) ask_passphrase "WPA passphrase?"
+                       ?1-[Pp])
+                               ask_passphrase "WPA passphrase?"
                                # Make sure ifconfig accepts the key.
                                if ifconfig $_if join "$_nwid" wpakey 
"$_passphrase"; then
                                        quote join "$_nwid" wpakey 
"$_passphrase" >>$_hn

Reply via email to