Commit graph

131 commits

Author SHA1 Message Date
Thomas Haller
1463450393 all: use nm_dbus_path_not_empty() 2019-11-07 11:34:36 +01:00
Beniamino Galvani
5b4f4a4c30 supplicant: export authentication state
Add a property to the supplicant to indicate the current state of the
authentication process.
2019-10-15 08:34:31 +02:00
Beniamino Galvani
e36c297fd8 supplicant: allow PMF with SAE
PMF can be used with SAE, allow it. Actually, it is required according
to WPA3 specifications but there are implementations that don't
require it (hostapd can be configured in a such way); so let's not
make it mandatory for WPA3.

Fixes: 6640fb4b36 ('supplicant: add support for SAE key management')

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/issues/257
2019-10-09 13:04:41 +02:00
Iñigo Martínez
31f1516760 meson: Improve the src build file
The targets that involve the use of the `NetworkManager` library,
built in the `src` build file have been improved by applying a set
of changes:

- Indentation has been fixed.
- Set of objects used in targets have been grouped together.
- Aritificial dependencies used to group dependencies and custom
  compiler flags have been removed and their use replaced with
  proper dependencies and compiler flags to avoid any confussion.
2019-10-01 09:49:33 +02:00
Thomas Haller
abff46cacf all: manually drop code comments with file description 2019-10-01 07:50:52 +02:00
Thomas Haller
a4b7b053f8 supplicant: fix rework condition in nm_supplicant_config_add_bgscan()
Ups, sorry.

Fixes: 6fc37cb779 ('supplicant: rework condition in nm_supplicant_config_add_bgscan()')
2019-09-25 17:29:50 +02:00
Thomas Haller
6fc37cb779 supplicant: rework condition in nm_supplicant_config_add_bgscan()
Avoid the duplicate condition.

Also, fix indentation/whitespace.

No change in behavior.
2019-09-25 17:19:53 +02:00
Kristian Klausen
0f3203338c wifi: roam aggressively if we on a multi-AP network
A multi-AP network isn't always WPA Enterprise or Dynamic WEP.
I have seen multi-AP WPA-PSK networks, so lets try to detect them
and use a shorter bgscan interval. We can detect them by checking
if seen-bssids > 1.

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/merge_requests/279
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/issues/248
2019-09-25 15:53:06 +02:00
Lubomir Rintel
e1cda0150c wifi: fix the supplicant config test
Oopsie, forgot to adjust the test for change in roaming signal strength
threshold.

Fixes: 24bbceed9b ('wifi: roam more aggressively'):
2019-09-20 16:24:40 +02:00
Kristian Klausen
24bbceed9b wifi: roam more aggressively
-80dBm is a very weak signal and we should roam sooner.
iwd[1] and iOS[2] default to -70dBm, Android[3] default to -73dBm.
So lets change the roaming threshold to -70dBm.

[1] https://git.kernel.org/pub/scm/network/wireless/iwd.git/commit/?id=45a51613c4c24067fe0e35b4c084a50124282b36
[2] https://support.apple.com/en-us/HT203068
[3] 68a4599a37/core/res/res/values/config.xml (609)
    dacacbf69d/service/java/com/android/server/wifi/ScoringParams.java (218)
    dacacbf69d/service/java/com/android/server/wifi/ScoringParams.java (325)
    ee0920fb68/service/java/com/android/server/wifi/WifiNetworkSelector.java (149)

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/issues/201
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/merge_requests/278
2019-09-20 12:57:16 +02:00
Beniamino Galvani
c177a38e88 supplicant: add FT-SAE key-mgmt to verification list
FT-SAE is missing in the supplicant configuration verification list,
causing an activation failure when using SAE and the supplicant
supports FT.

Fixes: d17a0a0905 ('supplicant: allow fast transition for WPA-PSK and WPA-EAP')
2019-09-16 16:21:35 +02:00
Lubomir Rintel
24028a2246 all: SPDX header conversion
$ find * -type f |xargs perl contrib/scripts/spdx.pl
  $ git rm contrib/scripts/spdx.pl
