Commit Graph

30580 Commits

Author SHA1 Message Date
Thomas Haller
f0ec297739 dhcp: use packed strv array for NMDhcpClientConfig.reject_servers
No need to do it otherwise.
2022-05-16 16:37:43 +02:00
Thomas Haller
892cde1436 dhcp: remove assertion in nm_dhcp_client_handle_event()
Technically, g_warn_if_reached() may not be an assertion, according to
glib. However, there is G_DEBUG=fatal-warnings and we want to run with
that.

So this is an assertion to us. Also, logging to stderr/stdout is not a
useful thing to the daemon. Don't do this. Especially, since it depends
on user provided (untrusted) input.
2022-05-16 16:37:42 +02:00
Thomas Haller
9097679aad dhcp: move code in nm_dhcp_client_handle_event() 2022-05-16 16:37:42 +02:00
Thomas Haller
802f343d9f dhcp: drop NMDhcpState enum
It's unused now.
2022-05-16 16:37:41 +02:00
Thomas Haller
97e65e4b50 dhcp: rename/refactor nm_dhcp_client_set_state() to be notifications
Optimally we want stateless, pure code. Obviously, NMDhcpClient needs to
keep state to know what it's doing. However, we should well encapsulate
the state inside NMDhcpClient, and only accept events/notifications that
mutate the internal state according to certain rules.

Having a function public set_state(self, new_state) means that other
components (subclasses of NMDhcpClient) can directly mangle the state.
That means, you no longer need to only reason about the internal state
of NMDhcpClient (and the events/notifications/state-changes that it
implements). You also need to reason that other components take part of
maintaining that internal state.

Rename nm_dhcp_client_set_state() to nm_dhcp_client_notify(). Also, add
a new enum NMDhcpClientEventType with notification/event types.

In practice, this is only renaming. But naming is important, because it
suggests the reader how to think about the code.
2022-05-16 16:37:41 +02:00
Thomas Haller
9761e38f7e dhcp: fix handling of NM_DHCP_STATE_NOOP
The "noop" state is almost unused, however, nm_dhcp_set_state()
has a check "if (new_state >= NM_DHCP_STATE_TIMEOUT)", so the order
of the NOOP state matters.

Fix that by reordering.

Also, just return right away from NOOP.
2022-05-16 16:37:41 +02:00
Thomas Haller
f102051a29 dhcp: drop most of NMDhcpState usage from nm_dhcp_client_handle_event()
NMDhcpState is very tied to events from dhclient. But most of these
states we don't care about, and NMDhcpClient definitely should abstract
and hide them.

We should repurpose NMDhcpState to simpler state. For that, first drop
the state from nm_dhcp_client_handle_event().

This is only the first step (which arguably makes the code more
complicated, because reason_to_state() gets spread out and the logic
happens more than once). That will be addressed next.
2022-05-16 16:37:40 +02:00
Thomas Haller
70cbf3dc1e dhcp/trivial: add comment about nm_dhcp_utils_merge_new_dhcp6_lease() 2022-05-16 16:37:40 +02:00
Thomas Haller
8d121b17b5 dhcp: move code in "nm-dhcp-client.c"
So that it makes more sense, related parts are closer together.
2022-05-16 16:34:32 +02:00
Thomas Haller
1093e66776 dhcp: minor code cleanups in "nm-dhcp-client.c" 2022-05-16 16:34:32 +02:00
Thomas Haller
c8542a5d50 dhcp: use GSource for watching child process instead of numeric source id 2022-05-16 16:34:31 +02:00
Thomas Haller
98f7081db2 dhcp: minor cleanup in maybe_add_option()
- return early to avoid nested block.
- use NM_STR_HAS_PREFIX() over g_str_has_prefix(), because that
  can be inlined and only accepts a C literal as prefix argument.
2022-05-16 16:34:31 +02:00
Thomas Haller
cb2ab420a2 dhcp: don't assert against untrusted data in maybe_add_option() 2022-05-16 16:34:31 +02:00
Thomas Haller
668d8050a5 dhcp: cleanup bytearray_variant_to_string()
- the code comment was unclear/wrong. If something comes from an environment
  variables it is *NOT* UTF-8 safe. Also, we convert all non-ASCII characters,
  not only non UTF-8 characters.

