Subject: Re: bug#35622: Ran into a bug in the new graphical installer on WiFi setup

From: Ludovic Courtès <[email-masked]>
Date: Thu, 09 May 2019 00:09:15 +0200

Hello,

Mark H Weaver <[email-masked]> skribis:

>>>From the backtrace, I see that 'string-null?' was applied to #f, and I
> guess it was the 'string-null?' called from the 'wifi-services'
> procedure in (gnu installer newt wifi), here:
>
>   (define (wifi-services)
>     "Return all the connman services of wifi type."
>     (let ((services (connman-services)))
>       (filter (lambda (service)
>                 (and (string=? (service-type service) "wifi")
>                      (not (string-null? (service-name service)))))
>               services)))
>
> It seems that one of the services returned by (connman-services) had #f
> as its 'service-name'.  The backtrace includes a (truncated) display of
> the service in question:
>
>   #<<service> name: #f type: "wifi" path: "wifi_4cbb58…>
>
> Looking at 'connman-services', it appears that in this case, the 'keys',
> as returned by 'parse-keys' in (gnu installer connman), did not have a
> "Name" association, or else its right-hand side was #f.

I’ve tried “connmanctl services xyz” on the bare metal with an actual
WiFi device.  For me there’s always a “Name = something” property, and
the “something” appears to be the SSID of the access point.

Could it be that the access point does not advertise an SSID, and thus
its “Name” property is the empty string or is missing altogether?

It could be that changing the ‘parse-keys’ regexp as shown below would
solve the problem for cases where “connmanctl services xyz” writes
literally:

  Name = 

WDYT, Mathieu?

Hugo, would it be an option for you to (1) boot the installation image,
and (2) to grab the output of this command:

  for s in $(connmanctl services | cut -c 25- | grep wifi) ; do connmanctl service $s ; done

Note that it will provide information about the WiFi networks around
you, which you may or may not want to share publicly.

Thanks,
Ludo’.

diff --git a/gnu/installer/connman.scm b/gnu/installer/connman.scm
index ef8cca3952..b6e3dfd909 100644
--- a/gnu/installer/connman.scm
+++ b/gnu/installer/connman.scm
@@ -170,7 +170,7 @@ to be translated."
 
 Return the corresponding association list of '((KEY . VALUE) (KEY2 . VALUE2)
 ...)  elements."
-  (let ((key-regex (make-regexp "([^ ]+) = ([^$]+)")))
+  (let ((key-regex (make-regexp "([^ ]+) = ([^$]*)")))
     (map (lambda (key)
            (let ((match-key (regexp-exec key-regex key)))
              (cons (match:substring match-key 1)