Commit graph

477 commits

Author SHA1 Message Date
Beniamino Galvani
4c53d31d64 libnm: add (allow-none) annotations to nm_device_reapply()
The @connection argument can be NULL; add the (allow-none) annotation
otherwise calling the API with a NULL argument through GObject
introspection fails with:

 Argument 1 does not allow None as a value

Fixes: 278fd4fb0f
(cherry picked from commit f396826466)
(cherry picked from commit a03b867ba4)
(cherry picked from commit cd6c17cb21)
(cherry picked from commit 8d4fce4daf)
2018-07-04 14:20:12 +02:00
Benjamin Berg
4bcb4c4ef2 Add calls to g_simple_async_result_set_check_cancellable
If an operation is cancelled through the GCancellable, then the idiom is
that the operation is always cancelled, even if it has finished
successfully. To ensure this is the case, add calls to
g_simple_async_result_set_check_cancellable everywhere.

Without this, e.g. gnome-control-center will crash when switching away
from the power panel quickly, as the NMClient creation finishes
asynchronously and g-c-c assume that G_IO_ERROR_CANCELLED is returned to
ensure it doesn't access the now invalid user_data parameter.

https://bugzilla.gnome.org/show_bug.cgi?id=794088
(cherry picked from commit 26c215e22d)
(cherry picked from commit e1b99d9201)
(cherry picked from commit 2e62853509)
2018-03-08 15:36:42 +01:00
Pavel Šimerda
58c8a70808 libnm: fix empty statements that were supposed to return NULL
Discovered thanks to `-Wunused-value` when building on openSUSE Leap 42.3.

(cherry picked from commit c4f655579c)
(cherry picked from commit a30b2fcd84)
(cherry picked from commit b2b28cb644)
2018-01-17 19:21:56 +01:00
Lubomir Rintel
17bb14f433 secret-agent: construct the dbus proxy for async agent with the correct bus name
The asynchronous secret agent initialization doesn't work at all due to a
rather silly typo. Oops.

While at it, fix a whitespace error too.

(cherry picked from commit 603daa5b25)
2018-01-11 13:43:50 +01:00
Lubomir Rintel
b2af5f7ab6 libnm/client: proxy *_enabled and metered properties to the right object
They're provided by the Manager, not by the RemoteSettings.

(cherry picked from commit c81005b846)
(cherry picked from commit 34035ceee8)
2017-11-02 09:05:22 +01:00
Thomas Haller
6311bf6666 libnm: fix memleak of GUdevDevice in get_bus_name()
Fixes: f7b1b28202
(cherry picked from commit c033330c41)
2017-03-20 11:34:49 +01:00
Thomas Haller
a006361fca libnm: add assertion to NMObject that a dbus-object is set
The libnm cache types don't have public _new() functions.
However, such types can be easily created using g_object_new()
directly from user code.

Such a usage is not supported. Add an assertion that a valid
dbus-object is present.

(cherry picked from commit 556b7c3b45)
2017-03-09 15:22:17 +01:00
Thomas Haller
8a857c4475 libnm: chain up NMRemoteConnection::constructed() function
Fixes: 0fdd71fe6e
(cherry picked from commit 9ed0e3705e)
2017-03-09 15:22:16 +01:00
Beniamino Galvani
0429753dab libnm: disconnect signal from D-Bus proxies on dispose
https://bugzilla.gnome.org/show_bug.cgi?id=778615
(cherry picked from commit 5ae3db7515)
2017-02-18 10:29:05 +01:00
Thomas Haller
4603ce7ad0 all: cleanup switch fall-through comments for -Wimplicit-fallthrough warning
The -Wimplicit-fallthrough=3 warning is quite flexible of accepting
a fall-through warning.

Some comments were missing or not detected correctly.

Thereby, also change all other comments to follow the exact
same pattern.

(cherry picked from commit 7c6c8f0d8b)
2017-02-06 17:54:45 +01:00
Lubomir Rintel
0822cbb032 libnm/object: lower the severity of the dangling object warning
The user can't do much about it and we can recover. This is a temporary
measure to avoid unnecessarily bothering the user.

