Commit graph

25468 commits

Author SHA1 Message Date
Thomas Haller
9d602529cc settings/trivial: comment why we create GDBusConnection for ifcfg D-Bus interface
There is nothing to fix. Replace the FIXME comment.
2019-12-09 08:59:29 +01:00
Thomas Haller
8bcb48ee3b libnm/docs: fix gtk-doc for #NMDhcpHostnameFlags
(cherry picked from commit 4eed1a6596)
2019-12-09 07:49:49 +01:00
Thomas Haller
4eed1a6596 libnm/docs: fix gtk-doc for #NMDhcpHostnameFlags 2019-12-09 07:49:16 +01:00
Beniamino Galvani
366b90db87 device: don't transition assumed devices to FAILED before ACTIVATED
If the activation of an assumed device fails, we first set the device
state to FAILED and then to ACTIVATED. In the FAILED state, the active
connection transitions to DEACTIVATED and clears its device pointer;
hence we end up with an inconsistent state which causes assertion
failures in other parts of the code (for example, get_best_ip_config()
assumes that the device of the best active connection is not NULL).

Don't first transition to FAILED and then to ACTIVATED, just set the
latter.

https://bugzilla.redhat.com/show_bug.cgi?id=1737774
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/merge_requests/351
(cherry picked from commit 93e9010b75)
2019-12-05 17:11:36 +01:00
Beniamino Galvani
93e9010b75 device: don't transition assumed devices to FAILED before ACTIVATED
If the activation of an assumed device fails, we first set the device
state to FAILED and then to ACTIVATED. In the FAILED state, the active
connection transitions to DEACTIVATED and clears its device pointer;
hence we end up with an inconsistent state which causes assertion
failures in other parts of the code (for example, get_best_ip_config()
assumes that the device of the best active connection is not NULL).

Don't first transition to FAILED and then to ACTIVATED, just set the
latter.

https://bugzilla.redhat.com/show_bug.cgi?id=1737774
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/merge_requests/351
2019-12-05 17:09:53 +01:00
Beniamino Galvani
8c0e5b323a merge: support for Wi-Fi Enhanced Open (OWE)
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/merge_requests/345
2019-12-05 14:01:18 +01:00
David Bauer
fc42a74ece libnm-core: support OWE when determining AP compatibility 2019-12-05 14:00:10 +01:00
David Bauer
cb33a27f96 libnm/utils: add OWE security type 2019-12-05 14:00:10 +01:00
David Bauer
a8d5fef607 client/tui: add OWE support 2019-12-05 14:00:10 +01:00
David Bauer
977c0c2387 client/cli: add support for OWE key management flag 2019-12-05 14:00:10 +01:00
David Bauer
f7aa5b3a36 clients/secret-agent: don't require secrets for OWE connections 2019-12-05 14:00:10 +01:00
David Bauer
046f6f7227 clients/meta-setting-desc: allow setting wifi-sec.key-mgmt to OWE 2019-12-05 14:00:10 +01:00
David Bauer
9a2bbbbc7a wifi/utils: complete key-mgmt=owe for OWE capable APs 2019-12-05 14:00:10 +01:00
David Bauer
235cb4a5d3 settings/ifcfg: add support for KEY_MGMT=OWE 2019-12-05 14:00:10 +01:00
David Bauer
1e55eff498 supplicant: add support for OWE key management 2019-12-05 14:00:10 +01:00
David Bauer
85c4a757ad libnm-core/setting-wireless-security: add support for OWE key-management 2019-12-05 14:00:10 +01:00
David Bauer
1bae844fac wifi/ap: expose OWE capability 2019-12-05 14:00:10 +01:00
David Bauer
ba299d0d0c libnm-core: add OWE support flag 2019-12-05 14:00:10 +01:00
Thomas Haller
40a7d13666 initrd: merge branch 'th/initrd-parse-cleanup'
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/merge_requests/282

(cherry picked from commit abaad34fd2)
2019-12-05 13:12:04 +01:00
Thomas Haller
9f76f5eb81 initrd: don't use inet_aton() to parse IPv4 address
inet_aton() is very accepting when parsing the address. For example,
it accepts addresses with fewer octets (interpreting the last octet
as a number in network byte order for multiple bytes). It also ignores
any trailing garbage after the first delimiting whitespace (at least,
the glibc implementation). It also accepts octets in hex and octal
notation.

