diff options
| author | Michael Biebl <biebl@debian.org> | 2020-04-11 21:28:04 +0200 |
|---|---|---|
| committer | Michael Biebl <biebl@debian.org> | 2020-04-11 21:28:04 +0200 |
| commit | 1e5977b62f896e844b548c3007ace9e1dfa7f9ed (patch) | |
| tree | 7a7416ed410e72b6200f3d860fd315ec11cc106b /clients/cli/agent.c | |
| parent | b012fa6e1d808e0736c009799c62d835cbfcc1dd (diff) | |
New upstream version 1.23.90 upstream/1.23.90
Diffstat (limited to 'clients/cli/agent.c')
| -rw-r--r-- | clients/cli/agent.c | 96 |
1 files changed, 56 insertions, 40 deletions
diff --git a/clients/cli/agent.c b/clients/cli/agent.c index f4057df9..f3707db7 100644 --- a/clients/cli/agent.c +++ b/clients/cli/agent.c @@ -5,8 +5,6 @@ #include "nm-default.h" -#include "agent.h" - #include <stdio.h> #include <stdlib.h> #include <readline/readline.h> @@ -16,6 +14,7 @@ #include "utils.h" #include "nm-secret-agent-simple.h" #include "polkit-agent.h" +#include "nm-polkit-listener.h" static void usage (void) @@ -122,12 +121,12 @@ secrets_requested (NMSecretAgentSimple *agent, success ? secrets : NULL); } -static NMCResultCode -do_agent_secret (NmCli *nmc, int argc, char **argv) +static void +do_agent_secret (const NMCCommand *cmd, NmCli *nmc, int argc, const char *const*argv) { next_arg (nmc, &argc, &argv, NULL); if (nmc->complete) - return nmc->return_value; + return; /* Create secret agent */ nmc->secret_agent = nm_secret_agent_simple_new ("nmcli-agent"); @@ -145,76 +144,93 @@ do_agent_secret (NmCli *nmc, int argc, char **argv) g_string_printf (nmc->return_text, _("Error: secret agent initialization failed")); nmc->return_value = NMC_RESULT_ERROR_UNKNOWN; } +} - return nmc->return_value; +static void +polkit_registered (gpointer instance, + gpointer user_data) +{ + g_print (_("nmcli successfully registered as a polkit agent.\n")); +} + +static void +polkit_error (gpointer instance, + const char *error, + gpointer user_data) +{ + g_main_loop_quit (loop); } -static NMCResultCode -do_agent_polkit (NmCli *nmc, int argc, char **argv) +static void +do_agent_polkit (const NMCCommand *cmd, NmCli *nmc, int argc, const char *const*argv) { - GError *error = NULL; + gs_free_error GError *error = NULL; next_arg (nmc, &argc, &argv, NULL); if (nmc->complete) - return nmc->return_value; + return; - /* Initialize polkit agent */ if (!nmc_polkit_agent_init (nmc, TRUE, &error)) { g_dbus_error_strip_remote_error (error); - g_string_printf (nmc->return_text, _("Error: polkit agent initialization failed: %s"), + g_string_printf (nmc->return_text, + _("Error: polkit agent initialization failed: %s"), error->message); nmc->return_value = NMC_RESULT_ERROR_UNKNOWN; - g_error_free (error); } else { /* We keep running */ nmc->should_wait++; - - g_print (_("nmcli successfully registered as a polkit agent.\n")); + g_signal_connect (nmc->pk_listener, + NM_POLKIT_LISTENER_SIGNAL_ERROR, + G_CALLBACK (polkit_error), + NULL); + g_signal_connect (nmc->pk_listener, + NM_POLKIT_LISTENER_SIGNAL_REGISTERED, + G_CALLBACK (polkit_registered), + NULL); + + /* keep running */ + nmc->should_wait++; } - - return nmc->return_value; } -static NMCResultCode -do_agent_all (NmCli *nmc, int argc, char **argv) +static void +do_agent_all (const NMCCommand *cmd, NmCli *nmc, int argc, const char *const*argv) { - NMCResultCode secret_res; + NMCResultCode r; next_arg (nmc, &argc, &argv, NULL); if (nmc->complete) - return nmc->return_value; + return; /* Run both secret and polkit agent */ - secret_res = do_agent_secret (nmc, argc, argv); - if (secret_res != NMC_RESULT_SUCCESS) { + do_agent_secret (cmd, nmc, argc, argv); + r = nmc->return_value; + if (r != NMC_RESULT_SUCCESS) { g_printerr ("%s\n", nmc->return_text->str); g_string_truncate (nmc->return_text, 0); + nmc->return_value = NMC_RESULT_SUCCESS; } - nmc->return_value = do_agent_polkit (nmc, argc, argv); + do_agent_polkit (cmd, nmc, argc, argv); if (nmc->return_value != NMC_RESULT_SUCCESS) { g_printerr ("%s\n", nmc->return_text->str); g_string_truncate (nmc->return_text, 0); } - if (nmc->return_value == NMC_RESULT_SUCCESS && secret_res != NMC_RESULT_SUCCESS) - nmc->return_value = secret_res; - - return nmc->return_value; + if (r != NMC_RESULT_SUCCESS) + nmc->return_value = r; } -static const NMCCommand agent_cmds[] = { - { "secret", do_agent_secret, usage_agent_secret, TRUE, TRUE }, - { "polkit", do_agent_polkit, usage_agent_polkit, TRUE, TRUE }, - { "all", do_agent_all, usage_agent_all, TRUE, TRUE }, - { NULL, do_agent_all, usage, TRUE, TRUE }, -}; - -NMCResultCode -do_agent (NmCli *nmc, int argc, char **argv) +void +nmc_command_func_agent (const NMCCommand *cmd, NmCli *nmc, int argc, const char *const*argv) { - next_arg (nmc, &argc, &argv, NULL); - nmc_do_cmd (nmc, agent_cmds, *argv, argc, argv); + static const NMCCommand cmds[] = { + { "secret", do_agent_secret, usage_agent_secret, TRUE, TRUE }, + { "polkit", do_agent_polkit, usage_agent_polkit, TRUE, TRUE }, + { "all", do_agent_all, usage_agent_all, TRUE, TRUE }, + { NULL, do_agent_all, usage, TRUE, TRUE }, + }; - return nmc->return_value; + next_arg (nmc, &argc, &argv, NULL); + nmc_do_cmd (nmc, cmds, *argv, argc, argv); } |