- as we already convert the string to ASCII, the check whether it's UTF-8
  is bogus.

- using GString is unnecessary.
2022-05-16 16:34:31 +02:00
Thomas Haller
9b9c07530c dhcp: cleanup reason_to_state() in "nm-dhcp-client.c"
- use NM_IN_STRSET_ASCII_CASE().
- don't use else block after we return.
- don't accept the "iface" argument just for logging. The caller
  can do the logging, if they wish.
2022-05-16 16:32:22 +02:00
Thomas Haller
222f404928 glib-aux: add nm_g_bytes_ref() helper
g_bytes_ref() does not accept NULL. But doing so can be convenient,
add a helper for that.

Note that g_bytes_unref() does accept NULL, so there is no corresponding
helper.
2022-05-16 16:32:22 +02:00
Thomas Haller
7d1a9b898d glib-aux/trivial: fix typo in code comment 2022-05-16 16:32:21 +02:00
Thomas Haller
a859cee560 contrib: fix /etc/motd for "nm-in-container.sh" 2022-05-16 16:32:21 +02:00
Thomas Haller
0ca6aaab32 contrib: don't use "Z" specifier for mounting base directory in "nm-in-container.sh"
It seems unnecessary, and can cause failure.
2022-05-16 16:32:21 +02:00
Thomas Haller
56e1f0d290 contrib: ignore error installing behave_html_formatter in container
Yes, this is currently broken. *sigh*. Ignore any failure.
2022-05-16 16:32:08 +02:00
Thomas Haller
a5a4aea2e6 wifi: support "802-1x.phase1-auth-flags=tls-allow-unsafe-renegotiation" flag
For details, read the linked sources.

This requires a new supplicant option, but it seems that supplicant
will silently ignore unrecognized options.

https://bugzilla.redhat.com/show_bug.cgi?id=2072070#c48
https://lists.infradead.org/pipermail/hostap/2022-May/040522.html
https://w1.fi/cgit/hostap/commit/?id=566ce69a8d0e64093309cbde80235aa522fbf84e

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1218
2022-05-16 12:09:11 +02:00
Thomas Haller
fc05880558 dhcp: merge branch 'bg/perf1-debug-dhcp'
https://gitlab.freedesktop.org/NetworkManager/NetworkManager-ci/-/merge_requests/1042
2022-05-16 09:57:41 +02:00
Beniamino Galvani
7a3774f62d dhcp: log messages about invalid DHCP options
Log messages when invalid DHCP options are found. For example:

  <info> dhcp4 (eth0): error parsing DHCP option 6 (domain_name_servers): address 0.0.0.0 is ignored
  <info> dhcp4 (eth0): error parsing DHCP option 12 (host_name): '.example.com' is not a valid DNS domain
  <info> dhcp4 (eth0): error parsing DHCP option 26 (interface_mtu): value 60 is smaller than 68

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1225
2022-05-16 09:49:06 +02:00
Thomas Haller
e2476b1063 release: bump version to 1.39.4 (development) 2022-05-16 09:44:50 +02:00
Yuri Chornoivan
d9d72c6ea1 po: update Ukrainian (uk) translation
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1226
2022-05-16 09:00:01 +02:00
Thomas Haller
7062de9219 build/meson: use "rename" directive for installing nmcli bash completion
Otherwise, `ninja -C build uninstall` tries to delete "nmcli-completion",
when the file got renamed to "nmcli".

We depend on meson 0.47.2 already.
2022-05-13 16:15:18 +02:00
Thomas Haller
d4d001c771 build/meson: honor prefix for dbus_conf_dir
Otherwise, we will try to install "src/nm-dispatcher/nm-dispatcher.conf"
to "/usr/share/dbus-1/system.d", which is not correct, when we want a separate
prefix.
2022-05-13 15:46:55 +02:00
Thomas Haller
5704730a6c release: bump version to 1.38.0 2022-05-13 11:13:34 +02:00
Thomas Haller
3c1e2afaa9 NEWS: update 2022-05-13 11:12:41 +02:00
Thomas Haller
921dadf158 libnm: merge branch 'th/libnm-infiniband-fixes'
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1223

