Commit graph

8858 commits

Author SHA1 Message Date
Thomas Haller
be1f04038d device: fix invalid assertion
Fixes: f0d40525df
2017-01-09 20:24:23 +01:00
Thomas Haller
f0d40525df device: support dynamic "connection.stable-id" in form of text-substitution
Usecase: when connecting to a public Wi-Fi with MAC address randomization
("wifi.cloned-mac-address=random") you get on every re-connect a new
IP address due to the changing MAC address.
"wifi.cloned-mac-address=stable" is the solution for that. But that
means, every time when reconnecting to this network, the same ID will
be reused. We want an ID that is stable for a while, but at a later
point a new ID should e generated when revisiting the Wi-Fi network.

Extend the stable-id to become dynamic and support templates/substitutions.
Currently supported is "${CONNECTION}", "${BOOT}" and "${RANDOM}".
Any unrecognized pattern is treated verbaim/untranslated.

"$$" is treated special to allow escaping the '$' character. This allows
the user to still embed verbatim '$' characters with the guarantee that
future versions of NetworkManager will still generate the same ID.
Of course, a user could just avoid '$' in the stable-id unless using
it for dynamic substitutions.

Later we might want to add more recognized substitutions. For example, it
could be useful to generate new IDs based on the current time. The ${} syntax
is extendable to support arguments like "${PERIODIC:weekly}".

Also allow "connection.stable-id" to be set as global default value.
Previously that made no sense because the stable-id was static
and is anyway strongly tied to the identity of the connection profile.
Now, with dynamic stable-ids it gets much more useful to specify
a global default.

Note that pre-existing stable-ids don't change and still generate
the same addresses -- unless they contain one of the new ${} patterns.
2017-01-09 14:50:33 +01:00
Thomas Haller
21ae09c1cc core: add assertions for network_id/stable_type
We require a network-id. Assert that it is set.

Also, we encode the stable-id as uint8. Thus, add
an assertion that we don't use more then 254 IDs.

If we ever make use of stable-type 255, we must extend
the encoding to allow for more values. The assertion
is there to catch that.
2017-01-09 14:50:33 +01:00
Thomas Haller
dea3c49ce2 utils: add nm_utils_get_boot_id() util to read "/proc/sys/kernel/random/boot_id" 2017-01-09 14:50:33 +01:00
Beniamino Galvani
ae5adc9e21 vpn: add device route to VPN gateway if parent has no gateway
We set a dedicated route to reach the VPN gateway only if the parent
device has a gateway. If the parent device doesn't have a gateway (for
example in case of GSM connections) and the VPN gets the default
route, the VPN gateway will be contacted through the VPN itself, which
obviously doesn't work.

Set up a device route if the parent device doesn't provide a gateway.

https://bugzilla.redhat.com/show_bug.cgi?id=1403660
2017-01-07 15:05:03 +01:00
Lubomir Rintel
234a72cb91 supplicant: allow accessing certs and keys in PKCS#11 tokens 2017-01-06 15:56:11 +01:00
Lubomir Rintel
34b4a0e561 supplicant: allow specifying a replacement string for hidden items
Makes it possible to hide only a part of a value (such as inline PIN),
but still log useful info.
2017-01-06 15:56:11 +01:00
Lubomir Rintel
faed200b2b keyfile: add support for pkcs11: URI scheme 2017-01-06 15:56:11 +01:00
Lubomir Rintel
260563a7d9 all: use nm_utils_is_valid_iface_name() 2017-01-06 15:11:56 +01:00
Thomas Haller
f779c51f87 shared: move nm_utils_strbuf_*() helper to shared/nm-utils 2017-01-05 11:13:17 +01:00
Thomas Haller
f4fb4d271f keyfile/tests: add test for reading dcb connection
Catches previously fixed memleak in read_array_of_uint()
2017-01-05 11:13:17 +01:00
Thomas Haller
a8afbb7299 systemd: merge branch systemd into master 2017-01-04 15:55:46 +01:00
Thomas Haller
17820bf42a systemd: update code from upstream
This is a direct dump from systemd git on 2017-01-04, git commit
6a47fd894d601f7e8e88dec4cb35dfb7d7c15eff.

======

SYSTEMD_DIR=../systemd
COMMIT=6a47fd894d601f7e8e88dec4cb35dfb7d7c15eff

(
  cd "$SYSTEMD_DIR"
  git checkout "$COMMIT"
  git reset --hard
  git clean -fdx
)

