Commit graph

10664 commits

Author SHA1 Message Date
Lubomir Rintel
c898969110 test-common: drop unused variables
src/platform/tests/test-common.c:1500:17: error: unused variable 'dev' [-Werror,-Wunused-variable]
                gs_free char *dev = NULL;
                              ^
src/platform/tests/test-common.c:1501:17: error: unused variable 'local' [-Werror,-Wunused-variable]
                gs_free char *local = NULL, *remote = NULL;
                              ^
src/platform/tests/test-common.c:1501:32: error: unused variable 'remote' [-Werror,-Wunused-variable]
                gs_free char *local = NULL, *remote = NULL;
                                             ^
Fixes: bd8ab54b8e
2018-04-23 08:26:41 +02:00
Lubomir Rintel
40ce80cb50 auth-manager: drop an unused variable
src/nm-auth-manager.c:673:24: error: unused variable 'error_disposing' [-Werror,-Wunused-variable]
        gs_free_error GError *error_disposing = NULL;
                              ^

Fixes: 2ea2df3184
2018-04-23 08:26:05 +02:00
Lubomir Rintel
30814288c9 acd-manager: drop an unused variable
src/devices/nm-acd-manager.c:299:16: error: unused variable 'timeout_str' [-Werror,-Wunused-variable]
        gs_free char *timeout_str = NULL;
                      ^
Fixes: 9f79ae685d
2018-04-23 08:24:17 +02:00
Beniamino Galvani
805cbe7439 ifcfg-rh: fix parse of tc qdiscs and filters
Fixes: 902bbfdb18
2018-04-21 22:09:05 +02:00
Beniamino Galvani
fa7af768a9 ifcfg-rh: add tests for tc config 2018-04-21 22:09:05 +02:00
Beniamino Galvani
edcb80d1b0 manager: fix assertions when activating VPNs
_new_active_connection() can be called with both a device and a
specific object set when activating secondaries.

Fixes: 10753c3616
2018-04-20 16:26:26 +02:00
Beniamino Galvani
e732403a9b manager: fix activating VPN connections
nm_manager_activate_connection() is also called for VPNs.

Fixes: 3e3d53ce69
2018-04-20 16:26:26 +02:00
Thomas Haller
164e6b9e6b device/connectivity: fix periodic checks that take a long time to complete
It can easily happen that connectivity checks take a long time to
complete (up to 20 seconds, when they time out).

So, before, during the first 20 seconds no connectivity checks would
return and bump the periodic interval. That meant, for the first 20
seconds we would each second schedule a periodic check.
Then, the checks start timing out, each one second apart as we scheduled
them. Previously, during each completion of the checks, we would bump
the interval every second.

Fix that two ways:

1) when the timer expires, also check whether there are still uncomplete
periodic checks. If there are, already bump the interval at that point.

2) at the same time, when this happens mark the handle so that when
they later complete, that they no longer cause another increase of the
interval (no-bump).

Now the bumping is done either by the timeout, or by the completion of
the request. Whatever happens first.
2018-04-20 15:08:23 +02:00
Thomas Haller
ccca5778ba device/connectivity: fix periodic connectivity checks to always reschedule the timer
In concheck_periodic_timeout_cb(), we are not sure that we were
scheduled with the current interval. Instead, the timer might
just cover a part of the interval, for example while resetting
the timer interval.

We must always reschedule the timer.
2018-04-20 13:06:10 +02:00
Thomas Haller
5c4e67ba3d device/connectivity: fix handling of completed periodic checks in concheck_cb() 2018-04-20 12:07:20 +02:00
Thomas Haller
019aebacc1 device/connectivity: fix timeout handling when resetting the periodic interval
A larger issue is that concheck_periodic_schedule_do() requires an
interval in nanoseconds scale. We passed the wrong timeout there.