(cherry picked from commit 3a69aa50b8)
2022-05-12 15:56:56 +02:00
Thomas Haller
3bfde56239 libnm: reject infiniband.p-key set to 0, 0x8000
Kernel does not allow this ([1], [2]).

Usually tightening the verification is a break of API. But in this case,
no user had a working configuration that is breaking. At worst, they
had a broken profile that no longer loads.

We also filter those from _infiniband_add_add_or_delete(), since [3].

[1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/infiniband/ulp/ipoib/ipoib_main.c?id=f443e374ae131c168a065ea1748feac6b2e76613#n2394
[2] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/infiniband/ulp/ipoib/ipoib_vlan.c?id=f443e374ae131c168a065ea1748feac6b2e76613#n116
[3] eab817d34a

(cherry picked from commit 7012b9001a)
2022-05-12 15:56:56 +02:00
Thomas Haller
d476851ee7 libnm: fix crash validating infiniband profiles for interface-name
A virtual infiniband profile (with p-key>=0) can also contain a
"connection.interface-name". But it is required to match the
f"{parent}.{p-key}" format.

However, such a profile can also set "mac_address" instead of "parent".
In that case, the validation code was crashing.

  nmcli connection add type infiniband \
     infiniband.p-key 6 \
     infiniband.mac-address 52:54:00:86:f4:eb:aa:aa:aa:aa:52:54:00:86:f4:eb:aa:aa:aa:aa \
     connection.interface-name aaaa

The crash was introduced by commit 99d898cf1f ('libnm: rework caching
of virtual-iface-name for infiniband setting'). Previously, it would not
have crashed, because we just called

  g_strdup_printf("%s.%04x", priv->parent, priv->p_key)

with a NULL string. It would still not have validated the connection
and passing NULL as string to printf is wrong. But in practice, it
would have worked mostly fine for users.

Fixes: 99d898cf1f ('libnm: rework caching of virtual-iface-name for infiniband setting')
(cherry picked from commit fd5945b408)
2022-05-12 15:56:55 +02:00
Thomas Haller
3a69aa50b8 libnm: merge branch 'th/libnm-infiniband-fixes'
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1223
2022-05-12 15:53:34 +02:00
Thomas Haller
7012b9001a libnm: reject infiniband.p-key set to 0, 0x8000
Kernel does not allow this ([1], [2]).

Usually tightening the verification is a break of API. But in this case,
no user had a working configuration that is breaking. At worst, they
had a broken profile that no longer loads.

We also filter those from _infiniband_add_add_or_delete(), since [3].

[1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/infiniband/ulp/ipoib/ipoib_main.c?id=f443e374ae131c168a065ea1748feac6b2e76613#n2394
[2] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/infiniband/ulp/ipoib/ipoib_vlan.c?id=f443e374ae131c168a065ea1748feac6b2e76613#n116
[3] eab817d34a
2022-05-12 15:53:24 +02:00
Thomas Haller
fd5945b408 libnm: fix crash validating infiniband profiles for interface-name
A virtual infiniband profile (with p-key>=0) can also contain a
"connection.interface-name". But it is required to match the
f"{parent}.{p-key}" format.

However, such a profile can also set "mac_address" instead of "parent".
In that case, the validation code was crashing.

  nmcli connection add type infiniband \
     infiniband.p-key 6 \
     infiniband.mac-address 52:54:00:86:f4:eb:aa:aa:aa:aa:52:54:00:86:f4:eb:aa:aa:aa:aa \
     connection.interface-name aaaa

The crash was introduced by commit 99d898cf1f ('libnm: rework caching
of virtual-iface-name for infiniband setting'). Previously, it would not
have crashed, because we just called

  g_strdup_printf("%s.%04x", priv->parent, priv->p_key)

with a NULL string. It would still not have validated the connection
and passing NULL as string to printf is wrong. But in practice, it
would have worked mostly fine for users.

Fixes: 99d898cf1f ('libnm: rework caching of virtual-iface-name for infiniband setting')
2022-05-12 15:52:45 +02:00
Thomas Haller
b6da925719 libnm: merge branch 'th/fix-libnm-includes'
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1222
2022-05-12 15:48:34 +02:00
Thomas Haller
5cc31b79dd libnm: avoid duplicate typedefs for NMClient/NMDevice
clang 3.4.2-9.el7 does not like this:

  $ clang -DHAVE_CONFIG_H -I. -I..  -I../src/libnm-core-public -I./src/libnm-core-public -I../src/libnm-client-public -I./src/libnm-client-public -pthread -I/usr/include/gio-unix-2.0/ -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include   -DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_40 -DGLIB_VERSION_MAX_ALLOWED=GLIB_VERSION_2_40  -Wall -Werror -Wextra -Wdeclaration-after-statement -Wfloat-equal -Wformat-nonliteral -Wformat-security -Wimplicit-function-declaration -Winit-self -Wmissing-declarations -Wmissing-include-dirs -Wmissing-prototypes -Wpointer-arith -Wshadow -Wstrict-prototypes -Wundef -Wvla -Wno-duplicate-decl-specifier -Wno-format-y2k -Wno-missing-field-initializers -Wno-sign-compare -Wno-tautological-constant-out-of-range-compare -Wno-unknown-pragmas -Wno-unused-parameter  -Qunused-arguments -Wunknown-warning-option -Wtypedef-redefinition -Warray-bounds -Wparentheses-equality -Wunused-value -Wimplicit-fallthrough  -fno-strict-aliasing -fdata-sections -ffunction-sections -Wl,--gc-sections -g -O2 -MT examples/C/glib/examples_C_glib_add_connection_libnm-add-connection-libnm.o -MD -MP -MF examples/C/glib/.deps/examples_C_glib_add_connection_libnm-add-connection-libnm.Tpo -c -o examples/C/glib/examples_C_glib_add_connection_libnm-add-connection-libnm.o `test -f 'examples/C/glib/add-connection-libnm.c' || echo '../'`examples/C/glib/add-connection-libnm.c
  ...
  ../src/libnm-client-public/nm-client.h:149:31: error: redefinition of typedef 'NMClient' is a C11 feature [-Werror,-Wtypedef-redefinition]
  typedef struct _NMClient      NMClient;
                                ^

Our code base is C11 internally (actually "-std=gnu11"), but this problem
happens when we build the example. The warning is actually correct, because
our public headers should be more liberal (and possibly be C99 or even C89,
this is undefined).

Fixes: 649314ddaa ('libnm: replace nm-types.h by defining the types in respective headers')
2022-05-12 15:47:57 +02:00
Thomas Haller
7de0ba4199 libnm: reorder includes in <NetworkManager.h> header
We no longer have "nm-types.h", which forward declares most relevant
typedefs. We also don't ensure that each header includes all the
headers that it has a dependency (instead, we rely on the user to
include "NetworkManager.h", which does the right thing).

The "right thing" depends on doing doing it in the right order.
Reorder the includes.
2022-05-12 15:47:57 +02:00
Lubomir Rintel
c2b9762422 nmcli/devices: fix sorting of APs
Sort WEP access points as intended -- down, not up.

Fixes: 550e3bbdd8 ('cli: device: color WEP APs differently in "wifi list"')

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1224
(cherry picked from commit 3d82380e4d)
2022-05-12 14:38:04 +02:00
Lubomir Rintel
adb1d43f66 nmcli/devices: check connection created with "wifi connect"
We want to warn the user if they're connecting to an insecure network:

  $ nmcli d wifi
  IN-USE  BSSID              SSID             MODE   CHAN  RATE       SIGNAL  BARS  SECURITY
          BA:00:6A:3C:C2:09  Secured Network  Infra  2     54 Mbit/s  100     ▂▄▆█  WPA3
          FA:7C:46:CC:9F:BE  Ye Olde Wlan     Infra  1     54 Mbit/s  100     ▂▄▆█  WEP
  $ nmcli d wifi connect 'Ye Olde Wlan'
  Warning: WEP encryption is known to be insecure.
  ...

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1224
(cherry picked from commit bf9a11f7c7)
2022-05-12 14:38:03 +02:00
Lubomir Rintel
fbb952fcb4 nmcli/connections: export nmc_connection_check_deprecated()
It's going to be useful with "nmcli dev wifi connect" that also creates
a connection that should be checked.

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1224
(cherry picked from commit 2dbbea3f10)
2022-05-12 14:38:02 +02:00
Lubomir Rintel
3d82380e4d nmcli/devices: fix sorting of APs
Sort WEP access points as intended -- down, not up.

Fixes: 550e3bbdd8 ('cli: device: color WEP APs differently in "wifi list"')

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1224
2022-05-12 14:37:29 +02:00
Lubomir Rintel
bf9a11f7c7 nmcli/devices: check connection created with "wifi connect"
We want to warn the user if they're connecting to an insecure network:

  $ nmcli d wifi
  IN-USE  BSSID              SSID             MODE   CHAN  RATE       SIGNAL  BARS  SECURITY
          BA:00:6A:3C:C2:09  Secured Network  Infra  2     54 Mbit/s  100     ▂▄▆█  WPA3
          FA:7C:46:CC:9F:BE  Ye Olde Wlan     Infra  1     54 Mbit/s  100     ▂▄▆█  WEP
  $ nmcli d wifi connect 'Ye Olde Wlan'
  Warning: WEP encryption is known to be insecure.
  ...

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1224
2022-05-12 14:37:25 +02:00
Lubomir Rintel
2dbbea3f10 nmcli/connections: export nmc_connection_check_deprecated()
It's going to be useful with "nmcli dev wifi connect" that also creates
a connection that should be checked.

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1224
2022-05-12 14:37:18 +02:00
Thomas Haller
1a995325d5 build/meson: workaround meson bug related to ternary expression
On Debian 10, `apt-get install meson` gives meson-0.49.2-1.
That version doesn't like certain ternary expressions (while some
that we have are OK), which leads to a crash of meson.

Avoid that.

Fixes: bddffb1731 ('build/meson: honor prefix for udev_dir and don't use pkg-config')
2022-05-11 22:34:38 +02:00
Thomas Haller
f6f961f381 gitlab-ci: avoid pager for "run-test.sh"
In particular, `dpkg -l` likes to show a pager, when you are on the
terminal. Being on the terminal happens, if you try to reproduce
a test on your own container. So let's avoid that.
2022-05-11 22:12:56 +02:00
Thomas Haller
fb5f2f25bc dhcp: merge branch 'th/dhcpv6-otherconf-ignore-addr'
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1220

(cherry picked from commit 19a96f64ed)
2022-05-11 19:09:04 +02:00
Thomas Haller
476e007d04 dhcp: fix ignoring addresses with DHCPv6 otherconf (O flag)
With O flag (otherconf mode), don't add the IPv6 addresses to the
collected lease.

An alternative would be to add it initially, but ignore it when
merging the configuration in NML3Cfg. The idea of that would be that if
the mode switches from otherconf to managed, that we already have the
address. However, depending on the mode we made a different DHCPv6
request. That means, if the mode changes we anyway cannot just use the
previous lease, because it might not contain all the information. So
it seems better to ignore the address early.

Fixes: 58287cbcc0 ('core: rework IP configuration in NetworkManager using layer 3 configuration')

https://bugzilla.redhat.com/show_bug.cgi?id=2083968
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/953

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1220
(cherry picked from commit 2875ad7e50)
2022-05-11 19:09:02 +02:00
Thomas Haller
29e90e4722 dhcp: fix setting "-S" flag for dhclient info-only requests
Fixes: 58287cbcc0 ('core: rework IP configuration in NetworkManager using layer 3 configuration')
(cherry picked from commit 41df480fdd)
2022-05-11 19:09:02 +02:00
Thomas Haller
6ad3694fc5 dhcp: always explicitly set request/information-request flags for internal DHCPv6 client
It seems clearer to explicitly set this always, and not rely on the
defaults.

(cherry picked from commit bacd3e1482)
2022-05-11 19:09:02 +02:00