2019-09-10 11:19:56 +02:00
Beniamino Galvani
c97e0ce30b wifi: drop support for wpa-none key-mgmt
NM didn't support wpa-none for years because kernel drivers used to be
broken. Note that it wasn't even possible to *add* a connection with
wpa-none because it was rejected in nm_settings_add_connection_dbus().
Given that wpa-none is also deprecated in wpa_supplicant and is
considered insecure, drop altogether any reference to it.
2019-08-26 10:25:00 +02:00
Thomas Haller
2f8a4e90f0 wifi: detect FT support per interface and avoid enabling it
Previously we only cared whether supplicant is build with support for
FT. In that case we would pass FT-PSK to supplicant, like

  Config: added 'key_mgmt' value 'WPA-PSK WPA-PSK-SHA256 FT-PSK'

Supplicant would then always try FT with preference, regardless whether
the interface/driver support it. That results in a failure to associate, if
the driver does not support it.

  NetworkManager[1356]: <info>  [1566296144.9940] Config: added 'key_mgmt' value 'WPA-PSK WPA-PSK-SHA256 FT-PSK'
  ...
  wpa_supplicant[1348]: wlan0: WPA: AP key_mgmt 0x42 network profile key_mgmt 0x142; available key_mgmt 0x42
  wpa_supplicant[1348]: wlan0: WPA: using KEY_MGMT FT/PSK
  ...
  wpa_supplicant[1348]:   * akm=0xfac04
  ...
  kernel: ERROR @wl_set_key_mgmt :
  kernel: invalid cipher group (1027076)

Since we pass a list of acceptable "key_mgmt" options to supplicant,
FT-PSK should not be used when supplicant knows it's not supported.
That is a supplicant bug.

Regardless, work around it by checking the per-interface capability, and
avoid it if support is apparently not present.
2019-08-20 16:28:28 +02:00
Thomas Haller
79660f1f5b supplicant: mark static arrays as const and static in "nm-supplicant-settings-verify.c"
They should be "static" and only visible to this source file.

Also, they should be "const", that allows the linker to place them
into read-only memory.

(cherry picked from commit 722b167953)
2019-08-02 18:19:49 +02:00
Thomas Haller
da933ffe2a supplicant: don't put binary data in error message for supplicant
For better or worse, the API does not require the value to be a
UTF-8 string. We cannot just concatenate binary to a string.
Instead, backslash escape it with utf8safe-escape.

Also, this will shut up a (wrong) coverity warning at this place.

(cherry picked from commit 55143dad95)
2019-08-02 18:19:49 +02:00
Thomas Haller
d99925a1b0 supplicant: fix nm_supplicant_settings_verify_setting() honoring the string length
We must not just pretend that the value is a NULL terminated string.
That's why we have the length argument.

(cherry picked from commit 9ed26de3da)
2019-08-02 18:19:49 +02:00
Lubomir Rintel
f249956cf7 supplicant-config: add support for joining a Mesh 2019-07-29 10:28:22 +02:00
Lubomir Rintel
6779733870 supplicant-interface: detect mesh support
This ensures that we know whether wpa_supplicant was built with
CONFIG_MESH enabled.

[andreas.kling@peiker-cee.de: add add PROP_MESH_SUPPORT to
set_property()]
2019-07-29 10:28:22 +02:00
Andy Kling
0ca2796d60 supplicant-interface: add async disconnect
allow to call dbus method "Disconnect" and handle a callback given by
the caller. This allows graceful disconnects that require to wait for
the operation to complete.
2019-07-29 10:28:22 +02:00
Lubomir Rintel
d17a0a0905 supplicant: allow fast transition for WPA-PSK and WPA-EAP
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/issues/4
2019-07-25 12:31:19 +02:00
Lubomir Rintel
5480ec8537 supplicant: reorganize the routine that sets key_mgmt a bit
This is functionally equivalent, it only makes it easier to plug in the FT
enablement logic at a later point.
2019-07-25 12:31:19 +02:00
Lubomir Rintel
f5cd641c05 supplicant: detect SHA384 support 2019-07-25 12:31:19 +02:00
Lubomir Rintel
3d0d1a21c8 supplicant: detect 802.11r fast BSS transition (FT) 2019-07-25 12:31:19 +02:00
Thomas Haller
c0e075c902 all: drop emacs file variables from source files
We no longer add these. If you use Emacs, configure it yourself.

Also, due to our "smart-tab" usage the editor anyway does a subpar
job handling our tabs. However, on the upside every user can choose
whatever tab-width he/she prefers. If "smart-tabs" are used properly
(like we do), every tab-width will work.