A smaller issue is, when we reset the max_interval to something
shorter, *and* the previously schedule timeout is pending for a shorter
time than the new new max-interval, we only need to re-adjust the
timeout, but keep cur_basetime unchanged.
2018-04-20 10:51:47 +02:00
Thomas Haller
8c30aa0e73 device/connectivity: improve logging about cancelled connectivity check
There can be other reasons why the check was cancelled, not only because
the current item was obsoleted. For example, the caller who scheduled a
check externally, might have cancelled it or NMDevice might be
disposed().
2018-04-20 10:39:43 +02:00
Christian Kellner
89af7fbfa6 all: add support for thunderbolt networking
Load the thunderbolt-net module if we see a host-to-host connection
and configure the resulting ethernet connection automatically to be
a link-local only one. The latter is done by setting a new udev
property "NM_AUTO_DEFAULT_LINK_LOCAL_ONLY" which is picked up when
we configure the connection for the device.

https://github.com/NetworkManager/NetworkManager/pull/97
2018-04-19 14:20:04 +02:00
Beniamino Galvani
8cbce0e18f manager: fix auth-subject cleanup
Fixes: bac7a2821f
2018-04-19 11:54:03 +02:00
Beniamino Galvani
236edfc908 manager: trust the state file more when assuming connections
If we can't generate a connection and maybe_later is TRUE, it means
that the device can generate/assume connections but it failed for the
moment due to missing master/slaves/addresses. In this case, just
assume the connection from state file.

https://bugzilla.redhat.com/show_bug.cgi?id=1551958
2018-04-19 10:30:19 +02:00
Thomas Haller
c858f9d351 keyfile: avoid cloning the array while parsing DNS entries 2018-04-19 09:36:41 +02:00
Thomas Haller
8d93017b16 keyfile/tests: extend test for parsing routes/addresses
Keyfile supports both route*/address* and routes*/addresses*
fields at the same time. Extend the tests, that they are read
all as expected.
2018-04-19 09:36:41 +02:00
Beniamino Galvani
21d3f16809 core: unexport dbus-objects on dispose
When the D-Bus name is already taken, NM crashes in the following
way. That's because disposed object are not unexported when quitting
and so they linger in the bus-manager's list of exported objects,
causing an invalid access when a neighboring item is accessed. Instead
of just clearing the path, fully unexport the object.

