From 1d0e0eeffd92f53d6682cd8f4b3e1ba90997e4c5 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Mon, 30 May 2016 15:42:44 +0200 Subject: [PATCH] manager: add Reload() D-Bus command Add new Reload D-Bus command to reload NetworkManager configuration. For now, this is like sending SIGHUP to the process. There are several advantages here: - it is guarded via PolicyKit authentication while signals can only be sent by root. - the user can wait for the reload to be complete instead of sending an asynchronous signal. For now, we operation completes after nm_config_reload() returns, but later we could delay the response further until specific parts are fully reloaded. - SIGHUP reloads everything including re-reading configuration from disk while SIGUSR1 reloads just certain parts such as writing out DNS configuration anew. Now, the Reload command has a flags argument which is more granular in selecting parts which are to be reloaded. For example, via signals the user can: 1) send SIGUSR1: this writes out the DNS configuration to resolv.conf and possibly reloads other parts without re-reading configuration and without restarting the DNS plugin. 2) send SIGHUP: this reloads configuration from disk, writes out resolv.conf and restarts the DNS plugin. There is no way, to only restart the DNS plugin without also reloading everything else. --- clients/cli/general.c | 3 + data/NetworkManager.service.in | 1 + introspection/nm-manager.xml | 9 ++ libnm-core/nm-errors.h | 2 + libnm-glib/nm-client.c | 3 + libnm-glib/nm-client.h | 5 +- libnm/nm-client.h | 4 +- libnm/nm-manager.c | 3 + man/nmcli-examples.xml | 3 +- po/POTFILES.skip | 1 + ...rg.freedesktop.NetworkManager.policy.in.in | 10 +++ src/nm-audit-manager.h | 1 + src/nm-auth-utils.h | 1 + src/nm-manager.c | 86 +++++++++++++++++++ tools/test-networkmanager-service.py | 1 + 15 files changed, 130 insertions(+), 3 deletions(-) diff --git a/clients/cli/general.c b/clients/cli/general.c index 04c51c4849..f39351dba2 100644 --- a/clients/cli/general.c +++ b/clients/cli/general.c @@ -399,6 +399,7 @@ show_nm_status (NmCli *nmc, const char *pretty_header_name, const char *print_fl #define NM_AUTH_PERMISSION_SETTINGS_MODIFY_OWN "org.freedesktop.NetworkManager.settings.modify.own" #define NM_AUTH_PERMISSION_SETTINGS_MODIFY_HOSTNAME "org.freedesktop.NetworkManager.settings.modify.hostname" #define NM_AUTH_PERMISSION_SETTINGS_MODIFY_GLOBAL_DNS "org.freedesktop.NetworkManager.settings.modify.global-dns" +#define NM_AUTH_PERMISSION_RELOAD "org.freedesktop.NetworkManager.reload" static const char * permission_to_string (NMClientPermission perm) @@ -428,6 +429,8 @@ permission_to_string (NMClientPermission perm) return NM_AUTH_PERMISSION_SETTINGS_MODIFY_HOSTNAME; case NM_CLIENT_PERMISSION_SETTINGS_MODIFY_GLOBAL_DNS: return NM_AUTH_PERMISSION_SETTINGS_MODIFY_GLOBAL_DNS; + case NM_CLIENT_PERMISSION_RELOAD: + return NM_AUTH_PERMISSION_RELOAD; default: return _("unknown"); } diff --git a/data/NetworkManager.service.in b/data/NetworkManager.service.in index 7946ac18d1..e37ed7dda5 100644 --- a/data/NetworkManager.service.in +++ b/data/NetworkManager.service.in @@ -7,6 +7,7 @@ Before=network.target @DISTRO_NETWORK_SERVICE@ [Service] Type=dbus BusName=org.freedesktop.NetworkManager +#ExecReload=/usr/bin/dbus-send --print-reply --system --type=method_call --dest=org.freedesktop.NetworkManager /org/freedesktop/NetworkManager org.freedesktop.NetworkManager.Reload uint32:0 ExecReload=/bin/kill -HUP $MAINPID ExecStart=@sbindir@/NetworkManager --no-daemon Restart=on-failure diff --git a/introspection/nm-manager.xml b/introspection/nm-manager.xml index e5cb23a563..ba898a78c8 100644 --- a/introspection/nm-manager.xml +++ b/introspection/nm-manager.xml @@ -3,6 +3,15 @@ + + + + +