git ls-files :/src/systemd/src/ | xargs -d '\n' rm -f

nm_copy_sd() {
    mkdir -p "./src/systemd/$(dirname "$1")"
    cp "$SYSTEMD_DIR/$1" "./src/systemd/$1"
}

nm_copy_sd "src/basic/alloc-util.c"
nm_copy_sd "src/basic/alloc-util.h"
nm_copy_sd "src/basic/async.h"
nm_copy_sd "src/basic/escape.c"
nm_copy_sd "src/basic/escape.h"
nm_copy_sd "src/basic/ether-addr-util.c"
nm_copy_sd "src/basic/ether-addr-util.h"
nm_copy_sd "src/basic/extract-word.c"
nm_copy_sd "src/basic/extract-word.h"
nm_copy_sd "src/basic/fileio.c"
nm_copy_sd "src/basic/fileio.h"
nm_copy_sd "src/basic/fd-util.c"
nm_copy_sd "src/basic/fd-util.h"
nm_copy_sd "src/basic/fs-util.c"
nm_copy_sd "src/basic/fs-util.h"
nm_copy_sd "src/basic/hash-funcs.c"
nm_copy_sd "src/basic/hash-funcs.h"
nm_copy_sd "src/basic/hashmap.c"
nm_copy_sd "src/basic/hashmap.h"
nm_copy_sd "src/basic/hexdecoct.c"
nm_copy_sd "src/basic/hexdecoct.h"
nm_copy_sd "src/basic/hostname-util.c"
nm_copy_sd "src/basic/hostname-util.h"
nm_copy_sd "src/basic/in-addr-util.c"
nm_copy_sd "src/basic/in-addr-util.h"
nm_copy_sd "src/basic/io-util.c"
nm_copy_sd "src/basic/io-util.h"
nm_copy_sd "src/basic/list.h"
nm_copy_sd "src/basic/log.h"
nm_copy_sd "src/basic/macro.h"
nm_copy_sd "src/basic/mempool.h"
nm_copy_sd "src/basic/mempool.c"
nm_copy_sd "src/basic/parse-util.c"
nm_copy_sd "src/basic/parse-util.h"
nm_copy_sd "src/basic/path-util.c"
nm_copy_sd "src/basic/path-util.h"
nm_copy_sd "src/basic/prioq.h"
nm_copy_sd "src/basic/prioq.c"
nm_copy_sd "src/basic/random-util.c"
nm_copy_sd "src/basic/random-util.h"
nm_copy_sd "src/basic/refcnt.h"
nm_copy_sd "src/basic/set.h"
nm_copy_sd "src/basic/signal-util.h"
nm_copy_sd "src/basic/siphash24.c"
nm_copy_sd "src/basic/siphash24.h"
nm_copy_sd "src/basic/socket-util.c"
nm_copy_sd "src/basic/socket-util.h"
nm_copy_sd "src/basic/sparse-endian.h"
nm_copy_sd "src/basic/stdio-util.h"
nm_copy_sd "src/basic/string-table.c"
nm_copy_sd "src/basic/string-table.h"
nm_copy_sd "src/basic/string-util.c"
nm_copy_sd "src/basic/string-util.h"
nm_copy_sd "src/basic/strv.c"
nm_copy_sd "src/basic/strv.h"
nm_copy_sd "src/basic/time-util.c"
nm_copy_sd "src/basic/time-util.h"
nm_copy_sd "src/basic/umask-util.h"
nm_copy_sd "src/basic/unaligned.h"
nm_copy_sd "src/basic/utf8.c"
nm_copy_sd "src/basic/utf8.h"
nm_copy_sd "src/basic/util.c"
nm_copy_sd "src/basic/util.h"
nm_copy_sd "src/libsystemd-network/arp-util.c"
nm_copy_sd "src/libsystemd-network/arp-util.h"
nm_copy_sd "src/libsystemd-network/dhcp6-internal.h"
nm_copy_sd "src/libsystemd-network/dhcp6-lease-internal.h"
nm_copy_sd "src/libsystemd-network/dhcp6-network.c"
nm_copy_sd "src/libsystemd-network/dhcp6-option.c"
nm_copy_sd "src/libsystemd-network/dhcp6-protocol.h"
nm_copy_sd "src/libsystemd-network/dhcp-identifier.c"
nm_copy_sd "src/libsystemd-network/dhcp-identifier.h"
nm_copy_sd "src/libsystemd-network/dhcp-internal.h"
nm_copy_sd "src/libsystemd-network/dhcp-lease-internal.h"
nm_copy_sd "src/libsystemd-network/dhcp-network.c"
nm_copy_sd "src/libsystemd-network/dhcp-option.c"
nm_copy_sd "src/libsystemd-network/dhcp-packet.c"
nm_copy_sd "src/libsystemd-network/dhcp-protocol.h"
nm_copy_sd "src/libsystemd-network/lldp-internal.h"
nm_copy_sd "src/libsystemd-network/lldp-neighbor.c"
nm_copy_sd "src/libsystemd-network/lldp-neighbor.h"
nm_copy_sd "src/libsystemd-network/lldp-network.c"
nm_copy_sd "src/libsystemd-network/lldp-network.h"
nm_copy_sd "src/libsystemd-network/network-internal.c"
nm_copy_sd "src/libsystemd-network/network-internal.h"
nm_copy_sd "src/libsystemd-network/sd-dhcp6-client.c"
nm_copy_sd "src/libsystemd-network/sd-dhcp6-lease.c"
nm_copy_sd "src/libsystemd-network/sd-dhcp-client.c"
nm_copy_sd "src/libsystemd-network/sd-dhcp-lease.c"
nm_copy_sd "src/libsystemd-network/sd-ipv4ll.c"
nm_copy_sd "src/libsystemd-network/sd-ipv4acd.c"
nm_copy_sd "src/libsystemd-network/sd-lldp.c"
nm_copy_sd "src/libsystemd/sd-event/sd-event.c"
nm_copy_sd "src/libsystemd/sd-id128/id128-util.c"
nm_copy_sd "src/libsystemd/sd-id128/id128-util.h"
nm_copy_sd "src/libsystemd/sd-id128/sd-id128.c"
nm_copy_sd "src/shared/dns-domain.c"
nm_copy_sd "src/shared/dns-domain.h"
nm_copy_sd "src/systemd/_sd-common.h"
nm_copy_sd "src/systemd/sd-dhcp6-client.h"
nm_copy_sd "src/systemd/sd-dhcp6-lease.h"
nm_copy_sd "src/systemd/sd-dhcp-client.h"
nm_copy_sd "src/systemd/sd-dhcp-lease.h"
nm_copy_sd "src/systemd/sd-event.h"
nm_copy_sd "src/systemd/sd-ndisc.h"
nm_copy_sd "src/systemd/sd-id128.h"
nm_copy_sd "src/systemd/sd-ipv4acd.h"
nm_copy_sd "src/systemd/sd-ipv4ll.h"
nm_copy_sd "src/systemd/sd-lldp.h"
2017-01-04 15:46:38 +01:00
Thomas Haller
2a14a1c7bd device: drop unused hook nm_device_notify_new_device_added()
The only implementations were there for tracking the parent device.
That is now donw via nm_device_parent_*(), parent_changed_notify()
and _parent_notify_changed().
2017-01-04 14:18:01 +01:00
Thomas Haller
992beb4f34 device: move tracking of peer device from NMDeviceVeth to NMDevice 2017-01-04 14:18:01 +01:00
Thomas Haller
6df235df74 device: move tracking of parent device from NMDeviceVxlan to NMDevice 2017-01-04 14:18:01 +01:00
Thomas Haller
b8bfdd99af device: move tracking of parent device from NMDeviceVlan to NMDevice 2017-01-04 14:18:01 +01:00
Thomas Haller
31682f7a3b device: move tracking of parent device from NMDeviceMacvlan to NMDevice 2017-01-04 14:18:01 +01:00
Thomas Haller
3be1811a7d device: move tracking of parent device from NMDeviceIPTunnel to NMDevice 2017-01-04 14:18:01 +01:00
Thomas Haller
f703f4bb65 device: track parent device in NMDevice
Multiple subclasses have a parent/link interface (NMDeviceIPTunnel,
NMDeviceVlan). Tracking the parent interface properly is midly
complicated to get right. So, instead of repeating it in each
subclass, track it in the parent device.
2017-01-04 14:18:01 +01:00
Thomas Haller
bd09decf16 device: only emit notify::ifindex when the value actually changes 2017-01-04 14:18:01 +01:00
Thomas Haller
78017f1bdc device: cleanup setting of ip-iface
Move the updating/setting of the ip-ifindex/ip-iface to one place.

