Commit graph

34212 commits

Author SHA1 Message Date
Thomas Haller
45b346554a
shared: add nm_str_buf_reset() helper 2020-06-26 09:29:53 +02:00
Thomas Haller
d83908b6a1
shared: add nm_utils_escaped_tokens_escape_strbuf*() helpers 2020-06-26 09:29:53 +02:00
Thomas Haller
a5a5656582
shared: add nm_utils_escaped_tokens_escape_unnecessary() util 2020-06-26 09:29:53 +02:00
Thomas Haller
5222f1b5ff
shared: add nm_str_buf_append_required_delimiter() 2020-06-26 09:29:52 +02:00
Thomas Haller
85e27b1f9c
shared: add nm_str_buf_append_c_hex() helper 2020-06-26 09:29:52 +02:00
Thomas Haller
069be33fbd
shared: add nm_hexchar() helper 2020-06-26 09:29:52 +02:00
Thomas Haller
d53abfd989
shared: add nm_str_buf_append0() and nm_str_buf_append_len0() helper
These are basically nm_str_buf_append()/nm_str_buf_append_len() and
nm_str_buf_get_str() in one.
2020-06-26 09:29:52 +02:00
Thomas Haller
506f95ecaf
shared: add NM_UTILS_GET_NEXT_REALLOC_SIZE_32 and _40 macros 2020-06-26 09:29:51 +02:00
Thomas Haller
de4df9f529
shared: return non-const pointer from nm_str_buf_get_str()
It's more convenient in certain cases. The user is allowed
to modified the content of the returned buffer.
2020-06-26 09:29:51 +02:00
Thomas Haller
081650eb67
shared: avoid copying empty string in nm_str_buf_append_printf() 2020-06-25 22:46:27 +02:00
Beniamino Galvani
27c84a505c libnm: fix wrong assertion in nm_client_check_connectivity_finish()
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/476

Fixes: b44d883d92 ('libnm: implement nm_client_check_connectivity_async() by using GDBusConnection directly')
(cherry picked from commit d0a2eb8f05)
2020-06-25 14:13:53 +02:00
Beniamino Galvani
d0a2eb8f05 libnm: fix wrong assertion in nm_client_check_connectivity_finish()
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/476

Fixes: b44d883d92 ('libnm: implement nm_client_check_connectivity_async() by using GDBusConnection directly')
2020-06-25 14:11:36 +02:00
Beniamino Galvani
a1de36d917 libnm: omit nm_device_*_get_hw_address() from introspection output
When the get_hw_address() method is called on a device object through
GObject-introspection, the device-specific
(e.g. nm_device_ethernet_get_hw_address()) C function is called
instead of the more generic nm_device_get_hw_address().

Those device-specific functions were deprecated in commit 067a3d6c08
('nm-device: expose via D-Bus the 'hw-address' property') and so libnm
will print out deprecation warnings like:

 DeprecationWarning: NM.DeviceEthernet.get_hw_address is deprecated

Omit the device-specific function from the introspection output so
that the generic function will be called instead.

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/544
(cherry picked from commit 3124a05d83)
2020-06-25 11:05:11 +02:00
Beniamino Galvani
3124a05d83 libnm: omit nm_device_*_get_hw_address() from introspection output
When the get_hw_address() method is called on a device object through
GObject-introspection, the device-specific
(e.g. nm_device_ethernet_get_hw_address()) C function is called
instead of the more generic nm_device_get_hw_address().

Those device-specific functions were deprecated in commit 067a3d6c08
('nm-device: expose via D-Bus the 'hw-address' property') and so libnm
will print out deprecation warnings like:

 DeprecationWarning: NM.DeviceEthernet.get_hw_address is deprecated

Omit the device-specific function from the introspection output so
that the generic function will be called instead.

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/544
2020-06-25 11:03:23 +02:00
Beniamino Galvani
13eb192966 initrd: merge branch 'bg/initrd-ipv6'
https://bugzilla.redhat.com/show_bug.cgi?id=1848943
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/548
(cherry picked from commit 4efd4e0a61)
2020-06-24 14:55:11 +02:00
Beniamino Galvani
440a0b4078 initrd: set ipv6.method=auto when the autoconfiguration field is 'none'
The 7th field of:

 ip=<client-IP>:[<peer>]:<gateway-IP>:<netmask>:<client_hostname>:<interface>:{none|off|dhcp|on|any|dhcp6|auto6|ibft}:[:[<mtu>][:<macaddr>]]

