On Tue, Jul 04, 2017 at 10:44:57PM +0200, Klemens Nanni wrote:
> On Mon, Jul 03, 2017 at 12:45:32AM +0200, Klemens Nanni wrote:
> > Thanks for looking into it.
> >
> > On Sun, Jul 02, 2017 at 04:32:43PM +0000, Robert Peichaer wrote:
> > > ieee80211_scan()
> > > - Extract the needed information (nwid, bssid) using a very specific
> > > sed expression. Any line, not matching this expr is ignored.
> > >
> > > - Remove leading and trailing double-quotes in case of nwids with
> > > spaces.
> > I had the ugly case of an empty SSID in reach while testing this so I
> > intentionally left double quotes in place within WLANLIST so that
> > the list presented to the user wouldn't look broken, e.g.
> > "my wifi" chan 1 bssid ...
> > "" chan 2 bssid ...
> > as opposed to
> > my wifi chan 1 bssid ...
> > chan 2 bssid ...
> >
> > I'd also leave unqouting to the routine that actually requires it
> > instead of the function that just provides the list.
> >
> > > - Write nwid and bssid into WLANLIST as '<nwid><space>(<bssid>)'.
> > Writing the simple format directly to cache seems like a good idea
> > instead of just cutting ^nwid first here and .*$ somewhere else.
> >
> > > ieee80211_config()
> > > - just print WLANLIST using ieee80211_scan() if the user chooses
> > > '?' which has the right format already
> > >
> > > - in case the user selects an entry from WLANLIST using a number,
> > > remove the '<space>(<bssid>)' part from the line, resulting in
> > > the nwid (without double-quotes)
> > >
> > > - using the quote() function with the ifconfig command ensures,
> > > that the nwid is quoted properly with single-quotes in case it
> > > contains spaces
> > This is not needed as "$_nwid" will even work if _nwid='my "wifi'.
> >
> > > - using the quote() function when writing the nwid to the hostname.if
> > > files ensures that the nwid is quoted properly with single-quotes
> > > in case it contains spaces
> > >
> > > The parse_hn_line() function in netstart does handle quoted nwids
> > > properly when processing the hostname.if config lines as far as I
> > > can see.
> > Yes, it does. But it chokes on SSIDs containing a literal " for example.
> >
> >
> > Here is an updated diff taking above considerations into account.
> >
> > Note how ([[:xdigit:]:]*)$ when picking the answer must not be
> > simplified to (.*)$ as this would fail on SSIDs like "my (hidden) wifi".
> >
> > Feedback/OK?
> That patch was mangled, sorry. Here it goes again.
>
> Index: install.sub
> ===================================================================
> RCS file: /cvs/src/distrib/miniroot/install.sub,v
> retrieving revision 1.1019
> diff -u -p -r1.1019 install.sub
> --- install.sub 2 Jul 2017 12:45:43 -0000 1.1019
> +++ install.sub 4 Jul 2017 20:43:56 -0000
> @@ -1060,10 +1060,9 @@ v6_config() {
> # Perform an 802.11 network scan on interface $1.
> # The result is cached in $WLANLIST.
> ieee80211_scan() {
> - # N.B. Skipping quoted nwid's for now.
> [[ -f $WLANLIST ]] ||
> ifconfig $1 scan |
> - sed -n 's/^ nwid \([^"]\)/\1/p' >$WLANLIST
> + sed -n 's/^[[:space:]]*nwid \(.*\) chan [0-9]* bssid
> \([[:xdigit:]:]*\).*/\1 (\2)/p' >$WLANLIST
> cat $WLANLIST
> }
>
> @@ -1082,12 +1081,12 @@ ieee80211_config() {
> ask_until "Access point? (ESSID, 'any', list# or '?')" "any"
> case "$resp" in
> +([0-9]))
> - _nwid=$(ieee80211_scan $_if | sed -n "${resp}s/ .*//p")
> + _nwid=$(ieee80211_scan $_if |
> + sed -n ${resp}'{s/ ([[:xdigit:]:]*)$//p;q;}')
> [[ -z $_nwid ]] && echo "There is no line $resp."
> + [[ $_nwid = \"*\" ]] && _nwid=${_nwid#\"}
> _nwid=${_nwid%\"}
> ;;
> - \?) ieee80211_scan $_if |
> - sed -n 's/^\([^ ]*\) chan .* bssid \([^ ]*\)
> .*$/ \1 (\2)/p' |
> - cat -n | more -c
> + \?) ieee80211_scan $_if | cat -n | more -c
> ;;
> *) _nwid=$resp
> ;;
>
Bump. Any progress on this? It still applies to the latest revision.