Commit graph

31143 commits

Author SHA1 Message Date
Thomas Haller 168bc7f120
glib: add nm_uuid_generate_from_strings() helper
nm_uuid_generate_from_strings() accepts a uuid_type and type_arg
parameter, so that we can use it to generate version 5 UUIDs.

This is a more flexible variant of nm_uuid_generate_from_strings_v3(),
which will be used to replace it. With the right parameters, the new
function behaves the same as nm_uuid_generate_from_strings_v3().
2022-10-03 17:57:45 +02:00
Thomas Haller a33459ed2f
libnm/tests: drop redundant argument in test code 2022-10-03 17:57:44 +02:00
Thomas Haller 2fcea1cf05
glib-aux: rename nm_uuid_generate_from_strings() to nm_uuid_generate_from_strings_v3()
nm_uuid_generate_from_strings() uses variant3 UUIDs based on MD5.
We shouldn't use that in the future.

We will add a replacement, so rename this function so that the "good"
name is free again. Of course, code that uses this function currently
relies on that the behavior doesn't change. We cannot just drop it
entirely, but will replace it by something that gives the same result.

Rename.
2022-10-03 17:57:43 +02:00
Thomas Haller ee32de41cf
glib-aux: add code comment to NM_UUID_INIT()
`NM_UUID_INIT(00, 09, 01, ...)` would look as if the values are
octal numbers. That is not the case. The macro mangles them,
so that the look like the UUID in string form "000901...".

This is a bit odd. Maybe more confusing than helpful. Or maybe helpful?
2022-10-03 17:57:43 +02:00
Thomas Haller e7582e7dd3
libnm: merge branch 'th/libnm-connection-get-private'
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1400
2022-10-03 17:56:40 +02:00
Thomas Haller d75bfd3a3d
libnm: move optimized NM_IS_{SIMPLE,}CONNECTION() to internal header
We already redefine those checks to optimize for NMSimpleConnection.
Which, in particular when libnm-core is used by the daemon, is the only
implementation of the NMConnection interface.

Move those to the private header file. No need to keep it private to
"nm-connection.c".
2022-10-03 17:54:57 +02:00
Thomas Haller 28cb407056
libnm: rework lookup of private data for NMConnection of NMSimpleConnection
NMConnection is an interface, and as such has no data itself.

In practice, there are only two implementations of this interface,
NMSimpleConnection and NMRemoteConnection. The latter only exists
in libnm, not the daemon.

Thus, lookup of the private data is already optimized for
NMSimpleConnection instances via _nm_simple_connection_private_offset.

Use the same mechanism also for NMSimpleConnection itself.
2022-10-03 17:54:56 +02:00
Thomas Haller 5713a533f5
build: merge branch 'th/build-gettext-update-po'
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1405
2022-10-03 17:52:19 +02:00
Thomas Haller 7ee0da3eaf
build: don't "update-po" during make dist
Instead, hack gettext's Makefile.

gettext has an issue with parallel make. See [1] and [2].
Reproduce with:

  git reset --hard &&
    git clean -fdx &&
    NOCONFIGURE=yes ./autogen.sh &&
    ./configure --enable-gtk-doc --enable-introspection &&
    make -j distcheck V=1

We worked around this by setting "DIST_DEPENDS_ON_UPDATE_PO = yes",
however that (obviously) results in regenerating source files during
dist. "Source files" in the sense that the po files are commited to git
and get distributed in the release. Doing this is very ugly.

In particular it's ugly, because `make -C po update-po` is not reproducible
and the output depends on the current time (*had one job*).
Otherwise, we could just regenerate the files before doing a release.

This means, running "release.sh" script ends up with a dirty tree
afterwards. Also, the distributed po files are not the ones from the source
tree when we did the release. Also, since "release.sh rc1" does two distributions
(once for the rc1 and once for the next devel snapshot), the commit for the
second distribution will have a large diff for the po files.

This reverts commit 978d8eb699 ('po: make dist depend on update-po')
and hacks around the problem.