For the initrd reader we want to be more forgiving than inet_pton()
and also accept addresses like 255.000.000.000 (octal notation). For
that we would want to use inet_aton(). But we should not accept all the
craziness that inet_aton() otherwise accepts.

Use nm_utils_parse_inaddr_bin_full() instead. This function implements
our way how we want to interpret IP addresses in string representation.
Under the hood, of course it also uses inet_pton() and even inet_aton(),
but it is stricter than inet_aton() and only accepts certain formats.

(cherry picked from commit d68373c305)
2019-12-05 13:12:04 +01:00
Thomas Haller
4f3e31f7c5 initrd: fix out-of-bounds read when detecting address family in dt_get_ipaddr_property()
The @family argument is an input and output argument.

Initially, the family is set to AF_UNSPEC, in which case the family
gets detected based on the IP address. However, we call
dt_get_ipaddr_property() multiple times to parse the netmask, the
gateway and the IP address.

That means, after the first successfull call, the @family is set to
AF_INET or AF_INET6.

Note that the previous code (in the switch block) would only check that
the family is set to AF_UNSPEC, but it would not check that the @family
matches the expected binary address length @len. Later, we then might call
nm_ip_address_new_binary() with a family and a binary address of
unexpected length.

Also drop the error checking for nm_ip_address_new_binary().
nm_ip_address_new_binary() can only fail if the prefix length is larger
than 32/128. The function has no way to validate the input arguments
beyond that and can thus not fail (short of undefined behavior).

(cherry picked from commit 9618f1bb4b)
2019-12-05 13:12:04 +01:00
Thomas Haller
90c33b798e initrd: use cleanup attribute in nmi_dt_reader_parse()
(cherry picked from commit e7cf22be3e)
2019-12-05 13:12:04 +01:00
Thomas Haller
f970039122 initrd: fix use-after-free for variable "s_gateway" in nmi_dt_reader_parse()
(cherry picked from commit 321a323df4)
2019-12-05 13:12:04 +01:00
Thomas Haller
f17bb012fe shared: add nm_utils_parse_inaddr_bin_full() to support legacy IPv4 formats as inet_aton()
inet_aton() also supports IPv4 addresses in octal (with a leading '0')
or where not all 4 digits of the address are present.

Add nm_utils_parse_inaddr_bin_full() to optionally fallback to
parse the address with inet_aton().

Note taht inet_aton() also supports all crazy formats, including
ignoring trailing garbage after a whitespace. We don't want to accept
that in general.

Note that even in legacy format we:

  - accept everything that inet_pton() would accept

  - additionally, we also accept some forms which inet_aton() would
    accept, but not all.

That means, the legacy format that we accept is a superset of
inet_pton() and a subset of inet_aton(). Which is desirable.

(cherry picked from commit 8fbf67d138)
2019-12-05 13:12:04 +01:00
Thomas Haller
fc19cbb589 shared: add nm_utils_addr_family_from_size() helper
(cherry picked from commit 06a976358b)
2019-12-05 13:12:04 +01:00
Thomas Haller
abaad34fd2 initrd: merge branch 'th/initrd-parse-cleanup'
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/merge_requests/282
2019-12-05 13:10:13 +01:00
Thomas Haller
d68373c305 initrd: don't use inet_aton() to parse IPv4 address
inet_aton() is very accepting when parsing the address. For example,
it accepts addresses with fewer octets (interpreting the last octet
as a number in network byte order for multiple bytes). It also ignores
any trailing garbage after the first delimiting whitespace (at least,
the glibc implementation). It also accepts octets in hex and octal
notation.

For the initrd reader we want to be more forgiving than inet_pton()
and also accept addresses like 255.000.000.000 (octal notation). For
that we would want to use inet_aton(). But we should not accept all the
craziness that inet_aton() otherwise accepts.

Use nm_utils_parse_inaddr_bin_full() instead. This function implements
our way how we want to interpret IP addresses in string representation.
Under the hood, of course it also uses inet_pton() and even inet_aton(),
but it is stricter than inet_aton() and only accepts certain formats.
2019-12-05 12:36:13 +01:00
Thomas Haller
9618f1bb4b initrd: fix out-of-bounds read when detecting address family in dt_get_ipaddr_property()
The @family argument is an input and output argument.

Initially, the family is set to AF_UNSPEC, in which case the family
gets detected based on the IP address. However, we call
dt_get_ipaddr_property() multiple times to parse the netmask, the
gateway and the IP address.

