Commit graph

22423 commits

Author SHA1 Message Date
Thomas Haller
a3a8583c31 cli/wireguard: add import functionality for WireGuard
Support importing ".conf" files as `wg-quick up` supports it.

`wg-quick` parses several options under "[Interface]" and
passes the remainder to `wg setconf`.

The PreUp/PreDown/PostUp/PostDown options are of course not supported.

"Table" for the moment behaves different.
2019-03-07 17:54:25 +01:00
Thomas Haller
e46ba01867 libnm: rename and expose nm_utils_base64secret_decode() in libnm
A NetworkManager client requires an API to validate and decode
a base64 secret -- like it is used by WireGuard. If we don't have
this as part of the API, it's inconvenient. Expose it.

Rename it from _nm_utils_wireguard_decode_key(), to give it a more
general name.

Also, rename _nm_utils_wireguard_normalize_key() to
nm_utils_base64secret_normalize(). But this one we keep as internal
API. The user will care more about validating and decoding the base64
key. To convert the key back to base64, we don't need a public API in
libnm.

This is another ABI change since 1.16-rc1.
2019-03-07 17:54:25 +01:00
Thomas Haller
f3ac8c6fe8 libnm: fix return value for nm_wireguard_peer_append_allowed_ip()
According to documentation, this returns a boolean indicating whether
the value is valid. Previously, it was indicating whether the instance
was modified.

Together with the @accept_invalid argument, both behaviors make some
sense. Change it, because that is also how the other setters behave.
2019-03-07 17:54:25 +01:00
Thomas Haller
8ae9aa2428 libnm: change nm_wireguard_peer_set_endpoint() API to allow validation
This is an API break since 1.16-rc1.

Similar to previous commit.
2019-03-07 17:54:25 +01:00
Thomas Haller
7962653918 libnm: change nm_wireguard_peer_set_public_key() API to allow validation
This is an API break since 1.16-rc1.

Similar to previous commit.
2019-03-07 17:54:25 +01:00
Thomas Haller
d7bc1750c1 libnm: change nm_wireguard_peer_set_preshared_key() API to allow validation
This is an API break since 1.16-rc1.

The functions like _nm_utils_wireguard_decode_key() are internal API
and not accessible to a libnm user. Maybe this should be public API,
but for now it is not.

That makes it cumbersome for a client to validate the setting. The client
could only reimplement the validation (bad) or go ahead and set invalid
value.

When setting an invalid value, the user can afterwards detect it via
nm_wireguard_peer_is_valid(), but at that point, it's not clear which
exact property is invalid.

First I wanted to keep the API conservative and not promissing too much.
For example, not promising to do any validation when setting the key.
However, libnm indeed validates the key at the time of setting it
instead of doing lazy validation later. This makes sense, so we can
keep this promise and just expose the validation result to the caller.

Another downside of this is that the API just got more complicated.
But it not provides a validation API, that we previously did not have.
2019-03-07 17:54:25 +01:00
Thomas Haller
fea0f4a5ea cli: fix completion for nmcli connection import
If we already specified "type" or "file", don't offer it for
completion again.

  $ nmcli connection import type openvpn <TAB>
  file  type
2019-03-07 17:54:25 +01:00
Thomas Haller
62b939de4e cli: add nmc_complete_strv() which takes a string array for completion that may contain NULL
This will allow for a convenient calling pattern when some elements
should be printed optionally.
2019-03-07 17:54:25 +01:00
Thomas Haller
4e399d82ac platform/wireguard: fix WGPEER_A_LAST_HANDSHAKE_TIME to use int64 typed timespec structure
The netlink API changed for WireGuard. Adjust for that.

https://git.zx2c4.com/WireGuard/commit/?id=c870c7af53f44a37814dfc76ceb8ad88e290fcd8
2019-03-07 17:54:25 +01:00
Thomas Haller
7451a6a649 core: use nm_utils_memeqzero_secret() for printing WireGuard key 2019-03-07 17:54:25 +01:00
Jason A. Donenfeld
6234e41153 shared: add nm_utils_memeqzero_secret()
[thaller@redhat.com: the code is effectively key_is_zero() by
  <Jason@zx2c4.com> (LGPL2.1+). I took it into our source tree
  and adjusted it to our style]
