Commit graph

31820 commits

Author SHA1 Message Date
Beniamino Galvani
b3584ae994 device: emit dhcp-change dispatcher event also after a lease renewal
Fixes: e1648d0665 ('core: commit l3cd asynchronously on DHCP bound event')
Co-authored-by: Thomas Haller <thaller@redhat.com>

https://bugzilla.redhat.com/show_bug.cgi?id=2179537
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1609
(cherry picked from commit cab80c5129)
2023-04-19 09:48:36 +02:00
Beniamino Galvani
b2ed01efc9 device: stop activation when queueing the unmanaged state
When the unmanaged state is queued, we must ensure that the current
activation doesn't overwrite the queue stated with a new one. This can
happen for example if a dispatcher script or a firewall call
terminate, or if the next activation stage is dispatched.

Fixes-test: @preserve_master_and_ip_settings
https://bugzilla.redhat.com/show_bug.cgi?id=2178269
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1599
(cherry picked from commit 89a8f51235)
2023-04-11 09:53:01 +02:00
Beniamino Galvani
5019004bad
dhcp: reset IPv6 DAD flag on lease update
If the client was waiting for IPv6 DAD to complete and the lease was
updated or lost, `wait_ipv6_dad` needs to be cleared; otherwise, at
the next platform change the client will try to evaluate the DAD state
with a different or no lease. In particular if there is no lease the
client will try to decline it because there are no valid addresses,
leading to an assertion failure:

 ../src/core/dhcp/nm-dhcp-client.c:997:_dhcp_client_decline: assertion failed: (l3cd)

Backtrace:

  __GI_raise ()
  __GI_abort ()
  g_assertion_message ()
  g_assertion_message_expr ()
  _dhcp_client_decline (self=0x1af13b0, l3cd=0x0, error_message=0x8e25e1 "DAD failed", error=0x7ffec2c45cb0) at ../src/core/dhcp/nm-dhcp-client.c:997
  l3_cfg_notify_cb (l3cfg=0x1bc47f0, notify_data=0x7ffec2c46c60, self=0x1af13b0) at ../src/core/dhcp/nm-dhcp-client.c:1190
  g_closure_invoke ()
  g_signal_emit_valist ()
  g_signal_emit ()
  _nm_l3cfg_emit_signal_notify () at ../src/core/nm-l3cfg.c:629
  _nm_l3cfg_notify_platform_change_on_idle () at ../src/core/nm-l3cfg.c:1390
  _platform_signal_on_idle_cb () at ../src/core/nm-netns.c:411
  g_idle_dispatch ()

Fixes: 393bc628ff ('dhcp: wait DAD completion for DHCPv6 addresses')

https://bugzilla.redhat.com/show_bug.cgi?id=2179890
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1594
(cherry picked from commit 24461954d0)
2023-04-06 18:38:50 +02:00
Thomas Haller
92f22c013e core: fix setting non-blocking FD in nm_utils_spawn_helper()
Fixes: df1d214b2e ('clients: polkit-agent: implement polkit agent without using libpolkit')
(cherry picked from commit 20bd6b6803)
2023-04-06 13:02:33 +02:00
Thomas Haller
f91ccd984f core: fix setting FD flags in _rfkill_update_system()
F_SETFL will reset the flags. That is wrong, as we only want to add
O_NONBLOCK flag and leaving the other flags alone. Usually, we would
need to call F_GETFL first.

Note that on Linux, F_SETFL can only set certain flags, so the
O_RDWR|O_CLOEXEC flags were unaffected by this. That means, most likely
there are no other flags that our use of F_SETFL would wrongly clear.
Still, it's ugly, because it's not obvious whether there might be other
flags.

Avoid that altogether, by setting the flag already during open().