[1] https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1094#note_1435313
[2] https://lists.gnu.org/archive/html/bug-gettext/2022-06/msg00022.html

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1405
2022-10-03 17:50:09 +02:00
Thomas Haller 991481a568
gitlab: fail if "run-test.sh" with dirty working tree 2022-10-03 17:50:03 +02:00
Thomas Haller 6cbad14721
contrib: discourage g_type_class_add_private() via "checkpatch.pl"
Our GObject structs should be internal API. In which case, we should
embed the private data in the struct themselves (`_priv`) and use the
_NM_GET_PRIVATE() macro. The advantage is better debugability because
following G_TYPE_INSTANCE_GET_PRIVATE() in the debugger is very
cumbersome. Another (less relevant) advantage is better performance.

Thus, warn about uses of g_type_class_add_private() and
G_TYPE_INSTANCE_GET_PRIVATE().

Note that if the struct and is in a header file (which is usually only
necessary when subclassing the type), then the private data should be
an opaque pointer `_priv` instead, and we should use the _NM_GET_PRIVATE_PTR()
macro. In that case, the use of g_type_class_add_private() and
G_TYPE_INSTANCE_GET_PRIVATE() is correct and the warning is false. But
this is only a warning, for the unusual case where we have deep object
hierarchies.

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1396
2022-10-03 17:23:29 +02:00
Marc Muehlfeld 531cc96737 man/NetworkManager-wait-online.service: clean up
I rewrote the man page to make it clearer and easier to understand.
Additionally, I fixed some typos and grammar issues.

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1390
2022-10-03 16:28:44 +02:00
Thomas Haller 7adde3f2fc
nmcli: don't print warning in nmcli connection import about duplicate parameters
It seems uncommon that a command line tool warns about duplicate
paramters. Usually, the latter just overwrites the former. That is also
useful so that you can have for example an alias that sets a default
type

  nmcli_import="nmcli connection import type keyfile"

but still call it like

  nmcli_import file $FILE type openvpn

This is a change in behavior. Not only stop we printing a warning, we
will now prefer the latter argument. Previously, the first was honored.
This change in behavior is a problem, but such uses were warned against
in the past, and hopefully nobody did this or relied on this.
2022-10-03 13:59:12 +02:00
Beniamino Galvani 394501e65a po: add missing files to POTFILES.in
Fixes: 9b396f7cc8 ('nmtui: add MACsec support')
Fixes: 7b067be580 ('nmtui: introduce Nmt8021xFields')
2022-10-03 09:44:20 +02:00
Lubomir Rintel dc254f90e2 bond,bridge,team: use uuid for con.master when generating connection
If we're generating a connection for an externally configured slave,
refer the master by the UUID instead of the device name.

This doesn't matter most of the time. However, on a checkpoint restore
we need to make sure that a connection that is unambiguously the original
master is up.

Otherwise it could happen that a different connection was activated on the
same master device and the slaves being restored don't agree on which master
connection to bring up.

I can't think of any thing that would rely on this but I've been wrong
about more serious things before.

Fixes-test: @libnm_snapshot_reattach_unmanaged_ports_to_bridge

https://bugzilla.redhat.com/show_bug.cgi?id=2125615
2022-09-30 23:21:36 +02:00
Lubomir Rintel 455dbfce6e device: assert we're not waiting on a nil master
If we're notified of a master appearing, make sure there's actually an
ifindex we're waiting for.

Triger an assertion failure if that is not the case, cause that's pretty
messed up.
2022-09-30 23:21:14 +02:00
Lubomir Rintel bf60fd5acc device: fix recheck slave logic
Since commit a1de6810df ('device: don't ignore external slave removals')
we don't leave device_recheck_slave_status() on un-eslaving (that is
plink->master = 0) early enough.

This results in hooking of NM_MANAGER_DEVICE_IFINDEX_CHANGED even
when we're not actually waiting for any master device to come up,
accompanied by a messed up log entry:

  device[3fa7cfc200be4e84] (portXc): enslaved to unknown device 0 (??)

We also log nonsense when we see any device's link being removed:

  device[a9a4b65bde851bcf] (br0): ifindex: set ifindex 0 (old-l3cfg: 05c6a4409f84d9d2)
  device[45d34e95fb71cce0] (portXa): master br0 with ifindex 0 appeared