No manual changes, just ran commands:

    F=($(git grep -l -e '-\*-'))
    sed '1 { /\/\* *-\*-  *[mM]ode.*\*\/$/d }'     -i "${F[@]}"
    sed '1,4 { /^\(#\|--\|dnl\) *-\*- [mM]ode/d }' -i "${F[@]}"

Check remaining lines with:

    git grep -e '-\*-'

The ultimate purpose of this is to cleanup our files and eventually use
SPDX license identifiers. For that, first get rid of the boilerplate lines.
2019-06-11 10:04:00 +02:00
Thomas Haller
87f7e6844d shared: move "nm-dbus-compat.h" header to "nm-std-aux/nm-dbus-compat.h"
(cherry picked from commit 8183335878)
2019-04-18 20:03:54 +02:00
Beniamino Galvani
b837561bb6 supplicant: fix setting pmf when the supplicant doesn't advertise support
wpa_supplicant only advertises pmf support since commit [1], which is
after 2.6. When using a version without that commit (for example,
plain 2.6), we would unconditionally set the global Pmf property to 1
(optional) and then skip setting the per-network property. The result
was that pmf was enabled without the possibility to disable it by
user. The correct behavior is instead to disable pmf on such versions.

[1] https://w1.fi/cgit/hostap/commit/?id=3cdb4ac074f76accf24a51d143db545afad2c90b

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/issues/129
(cherry picked from commit 560a35dd43)
2019-02-26 18:35:09 +01:00
Beniamino Galvani
7cff3136f5 supplicant: clarify ready_count usage
(cherry picked from commit cab17ff8e0)
2019-02-26 18:35:07 +01:00
Thomas Haller
b1f6d53bc4 build/meson: increase timeouts for some tests
The defaults for test timeouts in meson is 30 seconds. That is not long
enough when running

  $ NMTST_USE_VALGRIND=1 ninja -C build test

Note that meson supports --timeout-multiplier, and automatically
increases the timeout when running under valgrind. However, meson
does not understand that we are running tests under valgrind via
NMTST_USE_VALGRIND=1 environment variable.

Timeouts are really not expected to be reached and are a mean of last
resort. Hence, increasing the timeout to a large value is likely to
have no effect or to fix test failures where the timeout was too rigid.
It's unlikely that the test indeed hangs and the increase of timeout
causes a unnecessary increase of waittime before aborting.
2019-02-23 07:20:49 +01:00
Thomas Haller
53b747fff5 all: move nm_utils_hexstr2bin*() to shared
libnm exposes simplified variants of hexstr2bin in its public API. I
think that was a mistake, because libnm should provide NetworkManager
specific utils. It should not provide such string functions.

However, nmcli used to need this, so it was added to libnm.

The better approach is to add it to our internally shared static
library, so that all interested components can make use of it.
2019-02-22 14:04:13 +01:00
Thomas Haller
696cf38f45 supplicant: avoid G_VARIANT_BUILDER_INIT() from glib 2.50
G_VARIANT_BUILDER_INIT() was only added in glib 2.50, hence we cannot use
it.

Maybe nm-glib.h should provide a compat macro, but the macro relies
on the magic number GVSB_MAGIC_PARTIAL, which is private to glib.
It's not clear that we can savely provide such a compat implementation
for older glib variants.

Fixes: 642f15f2f6
2019-02-21 13:27:34 +01:00
Benjamin Berg
642f15f2f6 supplicant: Add API to set WFD IEs
This API allows setting the global WFDIEs property of wpa_supplicant.
Ideally it would be better if this property was per-device, but this is
a limitation of wpa_supplicant.
2019-02-21 10:10:20 +01:00
Thomas Haller
b7bb744973 libnm,core: use _nm_utils_ascii_str_to_uint64() instead of strtol()
Using strtol() correctly proves to be hard.

Usually, we want to also check that the end pointer is points to the end
of the string. Othewise, we silently accept trailing garbage.
2019-02-12 08:50:28 +01:00
Thomas Haller
a3370af3a8 all: drop unnecessary includes of <errno.h> and <string.h>
"nm-macros-interal.h" already includes <errno.h> and <string.h>.
No need to include it everywhere else too.
2019-02-12 08:50:28 +01:00
Thomas Haller
d25ed0820c all: don't use "static inline" in source files
For static functions inside a module, the compiler determines on its own
whether to inline the function.

