Commit graph

31797 commits

Author SHA1 Message Date
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
Thomas Haller
e943387af7
doc: fix documenting "carrier-wait-timeout" in NetworkManager-wait-online manual
Fixes: df94cb2116 ('man: add NetworkManager-wait-online.service.8 manual')
(cherry picked from commit 22c7fd33cc)
2023-02-28 13:12:14 +01:00
Thomas Haller
0cdd822989
libnm: merge branch 'champtar:route-unreachable'
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1549

(cherry picked from commit 90cc458d31)
2023-02-28 13:11:08 +01:00
Etienne Champetier
667ba52272
platform/trivial: fix route type name (unavailable -> unreachable)
Fixes: 766349879e ('platform/trivial: add code comments for NMPGlobalTracker')
(cherry picked from commit 0decc027ba)
2023-02-28 13:11:08 +01:00
Etienne Champetier
e308bd79e8
doc: fix route type name (unavailable -> unreachable)
Fixes: 1cc3d00cb7 ('libnm/doc: list route attributes in `man nm-settings-nmcli`')
(cherry picked from commit fb03dbacd8)
2023-02-28 13:11:07 +01:00
Beniamino Galvani
56ec877f94 device: fix copy/paste error in nm-device-ip-tunnel.c
Fixes: 351c562491 ('devices: support VTI tunnels')
(cherry picked from commit 933e8ea11c)
2023-02-27 13:42:55 +01:00
Beniamino Galvani
8949dd8f3c release: bump version to 1.42.3 (development) 2023-02-23 10:41:13 +01:00
Beniamino Galvani
58928a3188 release: bump version to 1.42.2 2023-02-23 10:41:13 +01:00
Beniamino Galvani
6e28402121 NEWS: update 2023-02-23 09:29:37 +01:00
Fernando Fernandez Mancera
6a438d5157 client/tests: adjust expected output for new order of replace-local-rule
Now replace-local-rule is under routing-rules and therefore expected
output need to be adjusted in tests.

(cherry picked from commit b5e347b313)
2023-02-22 22:37:16 +00:00
Fernando Fernandez Mancera
d09e53ccb7 libnmc-setting: place replace-local-rule under routing-rules
This affects the order in which properties are listed in `nmcli
connection show`. The replace-local-rule property should be after the
routing-rule property.

(cherry picked from commit f46512c54f)
2023-02-22 15:11:05 +01:00
Wen Liang
3ca901483e dbus: deprecate the NMActiveConnection Master property
To embrace the inclusive language, deprecate the NMActiveConnection
Master property and in favor of the NMActiveConnection Controller
property.

(cherry picked from commit af677542b5)
2023-02-21 13:56:16 -05:00
Wen Liang
723b76c8b8 nm-client: expose the method nml_dbus_property_o_notify()
(cherry picked from commit b4e96ec067)
2023-02-21 13:46:24 -05:00
Fernando Fernandez Mancera
4f959945a3 all: add new "ipv[46].replace-local-rule" setting
This setting allows the user to remove the local route rule that is
autogenerated for both IPv4 and IPv6. By default, NetworkManager won't
touch the local route rule.

(cherry picked from commit d2ca44ffc6)
2023-02-21 17:46:30 +01:00
Fernando Fernandez Mancera
779cf25606 platform: introduce function to globally track local route rule
The new function tracks local route rule in the GlobalTracker properly.
It also allow the developer to specify the untrack user tag.

(cherry picked from commit 79611e4fcc)
2023-02-21 17:46:30 +01:00
Wen Liang
934e019270 libnm: add NM_VERSION_1_42_2 2023-02-21 17:46:30 +01:00
Fabrice Fontaine
b5721a8c7b
meson.build: fix build failure with -Dmodem_manager=false
Fix the following build failure with -Dmodem_manager=false raised since
commit 03ba04d478 ('build: meson: add option to set the
mobile-broadband-provider-info database').

  ../output-1/build/network-manager-1.40.10/meson.build:1060:0: ERROR: Unknown variable "mobile_broadband_provider_info_database".

http://autobuild.buildroot.org/results/896879c8e8ce022556ee834216ced2f962ff279c

Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>

Fixes: 03ba04d478 ('build: meson: add option to set the mobile-broadband-provider-info database')

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1544
(cherry picked from commit 3a3ac89b53)
2023-02-21 15:00:15 +01:00
Beniamino Galvani
bc9482f0e5 merge: branch 'bg/hostname-skip-ipv6-tentative'
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1536

(cherry picked from commit 34417ac3e6)
2023-02-21 13:55:31 +01:00
Beniamino Galvani
0ebd753819 device: skip DNS resolution for tentative IPv6 addresses
A tentative IPv6 address can still fail DAD, so don't use it to
resolve the hostname via DNS. Furthermore, tentative addresses can't
be used to contact the nameserver and so the resolution will fail if
there is no other valid IPv6 address. Wait that the address becomes
non-tentative.

(cherry picked from commit 4138be6a5a)
2023-02-21 13:55:30 +01:00
Beniamino Galvani
41cd94f46a nm-daemon-helper: log to stderr any error from getaddrinfo()
Print errors from getaddrinfo() to stderr so that they will be logged
by NM.

(cherry picked from commit ac5325e96b)
2023-02-21 13:55:30 +01:00
Beniamino Galvani
f1f1aee711 core: print stderr from nm-daemon-helper
Currently the only way to return an error code from the daemon helper
is via the process exit code, but that is not enough to fully describe
an error from getaddrinfo(); in fact, the function returns a EAI_*
error code and when the value is EAI_SYSTEM, the error code is
returned in errno.

At the moment, any messages printed to stderr by the helper goes to NM
stderr; instead, we want to capture it and pass it through the logging
mechanism of NM, so that it can be filtered according to level and
domain.

(cherry picked from commit d65702803c)
2023-02-21 13:55:30 +01:00
Beniamino Galvani
7e3dccb781 device: improve logging for hostname-from-dns events
Improve logging:
 - log only when something changes
 - print the new resolver state, instead of the old one
 - rename state "in-progress" to "started"
 - log when the resolver state is reset due to DNS changes

(cherry picked from commit 7037aa66c6)
2023-02-21 13:55:29 +01:00
Beniamino Galvani
8e312f6168 core: change buffer allocation size for the daemon helper
Use slightly more efficient sizes.

(cherry picked from commit 961824d43b)
2023-02-21 13:55:29 +01:00
Thomas Haller
422f086a68
dhcp: merge branch 'th/dhcp-iaid'
https://bugzilla.redhat.com/show_bug.cgi?id=2169869

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1534

(cherry picked from commit afbbfebfdb)
2023-02-21 09:30:58 +01:00