Commit graph

32437 commits

Author SHA1 Message Date
David Woodhouse f791b98284 libnmc-base: report explicit error if not gateway configured for openconnect
Rather than letting openconnect run, and whine that there's no gateway,
and making the user scroll up past the openconnect usage information,
give them an explicit error.
2023-05-11 13:15:53 +01:00
David Woodhouse db7ea2e5d4 nmtui: do not prompt for secrets if openconnect already provided them
While we're at it, kill the separate openconnect_authenticate() function
since it barely does anything any more and it wants visibility to both
's_vpn' and 'success' variables in the caller.
2023-05-11 13:15:53 +01:00
David Woodhouse 715921a1fd nmcli, nmtui: reduce duplication around openconnect auth helper
Pull a bunch of stuff into nm_vpn_openconnect_authenticate_helper() that
both callers were doing for themselves, and make its API a bit simpler.
It's given the NMSettingVpn and the GPtrArray of secrets, and it simply
succeeds or fails.
2023-05-11 13:15:53 +01:00
David Woodhouse 97f2a368f1 libnmc-base: add supported options for OpenConnect CLI authentication
Ideally, we wouldn't have this hard-coded in NetworkManager itself; we
would invoke a tool to do it for us, like the GUI auth-dialog, which
can live in the NetworkManager-openconnect repository and be kept up
to date as new options are added.

To start with though, let's bring it into sync. We don't add new options
that often, and this will cover the majority of use cases.
2023-05-11 13:15:53 +01:00
David Woodhouse f8d82c7f10 nmcli, nmtui: update authentication for OpenConnect
Since OpenConnect 8.20, 'openconnect --authenticate' will return the
full gateway URL, including the hostname and the path. This allows
servers behind SNI-based proxies to work. To ensure we end up at the
same IP address even behind round-robin DNS, there is a separate
--resolve argument.

Update nmcli/nmtui to use this, as NetworkManager-openconnect does.

Shift some of the logic into the nm_vpn_openconnect_authenticate_helper()
function instead of duplicating it in the callers.

Also, pass the correct protocol in rather than only supporting Cisco
AnyConnect.
2023-05-11 13:15:53 +01:00
Sabri Unal fa715e2387
po: fix mistranslation in Turkish (tr)
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1626
2023-05-11 13:15:13 +02:00
Thomas Haller eaebce6791
bond: merge branch 'th/slb-bond-no-counters'
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1623
2023-05-10 19:05:07 +02:00
Thomas Haller a20d4a7a91
core/tests: add test for nm_firewall_nft_stdio_mlag()
If only to hit some of the code paths in our test, and to have valgrind
check (some of) the code paths.
2023-05-10 19:03:40 +02:00
Thomas Haller 2c716f04f9
bond: don't configure "counter" on nft rules for slb-bonding/mlag
Counters are convenient for debugging, but have a performance overhead.
Configure them only when debug logging in NetworkManager is enabled.
2023-05-10 19:03:40 +02:00
Thomas Haller 3c3938406d
glib-aux: add nmtst_assert_cmpmem() helper
g_assert_cmpmem() exists, but it does not print the actual buffer
content on test failure.  It is useful to see what actually failed in
the test output.

Also, nmtst_assert_cmpmem() prints a backslash escaped output, that you
can unescape in the terminal with `echo -e`. You can also directly copy
and paste the output to C source code.
2023-05-10 19:03:36 +02:00
Thomas Haller c26a94e955
glib-aux: add NM_UTILS_STR_UTF8_SAFE_FLAG_ESCAPE_DOUBLE_QUOTE flag to escape double quotes
This is useful when printing a string for debugging. Then we can
printf("v=\"%s\"", utf8safe_escaped_text), which can be safely unescaped
with `echo -e`.
2023-05-10 19:02:04 +02:00
Thomas Haller fed850b5b9
glib-aux: use GModule instead of dlopen() in _inet_aton()
Using dlopen() requires us to link with libdl (at least with
some libc). That is cumbersome and was not done by all users of
libnm-glib-aux, thereby causing a linker error.

The code path is only used via nm_assert(). Use GModule instead.

Fixes: a23af8f764 ('glib-aux: avoid using inet_aton()')
2023-05-10 18:58:49 +02:00
Thomas Haller 4c48301594
device: don't reset "net.ipv6.conf.$IFACE.forwarding"
According to systemd, IPv6 forwarding is special anyway, and they only
enable forwarding for "net.ipv6.conf.all.forwarding" ([1]).