Also, "inline" was used at some places that don't immediatly look like
candidates for inlining. It was most likely a copy&paste error.
2019-02-06 09:31:00 +01:00
Thomas Haller
8076025780 wifi-p2p: strict validate options argument to "StartFind"
Don't accept any unsupported options.
2019-02-05 13:55:32 +01:00
Lubomir Rintel
6640fb4b36 supplicant: add support for SAE key management
When SAE key managmenet is used, the supplicant can still use the "psk"
property. Only when the pass phrase doesn't conform to WPA-PSK
limitations, the sae_password must be used.
2019-02-05 10:20:27 +01:00
Rafael Fontenelle
d81e10942f all: fix misspellings
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/merge_requests/64
2019-01-24 17:19:44 +01:00
Beniamino Galvani
58c4cd9cc9 supplicant: don't set PMF when the supplicant doesn't support it
When the supplicant does not support PMF we wrongly set
'ieee80211w=0', but since the option is not recognized the connection
fails. Don't set it when unsupported.

Fixes: a9ab50efb1
2019-01-17 09:40:29 +01:00
Beniamino Galvani
a9ab50efb1 supplicant: set optional PMF using global supplicant property
wpa_supplicant is going to change the global default for PMF from 0
(disabled) to 1 (optional) [1], so NM code needs to be adjusted to
work with all wpa_supplicant versions. Furthermore, it is better to
set optional PMF using the 'Pmf' property instead of the 'ieee80211w'
configuration option because the former better handles missing support
in driver [2].

Note that each interface in wpa_supplicant has its own copy of global
configuration and so 'global' options must still be set on each
interface. So, let's set Pmf=1 when each interface gets created and
override it with ieee80211w={0,2} if needed during association.

[1] http://lists.infradead.org/pipermail/hostap/2018-November/039009.html
[2] http://lists.infradead.org/pipermail/hostap/2019-January/039215.html

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/issues/104
2019-01-12 22:46:48 +01:00
Iñigo Martínez
35171b3c3f build: meson: Add trailing commas
Add missing trailing commas that avoids getting noise when another
file/parameter is added and eases reviewing changes[0].

[0] https://gitlab.gnome.org/GNOME/dconf/merge_requests/11#note_291585
2018-12-20 13:50:34 +01:00
Benjamin Berg
1371414e3d supplicant: Add methods to start/stop a P2P Find operation
The timeout is limited to be in the range of 1-600s. This is arbitrary,
but the point is that a timeout of 0 is not permitted to prevent a
client from making us run a find continuously simply by forgetting to
call the stop method.
2018-12-13 09:20:55 +01:00
Benjamin Berg
c05aa3b309 supplicant: Add API to join/cancel/disconnect a P2P Group 2018-12-13 09:20:55 +01:00
Benjamin Berg
6352213e16 supplicant: Export group path of active group
This can be used to check whether a peer is joined to our group.
2018-12-13 09:20:55 +01:00
Benjamin Berg
f05b7a78c9 supplicant: Track P2P Group information, creation and destruction
Add basic tracking of P2P group information and the creation and
destruction of them.
2018-12-13 09:20:55 +01:00
Benjamin Berg
15b7b36718 supplicant: Allow creating an interface from object path
wpa_supplicant will create a new interface for P2P devices. In this case
we need to fetch the supplicant interface using the object path and then
fetch the interface name via dbus to setup the IP interface of the P2P
device later.
2018-12-13 09:20:55 +01:00
Benjamin Berg
08c28ef96b supplicant: Monitor existance of P2P Peers found 2018-12-13 09:20:55 +01:00
Benjamin Berg
ae22631d66 supplicant: Connect to P2PDevice supplicant interface
The wpa_supplicant interface has a P2PDevice when P2P is supported.
Create a proxy for this and wait for it to be ready before marking the
interface as ready.
2018-12-13 09:20:55 +01:00
Benjamin Berg
e2a99cabda supplicant: Detect P2P and WFD support
Add detection for P2P and WFD support in wpa_supplicant and pass the
information to the NMSupplicantInterface.
2018-12-13 09:20:55 +01:00
Benjamin Berg
55407fd027 supplicant: Handle interface removal
The signal was not handled, potentially creating corner cases where
NetworkManager may not notice an interface removal. Add a handler and
ensure the supplicant interface is brought down when it is removed from
wpa_supplicant for a reason other than NetworkManager requesting it.
2018-12-13 09:20:55 +01:00