(cherry picked from commit 7fec0755c9)
2017-01-19 16:15:42 +01:00
Lubomir Rintel
b916d9dfe0 build: fix build with older gi
Fixes: 6c96aafaa9
(cherry picked from commit 22722b7732)
2017-01-19 14:18:26 +01:00
Lubomir Rintel
2ee8462774 build: make the doc generator find the right libnm.so
At some point gobject-introspection added an API to add a library path
and stopped honoring the LD_LIBRARY_PATH (a bug, according to GI
documentation?).

(cherry picked from commit 6c96aafaa9)
2017-01-19 11:21:38 +01:00
Jiří Klimeš
215152d0a1 libnm: (trivial): add missing return description in comment block 2017-01-17 10:34:16 +01:00
Beniamino Galvani
d252a99fa2 libnm-core: add NMSettingMacsec
The new NMSettingMacsec contains information necessary to establish a
MACsec connection. At the moment we support two different MACsec
modes, both using wpa_supplicant: PSK and EAP.

PSK mode is based on a static CAK key for the MACsec key agreement
protocol, while EAP mode derives keys from a 802.1x authentication and
thus requires the presence of a NMSetting8021x in the connection.
2017-01-16 17:37:14 +01:00
Beniamino Galvani
67adbda83e core,libnm: introduce NMDeviceMacsec
At the moment the device only exposes the current link status, but
cannot create new links.
2017-01-16 17:37:14 +01:00
Lubomir Rintel
84c57c34bc libnm-core/8021x: add pkcs11: scheme for certificates and keys
The getters just return the whole URI as-is, without any mangling.
2017-01-06 15:56:11 +01:00
Lubomir Rintel
ac0563d784 libnm-core: add nm_utils_is_valid_iface_name()
Version of nm_utils_iface_valid_name() with error reporting.
2017-01-06 15:11:56 +01:00
Thomas Haller
16aeac5c3e libnm: add nm_utils_version() function to query libnm version at runtime
if (nm_utils_version () < NM_ENCODE_VERSION (1, 5, 0))
        g_error ("Requires at least version 1.5.0");
2016-12-20 16:51:58 +01:00
Thomas Haller
fee104621e libnm/dns: fix memleak in demarshal_dns_configuration
Fixes: a8d6005256
2016-12-14 13:19:37 +01:00
Beniamino Galvani
a8d6005256 libnm: implement support for DNS manager properties 2016-12-12 22:06:24 +01:00
mirh
48402cd526 build: fix compilation with Python3
has_key() has long been dropped
https://docs.python.org/3.1/whatsnew/3.0.html#builtins

Should still work with anything from 2.3 onwards

https://github.com/NetworkManager/NetworkManager/pull/11
2016-11-29 22:03:01 +01:00
Jiří Klimeš
544f7d3683 agent: don't clear "error", g_simple_async_result_take_error() overtakes it
From valgrind:
==21921== Invalid free() / delete / delete[] / realloc()
==21921==    at 0x4C2CD5A: free (vg_replace_malloc.c:530)
==21921==    by 0x81C4F2D: g_free (gmem.c:189)
==21921==    by 0x81AB021: g_error_free (gerror.c:491)
==21921==    by 0x81AB325: g_clear_error (gerror.c:674)
==21921==    by 0x767B555: reg_request_cb (nm-secret-agent-old.c:616)
==21921==    by 0x7A211F2: g_task_return_now (gtask.c:1107)
==21921==    by 0x7A21228: complete_in_idle_cb (gtask.c:1121)
==21921==    by 0x81BF6B9: g_main_dispatch (gmain.c:3154)
==21921==    by 0x81BF6B9: g_main_context_dispatch (gmain.c:3769)
==21921==    by 0x81BFA6F: g_main_context_iterate.isra.29 (gmain.c:3840)
==21921==    by 0x81BFB1B: g_main_context_iteration (gmain.c:3901)
==21921==    by 0x7A4748C: g_application_run (gapplication.c:2381)
==21921==    by 0x118AEF: main (main.c:81)

It caused memory corruption and may result in strange nm-applet crashes.
2016-11-25 14:31:47 +01:00
Lubomir Rintel
743d372d72 libnm/vpn-service-plugin: transition to STOPPED state from INIT too
We may want to stop the plugin before we started connecting e.g. when the
plugin NeedsSecrets but we can't supply them.
2016-11-24 14:13:13 +01:00
Lubomir Rintel
972e0d2803 all: rename the introspection data to use the interface paths in names
This makes it easier to install the files with proper names.
Also, it makes the makefile rules slightly simpler.