The behavior of not forcefully exporting objects on quit was added in
f9ee20a7b2 ("core: explicitly unexport objects when we're done with
them"), but such behavior doesn't seem to be needed by the stated
goal.

 <error> [1524062008.1886] bus-manager: fatal failure to acquire D-Bus service "org.freedesktop.NetworkManager" (3). Service already taken
 <trace> [1524062008.2327] config: state: success writing state file "/var/lib/NetworkManager/NetworkManager.state"
 <trace> [1524062008.2338] dns-mgr: stopping...
 <info>  [1524062008.2344] exiting (error)
 <debug> [1524062008.2628] disposing NMManager singleton (0xce587e0)
 <trace> [1524062008.2640] dns-mgr: disposing
 <debug> [1524062008.2651] disposing NMDnsManager singleton (0xceb8b50)
 <debug> [1524062008.2666] disposing NMFirewallManager singleton (0xceb62b0)
 <debug> [1524062008.2709] disposing NMHostnameManager singleton (0xce7b370)
 <trace> [1524062008.2722] dbus-object[0xce70f40]: unexport: "/org/freedesktop/NetworkManager/AgentManager"
 ==16381== Invalid write of size 8
 ==16381==    at 0x42F511: c_list_unlink_stale (c-list.h:158)
 ==16381==    by 0x42F511: c_list_unlink (c-list.h:171)
 ==16381==    by 0x42F511: _nm_dbus_manager_obj_unexport (nm-dbus-manager.c:1135)
 ==16381==    by 0x4C5E35: nm_dbus_object_unexport (nm-dbus-object.c:165)
 ==16381==    by 0x5C01E9: dispose (nm-agent-manager.c:1634)
 ==16381==    by 0x6636F37: g_object_unref (gobject.c:3303)
 ==16381==    by 0x4BDC89: _nm_singleton_instance_destroy (nm-core-utils.c:138)
 ==16381==    by 0x400FA85: _dl_fini (in /usr/lib64/ld-2.27.so)
 ==16381==    by 0x7F806AB: __run_exit_handlers (in /usr/lib64/libc-2.27.so)
 ==16381==    by 0x7F807DB: exit (in /usr/lib64/libc-2.27.so)
 ==16381==    by 0x41DA34: main (main.c:463)
 ==16381==  Address 0xce706a0 is 48 bytes inside a block of size 176 free'd
 ==16381==    at 0x4C2EDAC: free (vg_replace_malloc.c:530)
 ==16381==    by 0x6ACA3E1: g_free (gmem.c:194)
 ==16381==    by 0x6AE2572: g_slice_free1 (gslice.c:1136)
 ==16381==    by 0x66550AE: g_type_free_instance (gtype.c:1943)
 ==16381==    by 0x4505F8: dispose (nm-manager.c:6867)
 ==16381==    by 0x6636F37: g_object_unref (gobject.c:3303)
 ==16381==    by 0x4BDC89: _nm_singleton_instance_destroy (nm-core-utils.c:138)
 ==16381==    by 0x400FA85: _dl_fini (in /usr/lib64/ld-2.27.so)
 ==16381==    by 0x7F806AB: __run_exit_handlers (in /usr/lib64/libc-2.27.so)
 ==16381==    by 0x7F807DB: exit (in /usr/lib64/libc-2.27.so)
 ==16381==    by 0x41DA34: main (main.c:463)
 ==16381==  Block was alloc'd at
 ==16381==    at 0x4C2DBAB: malloc (vg_replace_malloc.c:299)
 ==16381==    by 0x6ACA2D5: g_malloc (gmem.c:99)
 ==16381==    by 0x6AE1E36: g_slice_alloc (gslice.c:1025)
 ==16381==    by 0x6AE247C: g_slice_alloc0 (gslice.c:1051)
 ==16381==    by 0x6654E09: g_type_create_instance (gtype.c:1848)
 ==16381==    by 0x66376C7: g_object_new_internal (gobject.c:1799)
 ==16381==    by 0x6638E14: g_object_new_with_properties (gobject.c:1967)
 ==16381==    by 0x66399D0: g_object_new (gobject.c:1639)
 ==16381==    by 0x5D6F18: nm_settings_new (nm-settings.c:1897)
 ==16381==    by 0x4514B4: constructed (nm-manager.c:6489)
 ==16381==    by 0x66378FA: g_object_new_internal (gobject.c:1839)
 ==16381==    by 0x6638E14: g_object_new_with_properties (gobject.c:1967)

https://github.com/NetworkManager/NetworkManager/pull/96
2018-04-19 09:29:25 +02:00
Beniamino Galvani
3886cc8e0c core: rename 'arping' to 'acd'
Now that the ACD functionality is no longer using arping, rename
nm-arping-manager to nm-acd-manager and other occurences of arping as
well.
2018-04-18 15:22:34 +02:00
Beniamino Galvani
943a12c6e3 ifcfg-rh: persist ipv4.dad-timeout without rounding
Introduce a new ifcfg-rh variable ACD_TIMEOUT that stores the exact
value of ipv4.dad-timeout without rounding. We still write the
initscripts-compatible ARPING_WAIT variable, and read it when
ACD_TIMEOUT is missing.
2018-04-18 15:22:28 +02:00
Beniamino Galvani
df488184a8 arping: print IP address conflicts
Print a warning whenever we find a IP conflict on the network. In the
future we may export a flag on the device or send a signal so that
clients can notify the user of the conflict.
2018-04-18 15:22:25 +02:00
Beniamino Galvani
ac8618c78f arping: slightly simplify logging
Don't return an error from nm_arping_manager_start_probe() since it is
currently useless and the arping-manager already prints the failure
reason. Also, drop a log print from add_address().
2018-04-18 15:22:23 +02:00
Beniamino Galvani
9f79ae685d arping: use n-acd
NMArpingManager previously spawned an arping process for each
probed/announced address and watched it. This has the disadvantage of
being inefficient and also that for small timeouts we can't be sure
that arping actually started the probe.

Switch to an implementation that doesn't need to spawn external
processes, by using the n-acd code [1] currently imported in our
source tree. The long term plan is that n-acd will become a shared
library we can link against.

The file is still called nm-arping-manager for lazyness, even if a
better name would be nm-acd-manager.

[1] https://github.com/nettools/n-acd/

https://bugzilla.redhat.com/show_bug.cgi?id=1507864
2018-04-18 15:22:21 +02:00
Beniamino Galvani
7ac93a03b0 build: meson: link NM against n-acd 2018-04-18 15:22:18 +02:00
Beniamino Galvani
19876b4cfe shared: drop duplicate c-list.h header
Use the one from the project just imported.
2018-04-18 15:22:14 +02:00
Beniamino Galvani
aca671fff0 all: replace "it's" with "its" where needed 2018-04-18 14:14:07 +02:00
Thomas Haller
c3fb02641a device: set device's sys-iface-state only shortly before activating device
During _new_active_connection() we just create the NMActiveConnection
instance to proceed with authorization. The caller might not even
authorize, so we must not touch the device yet.

Do that only later.
2018-04-18 07:55:15 +02:00
Thomas Haller
9fe4239f33 manager: some refactoring of error paths to return early
Often, functions perform a series of steps, and when they fail,
they bail out. It's simpler if the code is structured that way,
so you can read it from top to bottom and whenever something is
wrong, either return directly (or goto a cleanup label at the
bottom).
2018-04-18 07:55:15 +02:00
Thomas Haller
5c4a6e9b6d manager: ensure valid specific_object path is passed to _new_active_connection()
From the D-Bus layer, no specific-object is represented by "/". We
should early on normalize such values to NULL, and not expect or
handle them later (like during _new_active_connection()).
2018-04-18 07:55:15 +02:00
Thomas Haller
10753c3616 manager: merge VPN handling into _new_active_connection()
Merge _new_vpn_active_connection() into _new_active_connection(). It was the
only caller, and it is simpler to have all the code visible at one place.

That also shows, that the device argument is ignored and not handled.
Ensure that no device is specified for VPN type activations.
2018-04-18 07:55:15 +02:00
Thomas Haller
0458e4bb28 manager: use cleanup attribute in impl_manager_add_and_activate_connection() and related
Also, in _add_and_activate_auth_done(), always steal the connection
from active's user-data. Otherwise, the lifetime of the connection
is extended until active gets destroyed. For example, if we would leak
active, we would also leak connection that way.
2018-04-18 07:55:15 +02:00
Thomas Haller
3e3d53ce69 manager: add is-vpn argument to _new_active_connection() and avoid searching existing activations
- pass is-vpn to _new_active_connection(). It is confusing that _new_active_connection()
  would re-determine whether a connection is a VPN type, although that was already
  established previously. The confusing part is: will they come to the
  same result? Why? What if not?
  Instead pass it as argument and assert that we got it right.

- the check for existing connections should look whether there is an existing
  active connection of type NMVpnConnection. Instead, what matters is,
  - do we have a connection of type VPN (otherwise, don't even bother
    to search for existing-ac)
  - is the connection already active?
  Checking whether the connection is already active, and ask backwards
  whether it's of type NMVpnConnection is odd, maybe even wrong in
  some cases.
2018-04-18 07:55:15 +02:00
Thomas Haller
7fcdca29b6 manager: add _connection_is_vpn() helper to unify checks for VPN type 2018-04-18 07:55:15 +02:00
Thomas Haller
bdc622fd31 manager/trivial: rename boolean variable "vpn" to "is_vpn" 2018-04-18 07:55:15 +02:00
Thomas Haller
bac7a2821f core: cleanup NMManager's validate_activation_request()
- there are only two callers of validate_activation_request(). One of them,
  might already lookup the device before calling the validate function.
  Safe to looking up again. But this is not only an optimization, more importantly,
  it feels odd to first lookup a device, and then later look it up again. Are
  we guaranteed to use the same path? Why? Just avoid that question.
- re-order some error checking for missing device, so that it is clearer.
- use cleanup attribute to handle return value and drop the "goto error".
2018-04-18 07:55:15 +02:00
Thomas Haller
aa86327e45 core: cleanup code by using nm_auth_is_subject_in_acl_set_error() 2018-04-18 07:55:15 +02:00
Thomas Haller
f94167d8b1 core: add nm_auth_is_subject_in_acl_set_error() helper 2018-04-18 07:55:15 +02:00
Thomas Haller
1a33ab17de core: downgrade assertion to nm_assert()
It can be easily verified, that these assertions should not ever fail.
Disable in production builds.
2018-04-18 07:55:15 +02:00
Thomas Haller
580a11da3a core: minor cleanup of handling specific-object in NMActiveConnection
- use nm_assert() for something that ~really~ always should be given.
- use nm_streq0() and nm_clear_g_free().
2018-04-18 07:55:15 +02:00
Thomas Haller
476208d223 core: don't explicitly set D-Bus path properties to "/"
NMDBusObject already gets this right, by calling nm_dbus_utils_get_property(),
which calls g_dbus_gvalue_to_gvariant(), which correctly converts NULL
object paths to "/".

We already rely on that elsewhere. No need for this workaround.
2018-04-18 07:55:15 +02:00
Thomas Haller
5284690f18 core: use nm_utils_dbus_normalize_object_path() to cleanup D-Bus argument 2018-04-18 07:55:15 +02:00
Thomas Haller
34bbcc70b8 core: sort D-Bus paths in nm_dbus_utils_g_value_set_object_path_from_hash() 2018-04-18 07:55:15 +02:00
Thomas Haller
a99d51cb50 auth-manager: fix potential issue iterating modified CList in _dbus_new_proxy_cb()
In the loop, we invoke callbacks. What the callbacks do, is out of control
of NMAuthManager. For example, they could cancel or schedule new
requests. Especially, cancelling invalidate the stored @safe pointer.

Fix that, by always iterate from the start of the list.

Fixes: d0563f0733
2018-04-18 07:51:29 +02:00
Beniamino Galvani
0fa57069ad auth-manager: fix processing calls in _dbus_new_proxy_cb()
In the first loop, the element is removed only when the callback is
executed. The second loop never removes the current element. Use the
for_each macro for both.

Fixes: d0563f0733
2018-04-17 16:22:34 +02:00
Beniamino Galvani
cbeabaa000 core: fix wrong assertion when disposing NMAuthManager
The list should be empty on disposal.

Fixes: 2ea2df3184
2018-04-17 16:01:36 +02:00
Richard Schütz
9326902cf1 dhcp: don't enforce broadcast flag
Requesting broadcast replies from the DHCP server can be problematic in
filtered environments like some wireless networks. Don't override the
default of using unicast. This matches the behaviour of the external DHCP
clients.

https://github.com/NetworkManager/NetworkManager/pull/93
2018-04-17 11:03:04 +02:00
Beniamino Galvani
d0563f0733 auth-manager: don't process idle calls when the proxy creation finishes
The list of calls contains two kinds of elements: (1) calls that don't
need a D-Bus request and are only waiting for the asynchronous
invocation of the callback in an idle function; (2) calls that need a
D-Bus request and are waiting for the D-Bus proxy.

When the proxy creation finishes, only (2) calls must be canceled (if
the creation failed) or started (if the proxy was created).

Fixes: 798b2a7527

https://bugzilla.redhat.com/show_bug.cgi?id=1567807
2018-04-17 10:17:25 +02:00
Thomas Haller
44d638d69d auth-subject: minor cleanup of _new_unix_process()
Drop the g_assert(), which is always compiled in, but obviously
can never fail.
2018-04-16 16:03:14 +02:00
Thomas Haller
e5e8f86c3d shared: move nm_utils_get_start_time_for_pid() to shared/nm-utils
We will also use it in nmcli later. It will be needed when we replace
polkit_unix_process_new_for_owner(). Which is still far down the road.
2018-04-16 16:03:14 +02:00
Thomas Haller
aae483c0a9 settings: add NMSettingsConnectionFlags flags
Up to now, it was not visible on D-Bus whether a connection
was generated by NetworkManager and/or volatile.

That is for example interesting for firewalld, which aims
to store persistant configuration in NetworkManager's profile.
However, that doesn't make sense for external connections
(which are nm-generated & volatile). In fact, it probably
makes no sense for volatile connections in general, because
modifying them, likely makes them non-volatile (depending on
how the profile is modified).

Also, the Update2() D-Bus operation allows to carefully
make connections volatile and unsaved. As we have public
API to set these flags, we should also expose them on D-Bus.

Related: https://bugzilla.redhat.com/show_bug.cgi?id=1460295
2018-04-16 15:30:07 +02:00