2019-03-07 17:54:25 +01:00
Thomas Haller
78dccb8bb9 wireguard: accept all-zero private-key, public-key and preshared-key
- For PSK, an all-zero PSK means to don't do symmetric encryption. As such,
  at first it seems a bit odd when the user sets

      - preshared-key-flags != "4 (not-required)"

      - preshared-key = AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=

  Here the user indicates that a PSK is required, but then provides an
  all-zero PSK that effectively disables it. Still, we should not reject
  such a configuration. This has the benefit that it allos the user for
  being prompted for a PSK, only to disable it by entering the all-zero key.

- For the private-key (and consequently the public-key), "public-key-flags=4"
  is rejected by libnm. A private key is always required for NetworkManager to
  configure the link. However, let's not care for all-zero keys either. If the user
  configures that, we just set that key. It's a valid setting as far as WireGuard
  (the kernel module) is concerned, so we shouldn't reject it.
2019-03-07 17:54:25 +01:00
Lubomir Rintel
9bcd634cbf utils: obey modprobe blacklist
If the user blacklisted a module we should not override their choice.

https://github.com/NetworkManager/NetworkManager/pull/311
2019-03-07 15:49:40 +01:00
Lubomir Rintel
3f75d6a9a6 merge: branch 'lr/rpm-madness'
https://github.com/NetworkManager/NetworkManager/pull/310
2019-03-07 15:29:09 +01:00
Lubomir Rintel
a1e6afc0b2 contrib/rpm: drop ldconfig scriptlets from Fedora 28+
In newer RPM file triggers in glibc package take care of this. While
these scriptlets whould do no harm there, removing them yields a tiny
theoretical performance improvement.
2019-03-07 15:28:56 +01:00
Lubomir Rintel
3326a87953 Revert "contrib/rpm: use "%ldconfig_scriptlets" for Fedora 30+"
This is utterly pointless. %ldconfig_scriptlets expand to an empty
string on Fedora 28+.

This reverts commit ad836541cb.
2019-03-07 15:28:56 +01:00
Lubomir Rintel
c10e61e21d contrib/rpm: drag in vala tools by the binary
The package's called either "vala" or "vala-tools". Sigh.
2019-03-07 15:28:56 +01:00
Lubomir Rintel
f8dde7014b Revert "contrib/rpm: require "vala" instead of "vala-tools" for Fedora 30+"
This is just plain ugly.

This reverts commit 0024485b5a.
2019-03-07 15:28:56 +01:00
Lubomir Rintel
27418b1851 Revert "contrib/rpm: remove Group tag for Fedora 30+"
Group tag is not required, though is harmless. We could either remove it,
or keep it, but there's absolutely no excuse for conditionalizing it.

Let's keep it for now, because rpm -i still prints it.

This reverts commit 1feeba6f1a.
2019-03-07 15:28:56 +01:00
Lubomir Rintel
f8578ddc2e contrib/checkpatch: check that we refer to commits properly 2019-03-07 10:55:30 +01:00
Lubomir Rintel
d551a0893e platform/linux: fix detection of IFA_FLAGS support
The condition got accidentally reversed, which means we're always
undecided and thus wrongly assuming support and never being able to set
any addresses.

This would bother the few that are struck with 3.4 android kernels. Very
few indeed, given this got unnoticed since 1.10.