Lastly, the documentation is now generated into docs/api, which makes it
possible to get rid of the awkward relative file names in docbook.
2016-11-23 15:43:42 +01:00
Lubomir Rintel
6143e71464 libnm/generate-plugin-docs: don't replace newlines with spaces
That serves no purpose whatsoever.
2016-11-21 18:34:50 +01:00
Lubomir Rintel
3b64dc9cbd libnm/generate-plugin-docs: drop YAML dependency
It makes little sense to produce a YAML and then decompose it.
2016-11-21 18:15:42 +01:00
Lubomir Rintel
cb61dd113c libnm/client: do not autostart the service
Apparently, the client is used by the services we depend on (firewalld),
and an attempt to start the service would deadlock them.

This was an accidental change anyway.

Related firewalld change: https://github.com/t-woerner/firewalld/pull/171
2016-11-16 19:52:24 +01:00
Lubomir Rintel
55ba649b0e libnm: fixup accidental proxy removal
Fixes: 4b7b518958
2016-11-14 20:46:27 +01:00
Lubomir Rintel
4b7b518958 libnm: avoid leaking the interface proxies
_nm_object_get_proxy()'s semantics changed with the object-manager
branch merge: it now takes a reference.
2016-11-14 20:22:23 +01:00
Lubomir Rintel
446858cf8d libnm/client: unref all the objects on dispose
We created them, we own them.
2016-11-14 20:22:23 +01:00
Lubomir Rintel
dfa90861e8 libnm/tests: increase timeout in nm-client test
Otherwise the test may fail in valgrind.
2016-11-14 20:22:23 +01:00
Beniamino Galvani
5dfc571971 libnm: initialize @device_type of device objects
Before switching to the ObjectManager, the D-Bus property was used to
decide the actual type of the device and the property set manually by
each subclass in its _init() function. Now we determine objects type
based on their D-Bus interface and therefore we can handle the
property like all others, ensuring that we return a known value in
get_property() to avoid warnings in GLib.

This fixes the missing initialization of the property which causes
regressions on clients as nm-applet.

Fixes: 1f5b48a59e
2016-11-14 13:38:26 +01:00
Lubomir Rintel
32d60ccc6f libnm/nm-object: gracefully skip unknown objects
They indicate a server bug (a dangling path of an object that does not
exist). The best we can do probably is to just ignore them and warn.

Based-on-patch-by: Dan Williams <dcbw@redhat.com>
2016-11-11 17:57:09 +01:00
Lubomir Rintel
9d31d09bcb libnm/manager: don't fail the object if we can't get the permissions
It's not fatal and the NMObject's initialization shouldn't fail. Just
write out a polite warning and leave the permissions in UNKNOWN state.
2016-11-11 17:42:07 +01:00
Lubomir Rintel
32dfa563d1 libnm/nm-manager: don't block the object creation on permissions
The GetPermissions call is very expensive (~400ms here, an extra
NM->polkit call for every known permission while polkit being really
slow to answer) yet seldom needed.

There's no methods to access the permissions -- they're only
communicated via signals.

Unfortunately, we don't know when a signal is hooked, so we still need
to kick of the call. Nevertheless, we don't need to wait for it to
finish.
2016-11-11 16:18:03 +01:00
Lubomir Rintel
d441271109 libnm/client: drop some unneeded includes 2016-11-10 18:11:15 +01:00
Lubomir Rintel
1f5b48a59e libnm: use the o.fd.DBus.ObjectManager API for object management
This speeds up the initial object tree load significantly. Also, it
reduces the object management complexity by shifting the duties to
GDBusObjectManager.

The lifetime of all NMObjects is now managed by the NMClient via the
object manager. The NMClient creates the NMObjects for GDBus objects,
triggers the initialization and serves as an object registry (replaces
the nm-cache).

The ObjectManager uses the o.fd.DBus.ObjectManager API to learn of the
object creation, removal and property changes. It takes care of the
property changes so that we don't have to and lets us always see a
consistent object state.  Thus at the time we learn of a new object we
already know its properties.