specifies which kind of autoconfiguration to do. 'none' and 'off' mean
static addresses.

The old network module of dracut used to leave kernel IPv6
autoconfiguration enabled when IPv4 static addresses were
configured. With NM, this corresponds to enabling IPv6 auto method.

https://bugzilla.redhat.com/show_bug.cgi?id=1848943
(cherry picked from commit a39eb9ac14)
2020-06-24 14:54:50 +02:00
Beniamino Galvani
0e15a5e1be initrd: generate connections with IPv6 method 'auto' instead of 'ignore'
When the initrd generator creates a connection with IPv6 method
'ignore', the kernel will do IPv6 autoconfiguration on the
interface. However, it is preferable to let NetworkManager configure
the interface directly instead of relying on kernel. Therefore, change
the IPv6 method to 'auto'. Note that we still set ipv6.may-fail to
'yes' so that a failure during IPv6 autoconfiguration doesn't bring
down the interface.

(cherry picked from commit f6d654b18f)
2020-06-24 14:54:49 +02:00
Beniamino Galvani
4efd4e0a61 initrd: merge branch 'bg/initrd-ipv6'
https://bugzilla.redhat.com/show_bug.cgi?id=1848943
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/548
2020-06-24 10:38:58 +02:00
Beniamino Galvani
a39eb9ac14 initrd: set ipv6.method=auto when the autoconfiguration field is 'none'
The 7th field of:

 ip=<client-IP>:[<peer>]:<gateway-IP>:<netmask>:<client_hostname>:<interface>:{none|off|dhcp|on|any|dhcp6|auto6|ibft}:[:[<mtu>][:<macaddr>]]

specifies which kind of autoconfiguration to do. 'none' and 'off' mean
static addresses.

The old network module of dracut used to leave kernel IPv6
autoconfiguration enabled when IPv4 static addresses were
configured. With NM, this corresponds to enabling IPv6 auto method.

https://bugzilla.redhat.com/show_bug.cgi?id=1848943
2020-06-24 10:37:31 +02:00
Beniamino Galvani
f6d654b18f initrd: generate connections with IPv6 method 'auto' instead of 'ignore'
When the initrd generator creates a connection with IPv6 method
'ignore', the kernel will do IPv6 autoconfiguration on the
interface. However, it is preferable to let NetworkManager configure
the interface directly instead of relying on kernel. Therefore, change
the IPv6 method to 'auto'. Note that we still set ipv6.may-fail to
'yes' so that a failure during IPv6 autoconfiguration doesn't bring
down the interface.
2020-06-24 10:37:31 +02:00
Thomas Haller
a259e10946
shared,core: merge branch 'th/strsplit-quoted-kernel-cmdline'
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/549