That means, after the first successfull call, the @family is set to
AF_INET or AF_INET6.

Note that the previous code (in the switch block) would only check that
the family is set to AF_UNSPEC, but it would not check that the @family
matches the expected binary address length @len. Later, we then might call
nm_ip_address_new_binary() with a family and a binary address of
unexpected length.

Also drop the error checking for nm_ip_address_new_binary().
nm_ip_address_new_binary() can only fail if the prefix length is larger
than 32/128. The function has no way to validate the input arguments
beyond that and can thus not fail (short of undefined behavior).
2019-12-05 12:36:13 +01:00
Thomas Haller
e7cf22be3e initrd: use cleanup attribute in nmi_dt_reader_parse() 2019-12-05 12:36:13 +01:00
Thomas Haller
321a323df4 initrd: fix use-after-free for variable "s_gateway" in nmi_dt_reader_parse() 2019-12-05 12:36:13 +01:00
Thomas Haller
8fbf67d138 shared: add nm_utils_parse_inaddr_bin_full() to support legacy IPv4 formats as inet_aton()
inet_aton() also supports IPv4 addresses in octal (with a leading '0')
or where not all 4 digits of the address are present.

Add nm_utils_parse_inaddr_bin_full() to optionally fallback to
parse the address with inet_aton().

Note taht inet_aton() also supports all crazy formats, including
ignoring trailing garbage after a whitespace. We don't want to accept
that in general.

Note that even in legacy format we:

  - accept everything that inet_pton() would accept

  - additionally, we also accept some forms which inet_aton() would
    accept, but not all.

That means, the legacy format that we accept is a superset of
inet_pton() and a subset of inet_aton(). Which is desirable.
2019-12-05 12:36:13 +01:00
Thomas Haller
06a976358b shared: add nm_utils_addr_family_from_size() helper 2019-12-05 12:36:13 +01:00
Thomas Haller
15fb8fe26d settings/trivial: add fixme comment for creating GDBusConnection for ifcfg D-Bus interface
We really should just use the one and only main connection.
2019-12-05 12:27:13 +01:00
Thomas Haller
1367e8a1b8 initrd: generate IPv6 profiles with ipv6.addr-gen-mode=eui64
https://bugzilla.redhat.com/show_bug.cgi?id=1779389
(cherry picked from commit ea4e95ec33)
2019-12-04 18:28:47 +01:00
Thomas Haller
ea4e95ec33 initrd: generate IPv6 profiles with ipv6.addr-gen-mode=eui64
https://bugzilla.redhat.com/show_bug.cgi?id=1779389
2019-12-04 18:25:39 +01:00
Thomas Haller
c15682558c gitlab-ci: fix generating "pages" after switching to Fedora 30 for main build 2019-12-04 13:03:32 +01:00
Thomas Haller
66ea6e01c8 libnm: drop unused _nm_dbus_proxy_call_sync() helper
It's unused and:

  - we probably should avoid GDBusProxy altogether

  - we very likely should avoid blocking D-Bus calls
2019-12-03 16:32:08 +01:00
Thomas Haller
fa711ddf92 cloud-setup: mark environment variables that are supported configuration
"nm-cloud-setup" can by configured via environment variables. Mark all the
names of such variables with NMCS_ENV_VARIABLE() macro. This allows to grep
for them.

(cherry picked from commit 7b24d6e2dc)
2019-12-03 16:27:43 +01:00
Thomas Haller
dd643b06e1 cloud-setup: require to explicitly opt-in for providers via environment variable
"nm-cloud-setup" is supposed to work without configuration.

However, it (obviously) fetches data from the network you are connected to (which
might be untrusted or controlled by somebody malicious). The tool cannot
protect you against that, also because the meta data services uses HTTP and not
HTTPS. It means, you should run the tool only when it's suitable for your
environment, that is: in the right cloud.

Usually, the user/admin/distributor would know for which cloud the enable the tool.
It's also wasteful to repeatedly probe for the unavailable cloud.

So, instead disable all providers by default and require to opt-in by setting an
environment variable.

This can be conveniently done via `systemctl edit nm-cloud-provider.service` to
set Environment=. Of course, a image can also pre-deploy such am override file.

(cherry picked from commit ff816dec17)
2019-12-03 16:27:43 +01:00
Thomas Haller
e447af8d35 cloud-setup: let dispatcher script run tool only if service is enabled
We don't want that when the user installs the package, that the
dispatcher script automatically executes the tool. Instead, the user
should use `systemctl enable/disable` to control whether the service
is active (of via the timer).

