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: 5afcf9c045 ('cli: add 'general reload' command')
(cherry picked from commit 1d82c39bfa)
This commit is contained in:
Beniamino Galvani 2021-04-29 18:01:12 +02:00
parent ecda9fb41a
commit 9d15ae640d

View file

@ -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"
@ -599,15 +600,31 @@ show_nm_permissions(NmCli *nmc)
return TRUE;
}
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