(cherry picked from commit 827dfacf0f)
2020-06-24 09:02:18 +02:00
Thomas Haller
254528acb6
core: use nm_utils_strsplit_quoted() for splitting the kernel command line
The kernel command line supports escaping and quoting (at least,
according to systemd's parser, which is our example to follow).

Use nm_utils_strsplit_quoted() which supports that.

(cherry picked from commit 27041e9f05)
2020-06-24 09:02:17 +02:00
Thomas Haller
5d2b609e7e
shared: add nm_utils_strsplit_quoted()
We want to parse "/proc/cmdline". That is space separated with support
for quoting and escaping. Our implementation becomes part of stable
behavior, and we should interpret the kernel command line the same way
as the system does. That means, our implementation should match
systemd's.

(cherry picked from commit 10779d545a)
2020-06-24 09:02:17 +02:00
Thomas Haller
61a37bdf13
tests: add nmtst_extract_first_word_all() for testing
We usually don't want to use internal API of systemd for our own
purposes. Here, we will use it to check our implementation against
systemd's. Add an accessor to extract_first_word() for testing.

(cherry picked from commit 2a6ecf2128)
2020-06-24 09:02:17 +02:00
Thomas Haller
4c443ec269
shared: add nm_str_buf_append_c_repeated() helper
(cherry picked from commit a2142e884b)
2020-06-24 09:02:16 +02:00
Thomas Haller
3ed95f308f
shared: make NM_STR_BUF_INIT() an inline function
In the previous form, NM_STR_BUF_INIT() was a macro. That makes sense,
however it's not really possible to make that a macro without evaluating
the reservation length multiple times. That means,

    NMStrBuf strbuf = NM_STR_BUF_INIT (nmtst_get_rand_uint32 () % 100, FALSE);

leads to a crash. That is unfortunate, so instead make it an inline
function that returns a NMStrBut struct. Usually, we avoid functions
that returns structs, but here we do it.

(cherry picked from commit c6809df4cd)
2020-06-24 09:02:16 +02:00
Thomas Haller
5216e5c012
shared: allow empty NMStrBuf buffers with un-allocated memory
Previously, for simplicity, NMStrBuf did not support buffers without any
data allocated. However, supporting that has very little
overhead/complexity, so do it.

Now you can initialize buffers to have no data allocated, and when
appending data, it will automatically grow.

(cherry picked from commit 83c79bc7a8)
2020-06-24 09:01:41 +02:00
Thomas Haller
827dfacf0f
shared,core: merge branch 'th/strsplit-quoted-kernel-cmdline'
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/549
2020-06-24 08:40:17 +02:00
Thomas Haller
27041e9f05
core: use nm_utils_strsplit_quoted() for splitting the kernel command line
The kernel command line supports escaping and quoting (at least,
according to systemd's parser, which is our example to follow).

Use nm_utils_strsplit_quoted() which supports that.
2020-06-23 00:42:37 +02:00
Thomas Haller
10779d545a
shared: add nm_utils_strsplit_quoted()
We want to parse "/proc/cmdline". That is space separated with support
for quoting and escaping. Our implementation becomes part of stable
behavior, and we should interpret the kernel command line the same way
as the system does. That means, our implementation should match
systemd's.
2020-06-23 00:42:37 +02:00
Thomas Haller
2a6ecf2128
tests: add nmtst_extract_first_word_all() for testing
We usually don't want to use internal API of systemd for our own
purposes. Here, we will use it to check our implementation against
systemd's. Add an accessor to extract_first_word() for testing.
2020-06-22 23:09:05 +02:00
Thomas Haller
a2142e884b
shared: add nm_str_buf_append_c_repeated() helper 2020-06-22 21:33:59 +02:00
Thomas Haller
c6809df4cd
shared: make NM_STR_BUF_INIT() an inline function
In the previous form, NM_STR_BUF_INIT() was a macro. That makes sense,
however it's not really possible to make that a macro without evaluating
the reservation length multiple times. That means,

    NMStrBuf strbuf = NM_STR_BUF_INIT (nmtst_get_rand_uint32 () % 100, FALSE);

leads to a crash. That is unfortunate, so instead make it an inline
function that returns a NMStrBut struct. Usually, we avoid functions
that returns structs, but here we do it.
2020-06-22 21:20:03 +02:00
Thomas Haller
1d1098f638
libnm: avoid deprecation warning about NMUtilsPredicateStr
NMUtilsPredicateStr got introduced in 1.26.0 API. However, marking the typedef
to be available only in 1.26, causes a compiler warning when using the header:

    /usr/include/libnm/nm-setting.h:372:39: error: ‘NMUtilsPredicateStr’ is deprecated: Not available before 1.26 [-Werror=deprecated-declarations]
      372 |                                       NMUtilsPredicateStr predicate);
          |                                       ^~~~~~~~~~~~~~~~~~~
    cc1: all warnings being treated as errors

Avoid that. It's not a problem in practice, because all users of the typedef
are functions that are marked to be available in 1.26 themselves.

(cherry picked from commit 8a13b02d96)
2020-06-22 13:27:19 +02:00
Thomas Haller
8a13b02d96
libnm: avoid deprecation warning about NMUtilsPredicateStr
NMUtilsPredicateStr got introduced in 1.26.0 API. However, marking the typedef
to be available only in 1.26, causes a compiler warning when using the header:

    /usr/include/libnm/nm-setting.h:372:39: error: ‘NMUtilsPredicateStr’ is deprecated: Not available before 1.26 [-Werror=deprecated-declarations]
      372 |                                       NMUtilsPredicateStr predicate);
          |                                       ^~~~~~~~~~~~~~~~~~~
    cc1: all warnings being treated as errors

Avoid that. It's not a problem in practice, because all users of the typedef
are functions that are marked to be available in 1.26 themselves.
2020-06-22 13:24:43 +02:00
Thomas Haller
6ae1f0e459
libnm: return NULL for boxed strv properties of NMSettingMatch
The API does not allow to distinguish between an unset (NULL) or empty
strv array. For example, nm_setting_match_get_paths() never returns
%NULL, but returns an empty strv array.