Hence, let the dispatcher script check whether the service is enabled.

That leads to a different problem, that we need to make it possible for
"nm-cloud-setup.service" to be enabled in the first place. As such, add
a [Install] section and let it be wanted by NetworkManager.service. The
problem with this is that now the tool will run very early, just after
NetworkManager started. At that point, it might not yet have setup
networking. But that should be acceptable, after all, the tool either
fails to fetch meta data that early, or it succeeds. Very likely, it
will by aborted by dispatcher's restart command.

(cherry picked from commit 953e01336a)
2019-12-03 16:27:43 +01:00
Thomas Haller
0a45cc71dd cloud-setup: enable more sandboxing in systemd unit
(cherry picked from commit 667ae99f5d)
2019-12-03 16:27:43 +01:00
Thomas Haller
7b24d6e2dc cloud-setup: mark environment variables that are supported configuration
"nm-cloud-setup" can by configured via environment variables. Mark all the
names of such variables with NMCS_ENV_VARIABLE() macro. This allows to grep
for them.
2019-12-03 16:18:33 +01:00
Thomas Haller
ff816dec17 cloud-setup: require to explicitly opt-in for providers via environment variable
"nm-cloud-setup" is supposed to work without configuration.

However, it (obviously) fetches data from the network you are connected to (which
might be untrusted or controlled by somebody malicious). The tool cannot
protect you against that, also because the meta data services uses HTTP and not
HTTPS. It means, you should run the tool only when it's suitable for your
environment, that is: in the right cloud.

Usually, the user/admin/distributor would know for which cloud the enable the tool.
It's also wasteful to repeatedly probe for the unavailable cloud.

So, instead disable all providers by default and require to opt-in by setting an
environment variable.

This can be conveniently done via `systemctl edit nm-cloud-provider.service` to
set Environment=. Of course, a image can also pre-deploy such am override file.
2019-12-03 16:18:33 +01:00
Thomas Haller
953e01336a cloud-setup: let dispatcher script run tool only if service is enabled
We don't want that when the user installs the package, that the
dispatcher script automatically executes the tool. Instead, the user
should use `systemctl enable/disable` to control whether the service
is active (of via the timer).

Hence, let the dispatcher script check whether the service is enabled.

That leads to a different problem, that we need to make it possible for
"nm-cloud-setup.service" to be enabled in the first place. As such, add
a [Install] section and let it be wanted by NetworkManager.service. The
problem with this is that now the tool will run very early, just after
NetworkManager started. At that point, it might not yet have setup
networking. But that should be acceptable, after all, the tool either
fails to fetch meta data that early, or it succeeds. Very likely, it
will by aborted by dispatcher's restart command.
2019-12-03 16:18:33 +01:00
Thomas Haller
667ae99f5d cloud-setup: enable more sandboxing in systemd unit 2019-12-03 16:18:33 +01:00
Thomas Haller
b6b6c63b14 libnm: don't emit property changed "notify" signal while destructing NMClient
It seems to trip up gnome-control-center (rh #1778668). Just don't emit
anymore signals once NMClient goes down.

(cherry picked from commit 53db3a2da9)
2019-12-03 14:56:41 +01:00
Thomas Haller
53db3a2da9 libnm: don't emit property changed "notify" signal while destructing NMClient
It seems to trip up gnome-control-center (rh #1778668). Just don't emit
anymore signals once NMClient goes down.
2019-12-03 14:50:18 +01:00
Beniamino Galvani
a33387eeba core: fix IAID endianness in client-id generation test
Fixes: 6f16e524be ('core: support ipvX.dhcp-iaid properties')

https://bugzilla.redhat.com/show_bug.cgi?id=1778640
(cherry picked from commit b90f8e785e)
2019-12-02 18:02:42 +01:00
Beniamino Galvani
eacce1fd77 core: remove 'legacy_unstable_byteorder' argument from client-id helpers
The argument has no effect because the order only influences IAID
generation.

(cherry picked from commit 4fcff3f34c)
2019-12-02 18:02:41 +01:00
Beniamino Galvani
b90f8e785e core: fix IAID endianness in client-id generation test
Fixes: 6f16e524be ('core: support ipvX.dhcp-iaid properties')

https://bugzilla.redhat.com/show_bug.cgi?id=1778640
2019-12-02 17:50:41 +01:00