We don't do further damage afterwards, so this is purely a cosmetic
annoyance.
2022-09-30 23:21:14 +02:00
Lubomir Rintel a49aede4b8 checkpoint: move a log message a little lower
It's happier there.
2022-09-30 23:21:14 +02:00
Thomas Haller c5beec90a8
core: merge branch 'th/mlag-bonding-slb' (part 2)
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1385
2022-09-29 14:43:36 +02:00
Thomas Haller e796a67d6c
firewall: introduce helper function for add/flush/delete nft table command 2022-09-29 14:41:59 +02:00
Thomas Haller 02feefb1df
firewall: fail from nm_firewall_nft_call() on non-zero exit code 2022-09-29 14:41:59 +02:00
Thomas Haller 607a9544cb
device: allow resetting the devip state via nm_device_devip_set_state()
There is no reason to disallow resetting the state.
2022-09-29 14:41:58 +02:00
Thomas Haller a5f125f8cb
glib-aux: add NM_UTILS_ERROR_COMMAND_FAILED error code 2022-09-29 14:41:58 +02:00
Thomas Haller 95e6ebec66
glib-aux: add nm_utils_get_process_exit_status_desc_buf() helper 2022-09-29 14:41:58 +02:00
Thomas Haller cd2f8945c9
device: merge branch 'th/mlag-bonding-slb' (part 1)
Small spin-off from merge request with minor cleanups.
Merge early.

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1385
2022-09-29 14:40:24 +02:00
Thomas Haller 45eab7b2d8
core: obfuscate pointer value in logging in "nm-active-connection.c" 2022-09-29 14:40:12 +02:00
Thomas Haller 0d764715dd
device: downgrade warning level for logging in nm_device_queue_state()
This is something that does happen.

Is that a bug? If so, this should not be a warning message but an
assertion failure. If it's not a bug, then this does not warrant warning
level, because the user wouldn't know what to do about this and it's
something that occasionally happens.

Granted, the state handling in NMDevice is complex, that it's unclear
whether this indicates a problem or not. In any case, having a warning
does only confuse the user.
2022-09-29 14:40:11 +02:00
Thomas Haller cf942832c3
device: simplify resource management in nm_device_master_release_slave() 2022-09-29 14:40:11 +02:00
Fernando Fernandez Mancera 07e0ab48d1 veth: drop iface peer check during create_and_realize()
When fetching the parent device, if the system is slow, NetworkManager
can hit a race condition where the property is still NULL. In that case,
NetworkManager should create the veth link.

Checking that the peer device exists, it is type NM_DEVICE_TYPE_VETH and
it have a parent device is enough to know that we can skip the link
creation.

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

https://bugzilla.redhat.com/show_bug.cgi?id=2129829

Fixes: 4655b7c308 ('veth: fix veth activation on booting')
2022-09-29 10:29:28 +02:00
Thomas Haller 520411623d
glib-aux: fix nm_str_buf_finalize() for cloning buffer
NMStrBuf can also contains NUL characters. We thus cannot use g_strndup(),
which uses strncpy() and truncates at the first NUL.

Fixes: 13d25f9d0b ('glib-aux: add support for starting with stack-allocated buffer in NMStrBuf')
2022-09-29 08:21:00 +02:00
Thomas Haller 786bb9d048
NEWS: update 2022-09-28 21:37:00 +02:00
Thomas Haller a80bb943b1
contrib: add entries to bash_history for nm-in-container.sh script 2022-09-28 18:35:48 +02:00
Thomas Haller 1fa9db0705
contrib: add entries to bash_history for nm-in-container.sh script 2022-09-28 17:51:15 +02:00
Thomas Haller af85961ea1
all: merge branch 'th/array-find-bsearch'
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1397
2022-09-28 13:32:02 +02:00
Thomas Haller efcc030752
std-aux/trivial: fix typo in code comment 2022-09-28 13:30:45 +02:00
Thomas Haller f786b05479
glib-aux: swap arguments for nm_array_find_bsearch()
Have "len" before "elem_size". That is consistent with g_qsort_with_data()
and bsearch(), and is also what I would expect.