Fixes: 67e092abcb ('core: better handling of rfkill for WiMAX and WiFi (bgo #629589) (rh #599002)')
(cherry picked from commit 62a85fa845)
2023-04-06 13:02:33 +02:00
Thomas Haller
2df22bac90 core: fix setting non-blocking stderr in nm_utils_spawn_helper()
Fixes: d65702803c ('core: print stderr from nm-daemon-helper')
(cherry picked from commit d1f7e439c6)
2023-04-06 13:02:33 +02:00
Thomas Haller
63eef57716 core: fix setting non-blocking FD in nm_utils_spawn_helper()
Fixes: 6ac21ba916 ('core: add infrastructure for spawning a helper process')
(cherry picked from commit fd123315e5)
2023-04-06 13:02:33 +02:00
Thomas Haller
07efcc124f release: improve hint about documentation in "release.sh"
A "minor" release can still be the latest release. It depends
on which minor release you do. The script isn't smart enough
to understand the difference, so make the hint a bit clearer.

(cherry picked from commit 3c548dd081)
2023-04-06 12:42:52 +02:00
Thomas Haller
d9753d1ec9 release: fix honoring $ORIGIN environment variable
(cherry picked from commit b88700bd4b)
2023-04-06 12:42:52 +02:00
Thomas Haller
a71e51e712
libnm/tests: avoid uninitialized variable warning in _invalid_option_write_handler()
src/libnm-core-impl/tests/test-keyfile.c: In function '_invalid_option_write_handler':
  src/libnm-core-impl/tests/test-keyfile.c:917:9: error: 'message' may be used uninitialized [-Werror=maybe-uninitialized]
    917 |         g_assert(message && strstr(message, "ethtool.bogus"));
        |         ^
  src/libnm-core-impl/tests/test-keyfile.c:905:29: note: 'message' was declared here
    905 |     const char             *message;
        |                             ^
  lto1: all warnings being treated as errors

(cherry picked from commit 8d6349156b)
2023-04-03 09:39:53 +02:00
Thomas Haller
c52bd82ca1
wwan/ofono: merge branch 'peat-psuwit:for-upstream/combined-context-mms-proxy-route'
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1584

(cherry picked from commit 9ed802b0c2)
2023-03-30 08:43:15 +02:00
Ratchanan Srirattanamet
1fb2be6ada
wwan/ofono: account for port in the Proxy property
(cherry picked from commit bb226d4ed1)
2023-03-30 08:43:15 +02:00
Ratchanan Srirattanamet
7f7fd4244c
wwan/ofono: correct MMS proxy property lookup
The property name under `Settings` dict is just `Proxy`, unlike the one
outside which is `MessageProxy`. See [1].

[1] https://kernel.googlesource.com/pub/scm/network/ofono/ofono/+/refs/heads/master/doc/connman-api.txt#253

Fixes: a6e81af87f ('wwan: add support for using oFono as a modem manager')
(cherry picked from commit 264fed4778)
2023-03-30 08:43:15 +02:00
Thomas Haller
3ddc17700d
wifi: fix aggressively roaming (background Wi-Fi scanning) based on seen-bssids
"wifi.seen-bssids" looks like a regular property, but it is not. Unlike
almost all other properties, it does not contain user configuration,
rather it gets filled by the daemon.