Properties should be for the most part immutable/read-only, and only
at particular places modified. That way, it's easier to track who
changes a property.

Also, add a logging line with "ip-ifname" prefix.
2017-01-04 14:18:01 +01:00
Thomas Haller
87076d9345 platform: use wrappers for if_nametoindex() and if_indextoname() 2017-01-04 14:18:01 +01:00
Thomas Haller
e8d5a8356c platform: add wrappers for if_nametoindex() and if_indextoname() 2017-01-04 14:18:01 +01:00
Thomas Haller
d481489804 device: mark _nm_device_log_self_to_device() as unused 2017-01-04 14:18:01 +01:00
Thomas Haller
15d8634b9a trivial: rename reload_tun_properties() to update_properties()
That is what the function is called in other device implementations.
2017-01-04 14:18:01 +01:00
Thomas Haller
0eb4b404f2 device: have realize_start_notify() call link_changed()
Most implementations of realize_start_notify() do the same
for link_changed().

Let NMDevice's base implementation of realize_start_notify() call
link_changed() -- which by default does notthing. This allows subclasses
to only overwrite link_changed().
2017-01-04 14:18:01 +01:00
Thomas Haller
0bb84d1b85 device/ethernet: refactor loading s390 subchannels during realize
Instead of overwriting constructed(), update the s390 subchannels via
realize_start_notify(). This makes more sense and is also more similar
to what other device implementations do.
2017-01-04 14:18:01 +01:00
Thomas Haller
7e4120860f device/vlan: update vlan properties when link changes
For example, when the parent link is moved to a different netns,
we must update (clear) the vlan's parent.
2017-01-04 14:18:01 +01:00
Thomas Haller
a2dce28fc8 device: do nothing in NMDevice's link_changed() function
All implementations of link_changed() chain up to NMDevice's
base implementation. Thus, everybody wants to set the carrier.