Note that the previous commit just renamed the function. If a user
of the new, changed API gets backported to an older branch, we will
get a compilation error and note that the arguments need to be adjusted.
2022-09-28 13:30:44 +02:00
Thomas Haller 2953ebccba
glib-aux: rename nm_utils_array_find_binary_search() to nm_array_bsearch()
The "nm_utils_" prefix is just too verbose. Drop it.
Also, Posix has a bsearch function. As this function
is similar, rename it.

Note that currently the arguments are provided in differnt
order from bsearch(). That will be partly addressed next.
That is the main reason for the rename. The next commit
will swap the arguments, so do a rename first to get a compilation
error when backporting a patch that uses the changed API.
2022-09-28 13:30:43 +02:00
Thomas Haller 1c067fe4c6
cli: merge branch 'th/cli-select-by-uuid'
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1393
2022-09-28 13:29:07 +02:00
Thomas Haller 046e36b4fd
nmcli: allow selecting profiles by partial UUID
For convenience, allow also to match the UUID by prefix -- if the
"uuid" selector is used.

Note that still, there must be only one candidate found. The "uuid"
selector guarantees to find a unique connection.

  $ nmcli -f connection.uuid,connection.id connection show uuid eb43d80c
2022-09-28 13:27:14 +02:00
Thomas Haller baf9b38650
nmcli: ensure profiles matching by "uuid","path" selector are unique
The "connection.uuid" and the D-Bus path are supposed to be unique on
D-Bus. Anything else indicates to a bug somewhere.

Still, with `nmcli connection $operation [uuid|path] $arg ...` ensure
that the result is always unique.

In practice, this should make no difference. In the case of an
unexpected duplicate, it seems better to fail and uphold the
guarantee that these selectors give unique results.

Also, next we will accept matching prefixes of the UUID. While partial
match will then be supported, it should still be unique. That is, the
"uuid" specifier should always only yield one result. While this patch
should make not difference in practice today (albeit enforcing something
that should be valid), it will make a difference then.
2022-09-28 13:27:14 +02:00
Beniamino Galvani 9819738607 Revert "device: restart DHCP when the MAC changes"
The commit causes problems with bridges. When a new port is attached
the MAC of the bridge possibly changes and if we restart DHCP the
bridge will get a different IP address.

Revert the change until a better solution to the original problem is
found.

This reverts commit 905adabdba.

https://bugzilla.redhat.com/show_bug.cgi?id=2124443
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1401
2022-09-28 11:31:09 +02:00
Beniamino Galvani 683239166b nmtui: merge branch 'bg/nmtui-8021x'
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1314
2022-09-28 09:14:05 +02:00
Beniamino Galvani 48b7ab5636 NEWS: update 2022-09-28 09:09:09 +02:00
Beniamino Galvani 9b396f7cc8 nmtui: add MACsec support 2022-09-28 09:09:09 +02:00
Beniamino Galvani e45f4b6b9e nmtui: ethernet: support wired 802.1X authentication 2022-09-28 09:09:09 +02:00
Beniamino Galvani 4af8010f02 nmtui: wifi: support WPA Enterprise 2022-09-28 09:09:09 +02:00
Beniamino Galvani 7b067be580 nmtui: introduce Nmt8021xFields
Introduce a new widget to edit 802.1X settings.
2022-09-28 09:09:09 +02:00
Beniamino Galvani 81be1923bc nmtui: add secret-flags support to NmtPasswordFields
The existing option ALWAYS_ASK is never used. Add a more generic
option SHOW_SECRET_FLAGS to display a popup for choosing the secret
flags.
2022-09-28 09:09:09 +02:00
Beniamino Galvani 7f5f2eefca nmtui: add NOT_EMPTY flag to NmtPasswordFields
Add a new flag to return a NULL string when the password is
empty. This is needed when creating the binding to some properties
that don't accept an empty value.
2022-09-28 09:09:09 +02:00
Beniamino Galvani 729d00249e newt: fix validity evaluation for stacks
The default implementation of child_validity_changed() for containers
checks that every child widget is valid. For stacks, the validity
should be determined only by the active child.
2022-09-28 09:09:09 +02:00