Since commit 46e63e03af ('device: announce the managed IPv6
configuration with ipv6.method=shared') we support "ipv6.method=shared"
and enable forwarding for IPv6, on the interface. Whether that makes
sense is questionable, given [1] and the claim that setting it
per-interface is not useful.

Anyway, since that change we always reset the "forwarding" sysctl to
zero, when we don't enable shared mode. That is not right, because the
user didn't explicitly ask for that (and there is no configuration
option like systemd-networkd's "IPForward=" setting to control that).

What we instead should do, not touch/reset the sysctl, unless we really
want to.

No longer set "forwarding" to zero by default. And only restore the
previous value (_dev_sysctl_save_ip6_properties()) if we actually
changed the value to "1".

[1] b8fba0cded/src/network/networkd-sysctl.c (L79)

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

Fixes: 46e63e03af ('device: announce the managed IPv6 configuration with ipv6.method=shared')

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1616
2023-05-09 10:21:25 +02:00
Thomas Haller 89edca4628
gitlab-ci: remove container cleanup stages
These stages were not properly implemented and don't seem to work.
Drop them.

Note that we do want that our cached containers get collected eventually.
As these are just caches for performance reasons, that could be done with
little downsides (we can just regenerate the containers when we need them).
However, that's not done by our gitlab-ci stages. Instead, it should
be done on a project level. It's not clear whether that is actually done,
but if there is a need (because of the resources that this wastes), then
we should do that (on freedesktop.org's gitlab instance).
2023-05-09 09:53:43 +02:00
Thomas Haller bbfd1377b4 Squashed 'src/n-dhcp4/' changes from f8fc48dc014d..b2a382ac4500
b2a382ac4500 test: use inet_pton() instead of inet_aton() in test tool
45df6a37a710 meson: no longer pass -Wl,--no-undefined explicitly
bb9bcdee5754 n-dhcp4-client: make n_dhcp4_client_set_log_level public

git-subtree-dir: src/n-dhcp4
git-subtree-split: b2a382ac4500dee1abfb7cd5acaa3678e47e9662
2023-05-09 08:53:48 +02:00
Thomas Haller 581eb33ecf
n-dhcp4: re-import git-subtree for 'src/n-dhcp4'
git subtree pull --prefix src/n-dhcp4 git@github.com:nettools/n-dhcp4.git master --squash
2023-05-09 08:53:48 +02:00
Thomas Haller 7e03f9c1ba
glib-aux: merge branch 'th/no-inet-aton'
See-also: https://bugs.python.org/issue37495
https://bugzilla.redhat.com/show_bug.cgi?id=2049134

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1620
2023-05-09 08:35:28 +02:00
Thomas Haller a23af8f764
glib-aux: avoid using inet_aton()
nm_inet_parse_bin_full() supports a legacy mode for IPv4, which used
inet_aton(). This is only used by initrd reader, which parses the
kernel command line as defined by dracut. Since that dracut API is old
and not defined by us, we want to be more forgiving in case a user
specifies something that used to work in the past. In particular,
we want to parse "255.256.256.000" as netmask (which inet_pton() would
reject).

inet_aton() trips off some ABI checkers that we shouldn't use this ABI.
It was anyway only used as *additional* guard when we parsed certain
legacy formats for IPv4 addresses. We can drop that and just use our
parser.

Note that there is still an nm_assert() path, which loads inet_aton()
dynamically, just to ensure that our legacy parser implementation is in
agree with inet_aton().

https://bugzilla.redhat.com/show_bug.cgi?id=2049134
2023-05-08 15:44:49 +02:00
Thomas Haller 2b9c6fc20a
glib-aux/tests: add unit test for nm_inet_parse_bin_full() 2023-05-08 13:32:20 +02:00
Thomas Haller 0670f958fe
triage: only make stale issues/merge-requests with a label instead of autoclosing them
An issue/merge-requests only moves forward by a human putting effort in.
Wether the issue is open, closed, autoclosed or flagged with a "stale"
label doesn't matter in theory.

In practice, humans don't like getting their issues/merge-requests
autoclosed. Instead, add a "stale" label.

There was always a benefit of this automatic action. It tended to
generate some feedback and new action. Sometimes it even brought new
attention to the issue/merge-request to get it fixed. That is hopefully
also the case with the stale label.
2023-05-08 11:04:50 +02:00
Thomas Haller 1c904c7d27
man: qualify properties in man nm-settings-nmcli with setting name
The manual page is large. When you search for a properties, then it's
not immediately clear to which setting it belongs. You would have to
scroll up for the setting name.

This also makes sense for the nmcli manual page, because on the command
line you have to specify the full name.
2023-05-08 11:04:50 +02:00
Thomas Haller 20cf4ff31a
libnm: merge branch 'th/connection-get-setting-cleanup'
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1618
2023-05-05 14:48:37 +02:00
Thomas Haller 429cf416fd
core: add nm_settings_connection_get_setting() helper
For efficiently and conveniently lookup an NMSetting from the
NMConnection inside the NMSettingsConnection.

Note that this uses the NMMetaSettingType as lookup key. That is a novel
approach, compared to lookup by name (nm_connection_get_setting_by_name())
or GType (nm_connection_get_setting()).

Using the NMMetaSettingType enum is however faster, because it does not
require resolving the name/GType first. This is perfecly fine internal API,
we should use it.
2023-05-04 12:01:57 +02:00
Thomas Haller db5946ac2f
libnm: expose _nm_connection_get_setting_by_metatype() in internal header
We have several variants to get the NMSetting from an NMConnection. Some
of them are public API (nm_connection_get_setting(), nm_connection_get_setting_by_name()).

The most efficient way is lookup by NMMetaSettingType. Expose that as
internal API, so it can be used. The NMMetaSettingType is internal, but
it exists because it's a very useful enum. Allow others to make use of
it.

Also, add a static assert which prevents various wrong uses at compile
time, for example

  _nm_connection_get_setting_by_metatype(connection, NM_TYPE_SETTING_CONNECTION)
2023-05-04 12:01:57 +02:00
Thomas Haller c60a4649b8
libnm: cleanup redundant nm_connection_get_setting functions
Refactor and cleanup the functions to get a setting from a connection.

As the NMConnection tracks the settings in an array indexed by
NMMetaSettingType, the most direct and efficient way is to look up via
that enum.

Previously, nm_connection_get_setting_by_name() would first look up the GType
(which already involved looking up the NMMetaSettingInfo), then based on the
GType it would look up the NMMetaSettingInfo again to get the meta_type. That
is unnecessary. Directly look up the NMMetaSettingInfo, which directly
gives the meta_type.
2023-05-04 11:47:10 +02:00
Thomas Haller 27cbf584bd
libnm/trivial: rename internal connection-get-setting methods
This function will be exposed on the internal header. Rename to
_nm_connection_get_setting_by_metatype().
2023-05-04 11:42:06 +02:00
Thomas Haller a740931204
core: merge branch 'th/autoconnect-cleanups'
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1615
2023-05-04 10:34:41 +02:00
Thomas Haller 6e229a852f
core: only trigger recheck when something changes in activate_slave_connections()
We need to detect when nothing relevant changes, and shortcut doing things when they
are unnecessary.
2023-05-04 10:34:12 +02:00
Thomas Haller 7e15b4d562
core: return whether anything changed from nm_manager_devcon_autoconnect_retries_reset() 2023-05-04 10:34:12 +02:00
Thomas Haller 5492945fdc
core: use switch statement in device_state_changed()
It seems better for readability, because reacting based on the state-reason
is ugly already. This way, we access nm_device_state_reason_check(reason) only
at once place. With the if, it's not immediately obvious that both if/else
parts only switch on the reason too.
2023-05-04 10:34:12 +02:00
Thomas Haller a019d965f7
core: avoid creating devcon data that we don't need
Otherwise, we create device × profiles entries, most of
them nonsensical.
2023-05-04 10:34:12 +02:00
Thomas Haller 87b46e1663
core: improve handling for blocking autoconnect
Cleanup logging to always print a "block-autoconnect:" prefix to related
lines. Also, make sure that everywhere where the state changes, a line
gets logged. Also, for devconf data print both the interface and the
profile.
2023-05-04 10:34:12 +02:00
Thomas Haller fc624b8de8
core: assert for valid blocked reasons in autoconnect code
We only have a few blocked reasons. Some of them can be only set on the
devcon data, and some only on the settings connection. Assert that we
don't mix that up.
2023-05-04 10:34:12 +02:00
Thomas Haller 2e3fabae50
release: bump version to 1.43.7 (development) 2023-05-03 16:20:35 +02:00
Fernando Fernandez Mancera 859faa6509 merge: branch 'ff/bond_port_options'
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1564
2023-05-03 10:52:35 +02:00
Fernando Fernandez Mancera 2f0571f193 bonding: add support to prio property in bond ports
Add per port priority support for bond active port re-selection during
failover. A higher number means a higher priority in selection. The
primary port still has the highest priority. This option is only
compatible with active-backup, balance-tlb and balance-alb modes.
2023-05-03 10:44:06 +02:00
Fernando Fernandez Mancera e200b16291 platform: add support to prio property in bond ports 2023-05-03 10:43:58 +02:00
Fernando Fernandez Mancera bb435674b5 platform: add netlink support for bond port options
sysfs is deprecated and kernel will not add new bond port options to
sysfs. Netlink is a stable API and therefore is the right method to
communicate with kernel in order to set the link options.
2023-05-03 09:55:45 +02:00
Fernando Fernandez Mancera 762cd06ffa libnm: fix ifcfg variable documentation at queue-id property
The correct variable for queue-id in ifcfg is BOND_PORT_QUEUE_ID.
2023-05-03 09:55:45 +02:00
Thomas Haller d3b5496362
firewall: create "dynamic" sets for nft rules for slb-bonding
A workaround for a nftables issue ([1]). I don't know why that matters.

[1] https://bugzilla.redhat.com/show_bug.cgi?id=2177667

Fixes: e9268e3924 ('firewall: add mlag firewall utils for multi chassis link aggregation (MLAG) for bonding-slb')

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1614
2023-05-03 08:12:15 +02:00
Thomas Haller 86e635dd4d
dns: merge branch 'ts/1281-resolv-conf-non-public-tld'
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/1281

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1613
2023-05-02 11:48:12 +02:00
Thomas Haller 6a4097fe0b
NEWS: update 2023-05-02 11:42:55 +02:00
Thomas Haller db3da65c6c
dns: refactor domain_is_valid() to combine #if blocks 2023-05-02 11:42:55 +02:00
Thomas Haller 4ddbf32f1b
dns/trivial: rename check_public_suffix parameter of domain_is_valid()
Names are important. The previous name was counter intuitive for what
the behavior was.
2023-05-02 11:42:49 +02:00
Thomas Haller 601605dbea
dns: use NM_STR_HAS_SUFFIX() instead of g_str_has_suffix()
It translates to a plain memcmp() as the argument is a string literal.
2023-05-02 11:40:34 +02:00
Thomas Haller b4338de984
dns: fix logging for resetting the host-domain
The previous logging happened, when the value did not change. Log
instead, when the value changes.

Fixes: 86bb09c93b ('dns: generate correct search domain for hostnames on non-public TLD')
2023-05-02 11:40:33 +02:00
Tom Sobczynski 86bb09c93b
dns: generate correct search domain for hostnames on non-public TLD
dns-manager uses the Mozilla Public Suffix List to determine an
appropriate search domain when generating /etc/resolv.conf. It is
presumed that if the hostname is "example.com", the user does not want
to automatically search "com" for unqualified hostnames, which is
reasonable.  To implement that, prior to the fix, domain_is_valid()
implicitly used the PSL "prevailing star rule", which had the
consequence of assuming that any top-level domain (TLD) is public
whether it is on the official suffix list or not. That meant
"example.local" or "example.localdomain" would not result in searching
"local" or "localdomain" respectively, but rather /etc/resolv.conf would
contain the full hostname "example.local" as the search domain and not
give users what they expect.  The fix here uses the newer PSL API
function that allows us to turn off the "prevailing star rule" so that
"local" and "localdomain" are NOT considered public TLDs because they
are not literally on the suffix list. That in turn gives us the search
domain "local" or "localdomain" in /etc/resolv.conf and allows
unqualified hostname lookups "e.g., resolvectl query example" to find
example.local while example.com still maintains the previous behavior
(i.e., search domain of "example.com" rather than "com").

[thaller@redhat.com: reworded commit message]

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

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1613
2023-05-02 11:23:09 +02:00
Thomas Haller cb6f8b987c
all: fix various wrong "return FALSE" for returning pointers 2023-05-02 08:37:20 +02:00
Thomas Haller 6428ee04a8
systemd: define ENABLE_GSHADOW to zero
To be consistent with other defines.
2023-05-02 08:36:37 +02:00
Thomas Haller 505356be48
service: increase start timeout of NetworkManager.service
With a large number of interfaces, it can take longer than 45 seconds
before NetworkManager is started (and the D-Bus name acquired). Increase
the start timeout.

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1612
2023-04-28 11:01:33 +02:00