The values are thus stored in "/var/lib/NetworkManager/seen-bssids"
file, and the daemon maintains the values separately from the profile.
Only before exporting the profile on D-Bus, the value gets merged (see
NM_SETTINGS_CONNECTION_GET_PRIVATE(self)->>getsettings_cached and
nm_connection_to_dbus_full().

Hence, looking at nm_setting_wireless_get_num_seen_bssids() is not
working. Fix that.

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/1253

Fixes: 0f3203338c ('wifi: roam aggressively if we on a multi-AP network')

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1577
(cherry picked from commit 07c6f933d1)
2023-03-29 14:22:57 +02:00
Fernando Fernandez Mancera
f71cd2eb72 dns: add support to no-aaaa option
Users can set `no-aaaa` DNS option to suppress AAAA queries made by the
stub resolver, including AAAA lookups triggered by NSS-based interfaces
such as getaddrinfo. Only DNS lookups are affected.

(cherry picked from commit 9d4bbf78f0)
2023-03-28 13:22:51 +02:00
Beniamino Galvani
ccf220c71c merge: branch 'bg/hotspot-fixes'
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1578

(cherry picked from commit afd1a7b9a6)
2023-03-28 10:57:28 +02:00
Beniamino Galvani
2259c519ab nmcli: increase strength of generated hotspot passwords
The password currently generated has ~48 bits of entropy; increase the
length from 8 to 12 to get ~70 bits. While at it, exclude characters
that look similar and might be entered wrongly by users.

(cherry picked from commit 231128d28d)
2023-03-28 10:57:28 +02:00
Beniamino Galvani
a08511a56f nmcli: don't set a fixed channel for wifi hotspots
Since commit f18bf17dea ('wifi: cleanup
ensure_hotspot_frequency()'), NetworkManager automatically selects a
stable channel for AP connections that don't specify a fixed one. The
advantage of this approach is that NM can select a channel that works
well in the current regulatory domain.

However, nmcli still sets fixed channels 1 for 2.4GHz and 7 for 5GHz
when using the "device wifi hotspot". In particular, channel 7 on 5GHz
seems a bad choice because according to [1] it is not usable anywhere
in the world.

It seems difficult to select channel that works everywhere in the 5GHz
band, so it's better to not set a channel in the profile and let NM
find a usable one. For consistency, do the same also for the 2.4GHz
band even if the default choice (channel 1) should always work; by
letting NM choose a channel, different hotspot created with nmcli have
the chance of using different bands and not interfere with each other.

[1] https://en.wikipedia.org/wiki/List_of_WLAN_channels

(cherry picked from commit e446d2b632)
2023-03-28 10:57:28 +02:00
Beniamino Galvani
b01524d5e7 nmcli: fix generating hotspot password
The generated password was all non-alphanumeric characters.

Fixes: 6e96d71731 ('all: use nm_random_*() instead of g_random_*()')
(cherry picked from commit ac2fb0e93d)
2023-03-28 10:57:28 +02:00
Beniamino Galvani
7982a3d2eb wifi: skip no-ir channels when determining AP channel
If the automatically selected channel for an AP is set as NO-IR in the
current regulatory domain, the hotspot connection will fail to
start. NO-IR means that any mechanisms that initiate radiation are not
permitted on this channel, this includes sending probe requests or
modes of operation that require beaconing such as AP. Skip channels
with the NO-IR flag.

(cherry picked from commit 1399aa925d)
2023-03-28 10:57:28 +02:00
Beniamino Galvani
c10b97d188 platform: store attributes of wifi channels
Store attributes of wifi channels so that in a later commit we can
make better decisions when selecting a channel for hotspot.

Don't skip completely disabled frequencies so that the index of
frequencies doesn't change and get_mesh_channel() and
set_mesh_channel() get a reliable result. This was changed by mistake
in 5abb113386 ('wifi: ignore disabled frequencies '); however
probably nobody is still using OLPC mesh networking at this point.

(cherry picked from commit df285b154e)
2023-03-28 10:57:27 +02:00
Thomas Haller
6064d3431a glib-aux/trivial: reword code comments about bad random fallback in "nm-random-utils.c"
(cherry picked from commit da3c9e470e)
2023-03-28 10:57:19 +02:00
Thomas Haller
76f138cb5b glib-aux,all: merge branch 'th/g-random-int'
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1517

(cherry picked from commit e013074c89)
2023-03-28 10:48:20 +02:00
Thomas Haller
d516a96bfe all: use nm_random_*() instead of g_random_*()
g_random_*() is based on GRand, which is not a CSPRNG. Instead, rely on
kernel to give us good random numbers, which is what nm_random_*() does.

Note that nm_random_*() calls getrandom() (or reads /dev/urandom), which
most likely is slower than GRand. It doesn't matter for our uses though.

It is cumbersome to review all uses of g_rand_*() whether their usage of
a non-cryptographically secure generator is appropriate. Instead, just
always use an appropriate function, thereby avoiding this question. Even
glib documentation refers to reading "/dev/urandom" as alternative. Which
is what nm_random_*() does. These days, it seems unnecessary to not use
the best random generator available, unless it's not fast enough or you
need a stable/seedable stream of random numbers.

In particular in nmcli, we used g_random_int_range() to generate
passwords. That is not appropriate. Sure, it's *only* for the hotspot,
but still.

(cherry picked from commit 6e96d71731)
2023-03-28 10:48:20 +02:00
Thomas Haller
f12ad37c36 glib-aux: add nm_random_u64_range() helper
(cherry picked from commit fb1d2da979)
2023-03-28 10:48:20 +02:00
Beniamino Galvani
5d95c20787 core: fix l3cd comparison
NM_CMP_SELF(a, b) returns immediately if the objects are the same.

Fixes: cb29244552 ('core: support compare flags in nm_l3_config_data_cmp_full()')
Fixes-test: @dracut_NM_iSCSI_ibft_table

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1583
(cherry picked from commit 0a02995175)
2023-03-28 09:19:41 +02:00
Lubomir Rintel
d787c0c59d cloud-setup: actually pass the HTTP method in nm_http_client_poll_req()
https://bugzilla.redhat.com/show_bug.cgi?id=2179718

Fixes: 8b7e12c2d6 ('cloud-setup/ec2: start with requesting a IMDSv2 token')
Fixes: cd74d75002 ('cloud-setup: make nm_http_client_req() accept a method argument')
(cherry picked from commit f07da04cd9)
2023-03-23 12:44:32 +01:00
Beniamino Galvani
0fac815a72 ip-tunnel: merge branch 'pr/1565'
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1565

(cherry picked from commit 82a9a493af)
2023-03-13 09:46:53 +01:00
Joao Machado
894cb7966d platform/tests: ip6gre & ip6gretap test cases (ip6 tunnel flags)
(cherry picked from commit 1505ca3626)
2023-03-13 09:46:53 +01:00
Joao Machado
65f69ac5e1 libnmc-setting/docs: how to disable ip-tunnel.encapsulation-limit (ip6)
(cherry picked from commit 7c54d26ad6)
2023-03-13 09:46:53 +01:00
Joao Machado
be8ddf367f libnm-core-impl: allow ip6 tunnel flags for ip6gre & ip6gretap
(cherry picked from commit a239317a6b)
2023-03-13 09:46:53 +01:00
Lubomir Rintel
429f36cd81 cloud-setup/ec2: start with requesting a IMDSv2 token
The present version of the EC2 metadata API (IMDSv2) requires a header
with a token to be present in all requests. The token is essentially a
cookie that's not actually a cookie that's obtained with a PUT call that
doesn't put anything. Apparently it's too easy to trick someone into
calling a GET method.

EC2 now supports IMDSv2 everywhere with IMDSv1 being optional, so let's
just use IMDSv2 unconditionally. Also, the presence of a token API can
be used to detect the AWS EC2 cloud.

https://bugzilla.redhat.com/show_bug.cgi?id=2151986
(cherry picked from commit 8b7e12c2d6)
2023-03-09 15:12:31 +01:00
Lubomir Rintel
d99864ccba cloud-setup: document detect() and get_config() methods
Clarify that detect() needs to succeed before get_config().

I thought it's sort of common sense, but it's better to be explicit as
we're going to rely on that.

(cherry picked from commit 088bfd817a)
2023-03-09 15:12:31 +01:00
Lubomir Rintel
eff4372045 cloud-setup: make nm_http_client_req() accept a method argument
We'll need to be able to issue PUT calls.

(cherry picked from commit cd74d75002)
2023-03-09 15:12:31 +01:00
Lubomir Rintel
6e8cfbae32 cloud-setup: rename get/Get identifiers to req and Req
We're going to extend those to issue methods other than GET.
Also, "request" would've been too long, "req" looks nicer.

(cherry picked from commit 85ce088616)
2023-03-09 15:12:31 +01:00
Lubomir Rintel
23b9514080 cloud_setup: unexport nm_http_client_get()
It's not used anywhere.

(cherry picked from commit ce225b2c06)
2023-03-09 15:12:31 +01:00
Thomas Haller
3787eacac9 cloud-setup: use nm_strv_dup_packed() in nm_http_client_poll_get()
No need to do a deep clone. The strv array is not ever modified and we
pack it together in one memory allocation.

(cherry picked from commit 599fe234ea)
2023-03-09 15:12:31 +01:00
Lubomir Rintel
acbbf2a8ca release: bump version to 1.42.5 (development) 2023-03-09 09:01:17 +01:00
Lubomir Rintel
a17d50be63 release: bump version to 1.42.4 2023-03-09 09:01:17 +01:00
Lubomir Rintel
a60805a187 NEWS: update 2023-03-09 08:59:45 +01:00
Thomas Haller
17aaea7f7e contrib/release: fix version in import-docs hint message
(cherry picked from commit a798b4f3f6)
2023-03-09 08:53:34 +01:00
Haochen Tong
d835556e4c
core: fix constructing the IP4Config.Nameservers property
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1563

Fixes: c68e148b02 ('core: extend NML3ConfigData:nameserver to track DNS as string')
(cherry picked from commit c22703b68d)
2023-03-09 07:16:03 +01:00
Thomas Haller
adca87aba9
platform/tests: avoid accessing in_addr_t via NMIPAddr union
The compiler may dislike this:

      CC       src/core/platform/tests/libNetworkManagerTest_la-test-common.lo
    In function '_ip_address_add',
        inlined from 'nmtstp_ip4_address_add' at ../src/core/platform/tests/test-common.c:1892:5:
    ../src/core/platform/tests/test-common.c:1807:63: error: array subscript 'NMIPAddr {aka const struct _NMIPAddr}[0]' is partly outside array bounds of 'in_addr_t[1]' {aka 'unsigned int[1]'} [-Werror=array-bounds]
     1807 |                                                   peer_address->addr4,
          |                                                   ~~~~~~~~~~~~^~~~~~~
    ../src/core/platform/tests/test-common.c: In function 'nmtstp_ip4_address_add':
    ../src/core/platform/tests/test-common.c:1886:36: note: object 'peer_address' of size 4
     1886 |                        in_addr_t   peer_address,
          |                        ~~~~~~~~~~~~^~~~~~~~~~~~
    ...

Fixes: 06aafabf14 ('platform/test: add test adding IPv4 addresses that only differ by their peer-address')
(cherry picked from commit 40dd8bf93a)
2023-03-09 07:13:31 +01:00
Beniamino Galvani
fb4de0013a
core: fix crash when reloading global dns configuration
When reloading the configuration and there is a global DNS
configuration without domains, NM crashes in global_dns_equal()
because `old->domains` and `new->domains` are both NULL. Fix that.

  Thread 1 "NetworkManager" received signal SIGTRAP, Trace/breakpoint trap.
  0  g_logv (log_domain=0x7fe81a2110be "GLib", log_level=G_LOG_LEVEL_CRITICAL, format=<optimized out>, args=<optimized out>) at ../glib/gmessages.c:1433
  1  g_log (log_domain=<optimized out>, log_level=<optimized out>, format=<optimized out>) at ../glib/gmessages.c:1471
  2  g_hash_table_size (hash_table=<optimized out>) at ../glib/ghash.c:2183
  3  g_hash_table_size (hash_table=<optimized out>) at ../glib/ghash.c:2181
  4  global_dns_equal (new=0xecc540, old=0xe618e0) at ../src/core/nm-config-data.c:1466
  5  nm_config_data_diff (old_data=old_data@entry=0xe60020, new_data=new_data@entry=0xe606a0) at ../src/core/nm-config-data.c:1946
  6  _set_config_data (self=0xe45810, new_data=0xe606a0, reload_flags=NM_CONFIG_CHANGE_CAUSE_SIGHUP) at ../src/core/nm-config.c:2923
  7  nm_config_reload (self=0xe45810, reload_flags=NM_CONFIG_CHANGE_CAUSE_SIGHUP, emit_warnings=emit_warnings@entry=1) at ../src/core/nm-config.c:2875
  8  nm_main_config_reload (signal=<optimized out>) at ../src/core/main.c:141
  9  sighup_handler (user_data=<optimized out>) at ../src/core/main-utils.c:26
  10 g_main_dispatch (context=0xe619e0) at ../glib/gmain.c:3444
  11 g_main_context_dispatch (context=0xe619e0) at ../glib/gmain.c:4162
  12 g_main_context_iterate.constprop.0 (context=0xe619e0, block=1, dispatch=1, self=<optimized out>) at ../glib/gmain.c:4238
  13 g_main_loop_run (loop=0xe5e310) at ../glib/gmain.c:4438
  14 main (argc=<optimized out>, argv=<optimized out>) at ../src/core/main.c:515

Fixes: 1f0d1d78d2 ('dns-manager: always apply options from [global-dns]')
(cherry picked from commit ba4a9ea79a)
2023-03-09 07:13:31 +01:00
Fernando Fernandez Mancera
c543c7f9d7
platform: compare arp_ip_targets_num before arp_ip_target values
We must first check whether a->arp_ip_targets_num and
b->arp_ip_targets_num are identical. Otherwise, this accesses
potentially uninitialized values.

Fixes: f900f7bc2c ('platform: add netlink support for bond link')
(cherry picked from commit 8dd18d91b2)
2023-03-09 07:11:36 +01:00
Beniamino Galvani
42fa77a3ed merge: branch 'bg/dnsmasq-global-conf'
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1555

(cherry picked from commit 06219dbcf9)
2023-03-03 14:56:02 +01:00
Beniamino Galvani
82134e4f83 man: update documentation about global DNS configuration
Now the settings in the [global-dns] section are used *in addition* to
connection-specific ones. Only the global domains sections, when
valid, override connection settings. Update the man page to clarify
that.

Fixes: 1f0d1d78d2 ('dns-manager: always apply options from [global-dns]')
(cherry picked from commit f57a848da5)
2023-03-03 14:56:02 +01:00
Beniamino Galvani
89888f85aa dnsmasq: process both global and per-device configuration
The global configuration now can be valid when there are no global
domains defined. The dnsmasq backend must process it and then, if
there is no global default domain, also process the per-connection
settings.

Fixes: 1f0d1d78d2 ('dns-manager: always apply options from [global-dns]')
(cherry picked from commit 5c0a927e0f)
2023-03-03 14:56:02 +01:00
Beniamino Galvani
4353f84230 settings: preserve existing connection flags on update
We are passing to the plugin only 'sett_flags', which is the bitmask
of flags to change and works together with 'sett_mask'; however,
plugins interpret that value as the new flags value. The result is
that if there is no change needed (0/0), the existing flags are lost.
Simple reproducer:

  ip link add dummy1 type dummy
  ip link set dummy1 up
  ip addr add dev dummy1 fd01::12/64
  sleep 1

  # now, a external connection is created by NM

  echo "BEFORE:"
  cat /run/NetworkManager/system-connections/dummy1.nmconnection | grep "nm-generated\|volatile\|external"

  # just add a new address to the interface to make it lose
  # the external flag

  ip addr add dev dummy1 172.25.42.1/24
  sleep 1

  echo "AFTER:"
  cat /run/NetworkManager/system-connections/dummy1.nmconnection | grep "nm-generated\|volatile\|external"

Output:

  BEFORE:
  nm-generated=true
  volatile=true
  external=true
  AFTER:

Fixes: d35d3c468a ('settings: rework tracking settings connections and settings plugins')

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1548
(cherry picked from commit 86b922695f)
2023-03-02 11:24:19 +01:00
Thomas Haller
ae1c4f45ad
platform: ensure ext-data is of expected type
We just lookup the link info by ifindex. There is no guarantee that that
ifindex is of the expected type, to have a suitable ext-data. Check for
that.

Fixes: a7d2cad67e ('platform/linux: add support for WPAN links')
(cherry picked from commit 6dafe78088)
2023-02-28 13:12:18 +01:00