Fixes: 8670aacc7c ('platform: cleanup detecting kernel support for IFA_FLAGS and IPv6LL')
2019-03-07 10:17:42 +01:00
Marco Trevisan (Treviño)
73005fcf5b nm: Fix syntax on introspection annotations
Various annotations were added using multiple colons, while only one has
to be added or g-ir-introspect will consider them part of the description

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/merge_requests/94
2019-03-07 10:04:41 +01:00
Thomas Haller
d804ad8119 contrib/rpm: merge branch 'th/contrib-rpm-f30'
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/merge_requests/93
2019-03-07 09:55:08 +01:00
Thomas Haller
1feeba6f1a contrib/rpm: remove Group tag for Fedora 30+
https://fedoraproject.org/wiki/Changes/Remove_Group_Tag

62adcbc888
2019-03-07 09:53:50 +01:00
Thomas Haller
ad836541cb contrib/rpm: use "%ldconfig_scriptlets" for Fedora 30+
https://fedoraproject.org/wiki/Changes/RemoveObsoleteScriptlets

5c6421bc88
2019-03-07 09:53:50 +01:00
Thomas Haller
0024485b5a contrib/rpm: require "vala" instead of "vala-tools" for Fedora 30+
The "vala-tools" package was merged into "vala" [1]. While "vala"
now "Provides: vala-tools", update the build requirements for
Fedora 30 and newer.

[1] 82b21cc302

f6c878a04a
2019-03-07 09:53:50 +01:00
Beniamino Galvani
d2e95856e9 wifi-p2p: fix failed assertion when releasing supplicant interface
Fix the following failed assertion:

  <debug> device[0x11dfec0] (p2p-dev-wlp4s0): P2P: Releasing WPA supplicant interface.
  <debug> supplicant: setting WFD IEs for P2P operation
  (../src/devices/nm-device.c:14769):_set_state_full: runtime check failed: (priv->in_state_changed == FALSE)
  <info>  device (p2p-dev-wlp4s0): state change: unmanaged -> unavailable (reason 'supplicant-failed', sys-iface-state: 'external')
  <debug> device[0x11dfec0] (p2p-dev-wlp4s0): add_pending_action (1): 'waiting-for-supplicant'

supplicant_interfaces_release() can be called during a state change
(for example by device_state_changed()) and so it can't trigger
another state change.

nm_device_wifi_p2p_set_mgmt_iface() now doesn't force an immediate
state change and only schedules a recheck-available. This means that
the device can be in an available state without
priv->mgmt_iface. Adapt the code to deal gracefully with that
situation. In particular, we need to cancel pending timeout sources
(priv->sup_timeout_id) that use the management interface.

Fixes: 27bc2cb22a

https://github.com/NetworkManager/NetworkManager/pull/302
2019-03-06 08:03:54 +01:00
Thomas Haller
d8070c7a14 build: fix build dependency for generating libnm enum headers before building nm-online
CC       clients/nm_online-nm-online.o
    In file included from ./shared/nm-default.h:311:0,
                     from clients/nm-online.c:34:
    ./libnm/NetworkManager.h:60:10: fatal error: nm-enum-types.h: No such file or directory
     #include "nm-enum-types.h"
              ^~~~~~~~~~~~~~~~~
2019-03-05 10:18:42 +01:00
Thomas Haller
9b56d760af core,wireguard: merge branch 'th/wireguard-routes'
https://github.com/NetworkManager/NetworkManager/pull/305
2019-03-05 09:54:56 +01:00
Thomas Haller
626beaf83e wireguard: implement direct "peer-routes" for WireGuard allowed-ips ranges 2019-03-05 09:53:21 +01:00
Thomas Haller
d719ad31f0 wireguard: add "peer-routes" setting for WireGuard profiles
This setting is not yet implemented.

This adds new API for 1.16.0 and is an ABI break since 1.16-rc1.
2019-03-05 09:53:21 +01:00
Thomas Haller
d5e93ae613 wireguard: add "mtu" setting for WireGuard profiles
This adds new API for 1.16.0 and is an ABI break since 1.16-rc1.
2019-03-05 09:53:21 +01:00
Thomas Haller
096247e60b device: expose nm_device_ip_config_new() as internal API 2019-03-05 09:53:21 +01:00
Thomas Haller
5e71f01605 device: merge stage3 and stage4 ip-config function for IPv4 and IPv6 2019-03-05 09:53:21 +01:00
Thomas Haller
03b708f7f7 device/trivial: rename wwan_ip_config to dev2_ip_config
dev2_ip_config (formerly wwan_ip_config) is only set by nm_device_set_dev2_ip_config()
(formerly nm_device_set_wwan_ip_config()), which is only called by NMDeviceModem.