The NMObject unfortunately can't be made synchronously initializable as
the NMRemoteConnection's settings are not managed with standard
o.fd.DBus Properties and ObjectManager APIs and thus are not known to
the ObjectManager.  Thus most of the asynchronous object property
changing code in nm-object.c is preserved. The objects notify the
properties that reference them of their initialization in from their
init_finish() methods, thus the asynchronously created objects are not
allowed to fail creation (or the dependees would wait forever). Not a
problem -- if a connection can't get its Settings, it's either invisible
or being removed (presumably we'd learn of the removal from the object
manager soon).

The NMObjects can't be created by the object manager itself, since we
can't determine the resulting object type in proxy_type() yet (we can't
tell from the name and can't access the interface list). Therefore the
GDBusObject is coupled with a NMObject later on.

Lastly, now that all the objects are managed by the object manager, the
NMRemoteSettings and NMManager go away when the daemon is stopped. The
complexity of dealing with calls to NMClient that would require any of
the resources that these objects manage (connection or device lists,
etc.) had to be moved to NMClient. The bright side is that his allows
for removal all of the daemon presence tracking from NMObject.
2016-11-10 16:48:48 +01:00
Lubomir Rintel
ff3eb24c15 libnm: change the secret agent to use the generated GDBus bindings
It allows us to drop _nm_dbus_register_proxy_type() and _nm_dbus_new_proxy_*()
once they're not used by the rest of libnm anymore.
2016-11-10 16:48:48 +01:00
Lubomir Rintel
bbed63213a libnm/tests: work around ObjectManager bogus warning
We should eventually fix this in Gio, but I guess we need to keep the
workaround for the time being anyway.
2016-11-10 16:48:48 +01:00
Lubomir Rintel
ed21a820a7 libnm/tests: connection might not be gone at the time manager signals removal
The assumption is not too useful to the library user anyway -- it could easily
be that there's some other link to the object in the object tree.

More importantly, when the objects are managed by the object manager,
we don't destroy the object until we see it actually removed on the
D-Bus. That makes more sense anyway.
2016-11-10 16:48:47 +01:00
Lubomir Rintel
7007c9853c libnm: order the property updates
Don't let a later property update finish than the sooner one.

This wouldn't happen most of time, apart from a special case when the
latter update of a object array property is to an empty list.
In that case the latter update would complete sooner and when the
earlier update finishes the list would contain objects which are
supposed to be gone already.
2016-11-10 16:48:47 +01:00
Lubomir Rintel
df46c59775 nm-object: initialize the object buffer to zero 2016-11-10 16:48:47 +01:00
Beniamino Galvani
75127b1348 libnm: add missing device includes in NetworkManager.h
And also sort the setting includes alphabetically.
2016-11-09 17:45:34 +01:00
Thomas Haller
e028edd1c5 libnm/trivial: fix code comment for internal header libnm/nm-manager.h 2016-11-08 14:27:07 +01:00
Thomas Haller
95ab69b761 libnm: coerce empty strings to NULL for D-Bus properties
On D-Bus level, string (s) or object paths (o) cannot be NULL.
Thus, whenver server exposes such an object, it gets automatically
coerced to "" or "/", respectively.

On client side, libnm should coerce certain properties back, for which
"" is just not a sensible value.

For example, an empty NM_DEVICE_ETHERNET_HW_ADDRESS should be instead
exposed as NULL.

Technically, this is an API change. However, all users were well advised
to expect both NULL and "" as possible return values and handle them
accordingly.
2016-10-24 10:14:02 +02:00
Thomas Haller
21d7aa9204 libnm: minor refactoring by using g_clear_object() and nm_str_not_empty() 2016-10-24 10:14:02 +02:00
Thomas Haller
c4198d45e3 libnm: avoid possibly NULL address for NMDeviceVlan calling nm_utils_hwaddr_matches() 2016-10-24 10:14:02 +02:00
Thomas Haller
7eb054d099 libnm: fix memleak in NMDeviceVxlan 2016-10-24 10:14:02 +02:00
Thomas Haller
7aefbcb622 build: merge "libnm/tests/Makefile.am" into toplevel Makefile 2016-10-19 17:16:08 +02:00