Refactor the code to set the carrier outside of link_changed().
2017-01-04 14:18:01 +01:00
Thomas Haller
c2bc2fbac3 device: make @pllink argument in link_changed() function const 2017-01-04 14:18:01 +01:00
Thomas Haller
d9efe73fed wifi: fix nm_wifi_ap_get_id() to parse the ID as guint64 from the exported path 2017-01-04 14:05:27 +01:00
Thomas Haller
49ec12bab3 wifi: implement NM_DEVICE_WIFI_ACCESS_POINTS property getter via ap_list_get_sorted_paths()
That way, we get the list sorted. Also, it saves several allocations of
temporary variables.
2017-01-04 14:05:27 +01:00
Thomas Haller
7c601ab8ca wifi: refactor getting sorted AP list
Instead of creating a GSList use an array. That way, we save
the allocation and free of an GSList instance. Also, avoid
cloning the export path. It is stable.
2017-01-04 14:05:27 +01:00
Thomas Haller
674f5f24af dns: fix memleak in _get_config_variant()
There are cases where we wouldn't call g_variant_builder_end()
on @strv_builder and @entry_builder.

Fixes: e3c67177ac
2017-01-04 14:05:22 +01:00
Thomas Haller
2486dc5c45 exported-object: don't use "/0" for D-Bus paths but start with 1
Only use non-negative index values for the D-Bus path. This is purely
cosmetical, as the actual path value should be treated as opaque. Still,
avoid using 0 and start counting at 1.
2017-01-03 15:46:59 +01:00
Thomas Haller
cd1466190e exported-object: don't clone class_export_path for counter cache
It's a static string anyway.
2017-01-03 15:46:10 +01:00
Thomas Haller
8006045d0d exported-object: make export_path D-Bus counter 64 bit
An overflow of the 32 bit guint is possible and rather ugly
because the D-Bus path should be unique and not repeat.
Avoid that by extending the counter to 64 bit.
2017-01-03 15:42:53 +01:00
Thomas Haller
32dd257d31 exported-object: use NM_EXPORT_PATH_NUMBERED() macro 2017-01-03 15:40:17 +01:00
Thomas Haller
20431a4c16 exported-object: add NM_EXPORT_PATH_NUMBERED() macro 2017-01-03 15:38:49 +01:00
Thomas Haller
ca3cb90fc2 ifcfg-rh: refactor svOpenFile() to use nm_utils_fd_get_contents()
Use nm_utils_fd_get_contents() which has precisely all the steps implemented
to read data from a file descriptor.

