diff options
author | Beniamino Galvani <bgalvani@redhat.com> | 2021-04-29 18:01:12 +0200 |
---|---|---|
committer | Beniamino Galvani <bgalvani@redhat.com> | 2021-06-10 18:09:03 +0200 |
commit | 9d15ae640d9df6e7b01b10db6b4825c4a51c3bc3 (patch) | |
tree | 1cbfefc2d283cbabf50c14d91771a71de0a1ba35 | |
parent | ecda9fb41a233f938af5b05d761fcfadeaa9fb2b (diff) | |
download | NetworkManager-9d15ae640d9df6e7b01b10db6b4825c4a51c3bc3.tar.gz |
nmcli: invoke Reload() D-Bus method asynchronously
Invoke Reload() asynchronously and run the main loop. In this way, the
polkit agent built into nmcli can be used to authenticate the reload
request.
Fixes: 5afcf9c045ad ('cli: add 'general reload' command')
(cherry picked from commit 1d82c39bfa8e1a1495713988afc7ec62c0bb2714)
-rw-r--r-- | clients/cli/general.c | 55 |
1 files changed, 35 insertions, 20 deletions
diff --git a/clients/cli/general.c b/clients/cli/general.c index 4404ff05f7..b1182709f7 100644 --- a/clients/cli/general.c +++ b/clients/cli/general.c @@ -10,6 +10,7 @@ #include "nm-libnm-core-intern/nm-common-macros.h" #include "nm-client-utils.h" +#include "nm-glib-aux/nm-dbus-aux.h" #include "polkit-agent.h" #include "utils.h" @@ -600,14 +601,30 @@ show_nm_permissions(NmCli *nmc) } static void +reload_cb(GObject *source, GAsyncResult *result, gpointer user_data) +{ + NmCli * nmc = user_data; + gs_free_error GError *error = NULL; + gs_unref_variant GVariant *ret = NULL; + + ret = nm_dbus_call_finish(result, &error); + if (error) { + g_string_printf(nmc->return_text, + _("Error: failed to reload: %s"), + nmc_error_get_simple_message(error)); + nmc->return_value = NMC_RESULT_ERROR_UNKNOWN; + } + + quit(); +} + +static void do_general_reload(const NMCCommand *cmd, NmCli *nmc, int argc, const char *const *argv) { - gs_unref_variant GVariant *result = NULL; - gs_free_error GError *error = NULL; - gs_free const char ** values = NULL; - gs_free char * err_token = NULL; - gs_free char * joined = NULL; - int flags = 0; + gs_free const char **values = NULL; + gs_free char * err_token = NULL; + gs_free char * joined = NULL; + int flags = 0; next_arg(nmc, &argc, &argv, NULL); @@ -650,20 +667,18 @@ do_general_reload(const NMCCommand *cmd, NmCli *nmc, int argc, const char *const return; } - result = nmc_dbus_call_sync(nmc, - "/org/freedesktop/NetworkManager", - "org.freedesktop.NetworkManager", - "Reload", - g_variant_new("(u)", flags), - G_VARIANT_TYPE("()"), - &error); - - if (error) { - g_string_printf(nmc->return_text, - _("Error: failed to reload: %s"), - nmc_error_get_simple_message(error)); - nmc->return_value = NMC_RESULT_ERROR_UNKNOWN; - } + nmc->should_wait++; + nm_dbus_call(G_BUS_TYPE_SYSTEM, + NM_DBUS_SERVICE, + NM_DBUS_PATH, + NM_DBUS_INTERFACE, + "Reload", + g_variant_new("(u)", flags), + G_VARIANT_TYPE("()"), + NULL, + (nmc->timeout == -1 ? 90 : nmc->timeout) * 1000, + reload_cb, + nmc); } static void |