For NMDeviceWireGuard we will also inject additional configuration
in the parent class. Rename and give it a wider purpose. The new name
merely indicates that this IP configuration is injected by a subclass
of NMDevice.
2019-03-05 09:53:21 +01:00
Thomas Haller
99abcf0105 device: merge IPv4 and IPv6 variant of nm_device_set_wwan_ip_config() 2019-03-05 09:53:21 +01:00
Thomas Haller
ee63e008d1 device: avoid setting an empty dev_ip_config_4 for activate_schedule_ip_config_result()
An empty NMIP4Config instance should have the same effect as %NULL.
Don't create it.
2019-03-05 09:53:21 +01:00
Thomas Haller
2f88523eef device/trivial: rename dev_ip4_config field
So that it follows the naming pattern of similar fields,
that exist in a variant for IPv4 and IPv6.
2019-03-05 09:53:21 +01:00
Thomas Haller
515e003eff device: unify IPv4 and IPv6 handling of IP state of device 2019-03-05 09:53:21 +01:00
Thomas Haller
ca14df5619 device/trivial: rename ip-state fields in NMDevicePrivate
Now they follow the naming pattern of ending in "_4" / "_6".
We will merge them and alias them to an "_x" array, like done
for similar fields.
2019-03-05 09:53:21 +01:00
Thomas Haller
2076550d8f device/trivial: rename IpState to NMDeviceIPState
It will be moved to a header file.
2019-03-05 09:53:21 +01:00
Thomas Haller
1585eaf473 device: unify IPv4 and IPv6 device methods for IP configs
It is preferable to treat IPv4 and IPv6 in a similar manner.
This moves the places where we differ down the call-stack.

It also make it clearer how IPv6 behaves differently. I think this
is a bug, but leave it for now.

+         /* If IP had previously failed, move it back to IP_CONF since we
+          * clearly now have configuration.
+          */
+         if (priv->ip6_state == IP_FAIL)
+              _set_ip_state (self, AF_INET6, IP_CONF);
2019-03-05 09:53:21 +01:00
Thomas Haller
2be022ad68 core: use nm_connection_get_setting_ip_config() helper 2019-03-05 09:53:21 +01:00
Thomas Haller
02964c22a6 libnm-core: add nm_connection_get_setting_ip_config() helper 2019-03-05 09:53:21 +01:00
Thomas Haller
be107c75c9 core: accept %NULL as source argument for nm_utils_ipx_address_clear_host_address()
Just for convenience.
2019-03-05 09:53:21 +01:00
Beniamino Galvani
d943ea415f merge: branch 'bg/nmcli-agent-fixes'
https://github.com/NetworkManager/NetworkManager/pull/307
2019-03-05 09:42:20 +01:00
Beniamino Galvani
22c87f0df8 clients: fix GVariantBuilder memory leak
Fixes: acf86f68b3
2019-03-05 09:21:07 +01:00
Beniamino Galvani
91a644d4a5 clients: fix i/o stream memory leaks
Fixes: 5a0d67f739
2019-03-04 18:09:46 +01:00
Beniamino Galvani
082ae508a0 clients: fix keyfile string memory leak
The return value of g_key_file_get_string() was leaked.

Fixes: 5a0d67f739
2019-03-04 18:09:46 +01:00
Beniamino Galvani
b57a3a4cc6 clients: fix double free
@secrets is unreferenced at the end of request_secrets_from_ui() and
so try_spawn_vpn_auth_helper() must take a reference to it.

Fixes: 1a0fc8d437
2019-03-04 18:08:08 +01:00