Commit graph

1840 commits

Author SHA1 Message Date
Beniamino Galvani
913f5d9898 settings: fix memory leak in for_each_secret()
Fixes: df6706813a
2015-08-24 16:15:50 +02:00
Thomas Haller
ad7cdfc766 logging: declare default logging macros in "nm-logging.h"
The logging macros _LOGD(), etc. are specific to each
file as they format the message according to their context.

Still, they were cumbersome to define and their implementation
was repeated over and over (slightly different at times).

Move the declaration of these macros to "nm-logging.h".
The source file now only needs to define _NMLOG(), and either
_NMLOG_ENABLED() or _NMLOG_DOMAIN.

This reduces code duplication and encourages a common implementation
and usage of these macros.
2015-08-20 11:15:13 +02:00
Lubomir Rintel
450d683881 nm-settings: take a reference to ourselves as long we have signals that use us hooked on
Program received signal SIGSEGV, Segmentation fault.
  g_type_check_instance_cast (type_instance=type_instance@entry=0x89f180, iface_type=9004512) at gtype.c:4060
  4060              node = lookup_type_node_I (type_instance->g_class->g_type);
  (gdb) bt
  #0  0x00007ffff4b44e80 in g_type_check_instance_cast (type_instance=type_instance@entry=0x89f180, iface_type=9004512) at gtype.c:4060
  #1  0x000000000056a460 in connection_visibility_changed (connection=0x89f680 [NMKeyfileConnection], pspec=<optimized out>, user_data=0x89f180) at settings/nm-settings.c:870
  #5  0x00007ffff4b3b54f in <emit signal notify:visible on instance 0x89f680 [NMKeyfileConnection]> (instance=instance@entry=0x89f680, signal_id=<optimized out>, detail=<optimized out>) at gsignal.c:3393
      #2  0x00007ffff4b200b5 in g_closure_invoke (closure=0x9131a0, return_value=return_value@entry=0x0, n_param_values=2, param_values=param_values@entry=0x7fffffffd540, invocation_hint=invocation_hint@entry=0x7fffffffd4c0) at gclosure.c:801
      #3  0x00007ffff4b32499 in signal_emit_unlocked_R (node=node@entry=0x8696b0, detail=detail@entry=641, instance=instance@entry=0x89f680, emission_return=emission_return@entry=0x0, instance_and_params=instance_and_params@entry=0x7fffffffd540) at gsignal.c:3581
      #4  0x00007ffff4b3b1a0 in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=var_args@entry=0x7fffffffd710) at gsignal.c:3337
  #6  0x00007ffff4b24665 in g_object_dispatch_properties_changed (object=0x89f680 [NMKeyfileConnection], n_pspecs=<optimized out>, pspecs=<optimized out>) at gobject.c:1056
  #7  0x00007ffff4b26d11 in g_object_notify (pspec=0x8ce660 [GParamBoolean], object=0x89f680 [NMKeyfileConnection]) at gobject.c:1149
  #8  0x00007ffff4b26d11 in g_object_notify (object=0x89f680 [NMKeyfileConnection], property_name=property_name@entry=0x5d2eb9 "visible") at gobject.c:1197
  #9  0x0000000000497f85 in set_visible (self=self@entry=0x89f680 [NMKeyfileConnection], new_visible=new_visible@entry=0) at settings/nm-settings-connection.c:296
  #10 0x0000000000498165 in dispose (object=0x89f680 [NMKeyfileConnection]) at settings/nm-settings-connection.c:2390
  #11 0x00007ffff4b24fec in g_object_unref (_object=0x89f680) at gobject.c:3137
  #12 0x00000000004a4a4f in dispose (object=0xa24260 [NMVpnConnection]) at nm-active-connection.c:904
  #13 0x00007ffff4b24fec in g_object_unref (_object=0xa24260) at gobject.c:3137
  #14 0x0000000000577636 in nm_vpn_service_stop_connections (service=0x8ff610 [NMVpnService], quitting=1, reason=NM_VPN_CONNECTION_STATE_REASON_SERVICE_STOPPED) at vpn-manager/nm-vpn-service.c:150
  #15 0x0000000000576ea2 in dispose (object=0x921060 [NMVpnManager]) at vpn-manager/nm-vpn-manager.c:284
  #16 0x00007ffff4b24fec in g_object_unref (_object=0x921060) at gobject.c:3137
  #17 0x00000000004d0f05 in dispose (object=0x88a2b0 [NMManager]) at nm-manager.c:5061
  #18 0x00007ffff4b24fec in g_object_unref (_object=0x88a2b0) at gobject.c:3137
  #19 0x0000000000444e08 in _nm_singleton_instance_destroy () at NetworkManagerUtils.c:138
  #20 0x00007ffff7de97b7 in _dl_fini () at dl-fini.c:252
  #21 0x00007ffff4444778 in __run_exit_handlers (status=status@entry=0, listp=0x7ffff47d0618 <__exit_funcs>, run_list_atexit=run_list_atexit@entry=true) at exit.c:82
  #22 0x00007ffff44447c5 in __GI_exit (status=status@entry=0) at exit.c:104
  #23 0x0000000000445b80 in main (argc=1, argv=0x7fffffffdf08) at main.c:458
  (gdb)