On the other hand, the GObject properties of type G_TYPE_STRV have a
default value of %NULL. That means, also the getter should map both
unset and empty to %NULL.

Note that this is a change in behavior w.r.t. 1.24.0 API, where
match.interface-name property would return an empty strv array.
Regrading the other API, this is no change because it is new API
and we will fix it before 1.26.0 release.

(cherry picked from commit 62263e706f)
2020-06-22 12:18:26 +02:00
Thomas Haller
092ab227d5
shared: add nm_strvarray_get_strv_non_empty() helper
(cherry picked from commit d69f057a65)
2020-06-22 12:18:21 +02:00
Thomas Haller
62263e706f
libnm: return NULL for boxed strv properties of NMSettingMatch
The API does not allow to distinguish between an unset (NULL) or empty
strv array. For example, nm_setting_match_get_paths() never returns
%NULL, but returns an empty strv array.

On the other hand, the GObject properties of type G_TYPE_STRV have a
default value of %NULL. That means, also the getter should map both
unset and empty to %NULL.

Note that this is a change in behavior w.r.t. 1.24.0 API, where
match.interface-name property would return an empty strv array.
Regrading the other API, this is no change because it is new API
and we will fix it before 1.26.0 release.
2020-06-22 11:59:21 +02:00
Thomas Haller
d69f057a65
shared: add nm_strvarray_get_strv_non_empty() helper 2020-06-22 11:57:25 +02:00
Beniamino Galvani
3951396de7 settings: fix assertion when updating default wired connection
The connection is expected to have the NM_GENERATED flag, since it has
a default wired device.

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

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/471
(cherry picked from commit 4aefad5673)
2020-06-22 09:55:04 +02:00
Beniamino Galvani
4aefad5673 settings: fix assertion when updating default wired connection
The connection is expected to have the NM_GENERATED flag, since it has
a default wired device.

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

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/471
2020-06-22 09:38:12 +02:00
Thomas Haller
28644556e1
shared: fix string truncation in nm_str_buf_append_printf()
If g_vsnprintf() returns that it wants to write 5 characters, it
really needs space for 5+1 characters. If we have 5 characters
available, it would have written "0123\0", which leaves the buffer
broken.

Fixes: eda47170ed ('shared: add NMStrBuf util')
(cherry picked from commit fd34fe50a2)
2020-06-21 22:34:16 +02:00
Thomas Haller
fd34fe50a2
shared: fix string truncation in nm_str_buf_append_printf()
If g_vsnprintf() returns that it wants to write 5 characters, it
really needs space for 5+1 characters. If we have 5 characters
available, it would have written "0123\0", which leaves the buffer
broken.

Fixes: eda47170ed ('shared: add NMStrBuf util')
2020-06-21 12:41:53 +02:00
Thomas Haller
83c79bc7a8
shared: allow empty NMStrBuf buffers with un-allocated memory
Previously, for simplicity, NMStrBuf did not support buffers without any
data allocated. However, supporting that has very little
overhead/complexity, so do it.

Now you can initialize buffers to have no data allocated, and when
appending data, it will automatically grow.
2020-06-20 19:22:04 +02:00
Thomas Haller
8ba4537b24
all: merge branch 'th/stdict-values'
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/531
2020-06-19 18:07:16 +02:00
Thomas Haller
bb6c2d7371
libnm: ensure stable behavior in _nm_ip_route_attribute_validate_all()
Check the attributes in a defined, stable order. This is necessary,
so that consistently the same error gets reported.
2020-06-19 17:14:10 +02:00
Thomas Haller
19b6d38932
libnm: use nm_utils_named_values_from_strdict() in "nm-setting-tc-config.c" 2020-06-19 17:07:27 +02:00
Thomas Haller
83146b3ec2
libnm: add missing since gtk-doc for nm_tc_action_get_attribute_names() 2020-06-19 17:07:27 +02:00
Thomas Haller
fff812e255
shared: refactor nm_utils_strdict_to_variant_ass() to use nm_utils_named_values_from_strdict()
It is pretty much the same code this way, but shorter.
2020-06-19 17:07:26 +02:00
Thomas Haller
cdb38df7e5
shared,core: rename and move function to nm_utils_strdict_to_variant_asv() 2020-06-19 17:07:26 +02:00