There is a downside to this: previously you could compile shvar.c without
nm-core-utils.c. Now, the ifcfg implementation gained a dependency
on NM core utils. That would matter if we one day would like to build
shvar.c without core NetworkManager utils (but that is not planned).
2017-01-02 17:00:52 +01:00
Thomas Haller
1bfbe9383f ifcfg-rh: add assertions for handling lines in "shvar.c"
Just assert that the shvarLine instances are in a valid state.
2017-01-02 17:00:52 +01:00
Thomas Haller
de9e78cc50 ifcfg-rh: refactor handling of lines in shvar.c
Pre-process each line and parse the key and value.
Thus, keep the key already prepared.

The point is to do the parsing early and keep the
data in a more suitable format in shvarLine.
2017-01-02 17:00:51 +01:00
Thomas Haller
a6a39af8ca ifcfg-rh: refactor searching and replacing shvarLine in svhar.c
The shlist_delete*() are now named wrong, as they don't delete
the list entry. Anyway, they have only one caller, it's clearer
to inline them.

This way, during svSetValue() we need to iterate the entire
list only once.
2017-01-01 22:16:44 +01:00
Beniamino Galvani
8adbeb821e manager: better handle failures in AddAndActivateConnection
nm_settings_add_connection_dbus() invokes the activation_add_done()
callback with a NULL @new_connection in case of error: add a check to
prevent a crash.
2016-12-23 14:20:15 +01:00
Beniamino Galvani
30a1e17cc0 policy: don't apply DNS configuration for non-active devices
Don't apply DNS configuration of non-active devices (for example
unmanaged ones which have a non-empty DNS configuration read from a
DHCP lease).

https://bugzilla.redhat.com/show_bug.cgi?id=1405431
2016-12-21 09:37:22 +01:00
Dan Williams
0c5aa6e48b wifi: don't request new PSK for locally-generated WLAN_REASON_DISASSOC_DUE_TO_INACTIVITY errors
This usually indicates that the driver missed beacons from the AP, due to driver bugs
or faulty power-save management.  It doesn't mean that the PSK is wrong.
2016-12-20 10:06:42 -06:00
Thomas Haller
4c853e80f0 ethernet: cancel get-secrets request in ethernet device
Same as for NMDeviceWifi.
2016-12-20 15:53:41 +01:00
Thomas Haller
e6bf047ccc wifi: cancel get-secrets request in wifi device
I got an assertion failure:
    wifi_secrets_cb: assertion 'nm_device_get_state (device) == NM_DEVICE_STATE_NEED_AUTH' failed
with backtrace [1].

I think, we have to keep track of the pending secrets request
and cancel it when the device state changes.

[1]:
    #0  0x00007fad615a7a21 _g_log_abort (libglib-2.0.so.0)
    #1  0x00007fad615a8e2d g_logv (libglib-2.0.so.0)
    #2  0x00007fad615a8f8f g_log (libglib-2.0.so.0)
    #3  0x000055e45e3fc718 get_secrets_cb (NetworkManager)
    #4  0x000055e45e3dfada _get_secrets_info_callback (NetworkManager)
    #5  0x000055e45e460d8d req_complete_release (NetworkManager)
    #6  0x000055e45e462a7f _con_get_try_complete_early (NetworkManager)
    #7  0x000055e45e462cb6 request_start (NetworkManager)
    #8  0x00007fad6159e8e7 g_idle_dispatch (libglib-2.0.so.0)
    #9  0x00007fad615a1e42 g_main_dispatch (libglib-2.0.so.0)
    #10 0x00007fad615a21c0 g_main_context_iterate (libglib-2.0.so.0)
    #11 0x00007fad615a24e2 g_main_loop_run (libglib-2.0.so.0)
    #12 0x000055e45e2bf561 main (NetworkManager)
    #13 0x00007fad60d97401 __libc_start_main (libc.so.6)
    #14 0x000055e45e2bfc6a _start (NetworkManager)
2016-12-20 15:53:41 +01:00
Thomas Haller
bd89c8a924 act-request: allow omitting the @self argument in nm_act_request_cancel_secrets()
Previously, we would require a @self argument and the @call_id in
nm_act_request_cancel_secrets(), although the @call_id already has
a pointer to @self.
In principle that is not necessary, but it makes the API a bit
more robust as you need to care about the lifetime of the @req
as well.

However it is a bit inconvenient, because it requires that caller to
track both the activation request and the call-id.

Now, allow nm_act_request_get_secrets() to instruct the call-id to
take an additional reference to @self. Later on, we would allow to omit
the argument during cancelling. We only allow this, if the call-id
takes a reference to @self.
2016-12-20 15:53:41 +01:00