2015-08-19 15:32:21 +02:00
Jiří Klimeš
b019052b92 settings: fix format string for GVariant (rh #1253320)
https://bugzilla.redhat.com/show_bug.cgi?id=1253320

Fixes: df6706813a
2015-08-13 17:46:56 +02:00
Thomas Haller
088e606fcc ifcfg-rh: take reference to nm_inotifiy_helper_get() singleton in NMIfcfgConnection
https://bugzilla.redhat.com/show_bug.cgi?id=1253330
2015-08-13 16:18:48 +02:00
Thomas Haller
13c21baf2e settings: ensure no duplicate plugin instances in load_plugin() 2015-08-13 10:06:42 +02:00
Thomas Haller
8bb6ab558e settings: implement setting plugins via NM_DEFINE_SINGLETON_GETTER()
Advantages:

 - use current best-pratice
 - registers a weak-ref to clear @singleton_instance when the
   instance gets destroyed
 - logs creation and destruction of singleton
 - on shutdown, destroy the singleton instance via
   _nm_singleton_instance_register_destruction(). Note, that
   we now have yet another reference to the singleton that is
   owned by register-destruction.
2015-08-13 10:06:42 +02:00
Thomas Haller
f979124dc9 settings: add other check to ensure no duplicates in load_plugins()
We already avoid loading duplicate plugins by checking find_plugin().
That iterates the plugins @list and checks for duplicate names.
Additionally, also reject duplicates based on the @plugins list.

Also, move the check for "keyfile" before, so that all explicit
checks for (statically) known names are early and together.
2015-08-13 10:06:42 +02:00
Thomas Haller
9558560862 ifcfg-rh: refactor construction of plugin instance and acquiring D-Bus service
Move code from sc_plugin_ifcfg_init() and nm_system_config_factory()
to constructed().
2015-08-13 10:06:42 +02:00
Thomas Haller
68eec304e2 settings: don't leak keyfile plugin instance
We leaked a reference to the keyfile plugin and thus
it was not destructed on shutdown.
2015-08-13 10:06:42 +02:00
Thomas Haller
406b05a31a keyfile: don't have static @singleton in nm_settings_keyfile_plugin_new()
There is no need to have a static @singleton variable.
The only caller of nm_settings_keyfile_plugin_new() is
NMSettings which owns the singleton instance.

A *_new() function should just create a new instance and
that's it. It's unexpected to reuse the same instance.
2015-08-13 10:06:42 +02:00
Thomas Haller
67bcaca75e agent-manager: have NMAgentManager own NMSessionMonitor instance
The latter makes use of the former. Ensure that NMSessionMonitor
lives long enough.
2015-08-13 10:06:42 +02:00
Thomas Haller
7168283871 settings: let NMSettingsConnection own reference to nm_session_monitor_get()
This way, the lifetime of the session monitor is guaranteed to exceed
the lifetime of it's user -- the NMSettingsConnection.
2015-08-13 10:06:42 +02:00
Thomas Haller
24d191d06c session-monitor: explicitly use singleton instance
Some functions from nm-session-monitor.c have an implicit access to
nm_session_monitor_get(). This is non-obvious behavior.

Instead require the explicit session-monitor instance to be
provided -- where needed.
2015-08-13 10:06:42 +02:00
Thomas Haller
6608331aec ifcfg-rh: reorder checks in nm_ifcfg_connection_check_devtimeout()
Move the check for a platform link before devtimeout_from_file(). The
check in the platform cache should be more performant and yield success
in most cases.

This can save reading and parsing the ifcfg-rh file.
2015-08-11 18:11:55 +02:00
Jiří Klimeš
ecdf7cba6b ifcfg-rh: respect DEVTIMEOUT if link is not announced by udev yet (rh #1192633)
If NIC related initialization takes a long time in udev processing, but we have
an ifindex from kernel, we still want to wait until udev is finished and the
device is really usable.
Check that by calling nm_platform_link_get_by_ifname() and checking @initialized,
which means udev is finished.

Based on a patch by t-nishimura@hf.jp.nec.com
Improved by thaller@redhat.com

https://bugzilla.redhat.com/show_bug.cgi?id=1192633
2015-08-11 18:11:55 +02:00
Dan Winship
1cf35cb26b core: final gdbus porting
Port remaining bits to gdbus and remove stray dbus-glib references

Drop the dbus-glib version check from configure, since nothing depends
on new dbus-glib any more.

Move nm-dbus-glib-types.h and nm-gvaluearray-compat.h from include/ to
libnm-util/ since they are now only used by libnm-util and libnm-glib.
2015-08-10 09:41:26 -04:00
Dan Winship
df6706813a settings: port to gdbus 2015-08-10 09:41:26 -04:00
Dan Winship
9f8de603e3 ifcfg-rh: port to gdbus 2015-08-10 09:41:26 -04:00
Dan Winship
b7911bae51 core: better order the code at startup
NM was calling nm_bus_manager_start_service() to claim its bus name
before it exported any of its objects, but this didn't matter under
dbus-glib, because no client connections would be accepted until the
main loop was started later on, by which point we would have exported
everything.

But with gdbus, method calls are initially received in the gdbus
worker thread, which means that clients would be able to connect right
away and then be told that the expected interfaces don't exist.

So move the nm_bus_manager_start_service() call to occur after
creating NMSettings and NMManager (and, indirectly, NMAgentManager).
This requires splitting out the slow parts of nm_settings_new() into a
new nm_settings_start(), so that we can create and export it first,
and then read the connections, etc afterward. (Likewise, there were
still a few potentially-slow bits in nm_manager_new() which are now
moved into nm_manager_start().)
2015-08-10 09:41:26 -04:00
Dan Winship
22e1a97e12 all: drop includes to <glib/gi18n.h> for "nm-default.h"
The localization headers are now included via "nm-default.h".

Also fixes several places, where we wrongly included <glib/gi18n-lib.h>
instead of <glib/gi18n.h>. For example under "clients/" directory.
2015-08-05 15:35:51 +02:00
Thomas Haller
19c3ea948a all: make use of new header file "nm-default.h" 2015-08-05 15:32:40 +02:00
Thomas Haller
9ac57182ca include: add convenience header "nm-default.h"
This internal header file should be included by our internal source
code files and header files. It includes in one place other headers
that constitute to a minimal set of required headers. Most notably
this is <glib.h> and our "nm-glib.h" header.

Note that public header files and example source code cannot include
this file as "nm-default.h" is internal only.
2015-08-05 15:32:39 +02:00
Thomas Haller
37c9f62e5d all: include internal headers with quotes 2015-08-05 15:25:29 +02:00
Beniamino Galvani
532ed38a3c settings: add audit support 2015-08-04 09:32:12 +02:00
Beniamino Galvani
0d4dfe5007 settings-connection: add audit support 2015-08-04 09:32:12 +02:00
Beniamino Galvani
cf455aa0e2 ifcfg-rh: properly write the wake-on-lan property
ETHTOOL_OPTS must be cleared when the wake-on-lan value is 'default'
and a "wol d" string must be appended when the value is 'none'.

Fixes: 2e0d0bc050
2015-07-30 16:56:27 +02:00
Beniamino Galvani
d1b6835ada settings: fix failed assertion 'owner != NULL in nm-agent-manager.c
Let NMSecretAgent emit the 'disconnected' event when dbus_owner is
still valid so that receivers of the signal can query it. This fixes
the following failed assertion:

    remove_agent: assertion 'owner != NULL' failed

Fixes: 2a2fd1216b
2015-07-30 16:42:21 +02:00
Dan Winship
02370be7f3 core: rename NMDBusManager to NMBusManager
Our gdbus generated types use the same names as their corresponding
"real" types, but with "NM" changed to "NMDBus".

Unfortunately, that means that introspection/nmdbus-manager.c (the
generated type for src/nm-manager.c) uses the same type name as the
entirely unrelated src/nm-dbus-manager.c.

Fix this by removing the "d" from src/nm-dbus-manager.c. (We could
rename the generated type instead, but then it becomes inconsistent
with all the other generated types, and we're already using it as
"NMDBusManager" in libnm/nm-manager.c.)
2015-07-24 13:25:48 -04:00
Dan Winship
1424f249e3 settings: fix/reorganize NMSettingConnection secrets code
NMSettingConnection's for_each_secret() function works in a
slightly-too-GHashTable-specific way. Reorganize the code now to make
the change to GVariants easier later.

Also, fix a few bugs:
  - In the (unlikely) case of a non-secret being stored in
    vpn.secrets, we were treating it as though it was a secret
    with flags NONE.
  - The code was comparing against NONE when it meant !AGENT_OWNED
    in a few places. (With the current set of NMSettingSecretFlags
    values, this worked, but in the future it might not.)
  - In some cases we never called for_each_secret() with the
    @remove_non_secrets flag, meaning we might have ended up
    passing non-secrets to other code.
2015-07-24 13:25:48 -04:00
Dan Winship
2a2fd1216b settings: rework NMSecretAgent disconnection detection
Have NMSecretAgent emit "disconnected" when it detects that it has
been disconnected, rather than having both the agent and the agent
manager monitor it separately.
2015-07-24 13:25:47 -04:00
Dan Winship
c1dd3b6eed core: move D-Bus export/unexport into NMExportedObject
Move D-Bus export/unexport handling into NMExportedObject and remove
type-specific export/get_path methods (export paths are now specified
at the class level, and NMExportedObject handles the counters for all
exported types automatically).

Since all exportable objects now use the same get_path() method, we
can also add some helper methods to simplify get_property()
implementations for object-path and object-path-array properties.
2015-07-24 13:25:47 -04:00
Dan Winship
6fcc1deee0 core: add an NMExportedObject base class
Add NMExportedObject, make it the base class of all D-Bus-exported
types, and move the nm-properties-changed-signal logic into it. (Also,
make NMSettings use the same properties-changed code as everything
else, which it was not previously doing, presumably for historical
reasons).

(This is mostly just shuffling code around at this point, but
NMExportedObject will be more important in the gdbus port, since
gdbus-codegen doesn't do a very good job of supporting objects that
export multiple interfaces [as each NMDevice subclass does, for
example], so we will need more glue/helper code in NMExportedObject
then.)
2015-07-24 13:25:47 -04:00
Dan Winship
3452ee2a0e all: rename nm-glib-compat.h to nm-glib.h, use everywhere
Rather than randomly including one or more of <glib.h>,
<glib-object.h>, and <gio/gio.h> everywhere (and forgetting to include
"nm-glib-compat.h" most of the time), rename nm-glib-compat.h to
nm-glib.h, include <gio/gio.h> from there, and then change all .c
files in NM to include "nm-glib.h" rather than including the glib
headers directly.

(Public headers files still have to include the real glib headers,
since nm-glib.h isn't installed...)

Also, remove glib includes from header files that are already
including a base object header file (which must itself already include
the glib headers).
2015-07-24 13:25:47 -04:00
Dan Winship
dd0e198955 include: add nm-dbus-compat.h
Add a file containing the defines like DBUS_INTERFACE_DBUS from
dbus-shared.h, and use it from the gdbus-using files.

Also, convert a bunch of other places that were previously hardcoding
the string values to use the defines instead, and fix the ifcfg-rh
plugin to properly namespace its own D-Bus-related defines.
2015-07-24 13:25:47 -04:00
Thomas Haller
8bca864111 core: move NM_DEFINE_SINGLETON macros to src/NetworkManagerUtils.h
NM_DEFINE_SINGLETON is used only by core and makes use of nm-logging.
It does not belong to "include/nm-macros-internal.h". Move it to "src/".
2015-07-24 18:07:16 +02:00
Beniamino Galvani
2e0d0bc050 ifcfg-rh: add support for Wake-on-LAN ethtool options
Based on branch danw/wip/ethtool by Dan Winship <danw@redhat.com>
2015-07-24 14:02:59 +02:00
Thomas Haller
6a5657896f keyfile: rename keyfile when user changes connection id
Originally, if you change the ID of a connection,
the existing keyfile will not be renamed. That means
after renaming a connection, it's keyfile name will
mismatch.

Now, when th user modifies a connection via D-Bus and changes
the connection it, rename the file.

https://bugzilla.gnome.org/show_bug.cgi?id=740738
2015-07-24 11:10:18 +02:00
Thomas Haller
238cb02ed6 keyfile: cleanup error messages in _internal_write_connection()
A GError should contain a nice, human readable error message. The
file:line prefix looks ugly. Also, the error messages are already
systemwide unique. So a user can easily grep for them and locate
the origin.
2015-07-24 11:04:01 +02:00
Thomas Haller
d5d34ec107 keyfile: refactor return paths in _internal_write_connection() 2015-07-24 11:04:01 +02:00
Thomas Haller
c0b03debc8 keyfile: add info logging when updating connection 2015-07-24 11:04:01 +02:00
Thomas Haller
c863d2ad0f keyfile: fix memleak of path in commit_changes() 2015-07-24 11:04:01 +02:00
Lubomir Rintel
063677101a ip4-config: 0.0.0.0 is a valid gateway too
It makes sense for point-to point links.

https://bugzilla.redhat.com/show_bug.cgi?id=1244483
2015-07-22 13:49:17 +02:00
Jiří Klimeš
819d3c3db1 settings: call dispatcher when setting hostname with systemd
Now that we set hostname with systemd, call dispatcher in nm-settings.c.
gethostname() in nm-policy.c already sees the new hostname.

Fixes: 6dc35e66d4
Fixes: 6c3d71c431
Fixes:Beaker:NetworkManager_Test44_dispatcher_hostname
2015-07-15 15:34:56 +02:00
Thomas Haller
a6e7b96963 settings: use _LOG() macros in "nm-settings-connection.c" 2015-07-12 13:56:53 +02:00
Thomas Haller
5fb56a1df9 settings: add _LOG() macros to "nm-settings-connection.h" 2015-07-12 13:56:52 +02:00
Thomas Haller
0a160116d7 settings/trivial: consistently name @self argument in NMSettingsConnection 2015-07-12 13:56:52 +02:00
Thomas Haller
0dcd7b2208 settings: refactor logging statement in nm_settings_connection_get_secrets() 2015-07-12 13:56:52 +02:00
Thomas Haller
7a3ab5c02f test: initialize tests with nmtst_init() 2015-07-12 13:56:52 +02:00
Thomas Haller
08b99eea10 settings: get_plugin() should return plugin that has all requested capabilities
This bug had no real consequences because we only called
get_plugin() with one capability at a time.
2015-07-07 16:55:31 +02:00