summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBeniamino Galvani <bgalvani@redhat.com>2016-06-20 15:11:01 +0200
committerBeniamino Galvani <bgalvani@redhat.com>2016-06-20 16:42:06 +0200
commit5af1dbe43d8babc78a49801a524b35bfca7c228e (patch)
tree7bd66279c553515d9d98d796986b3dbeac623e0b
parent018135d2e21d1295f986b143ee5908c66c494292 (diff)
downloadNetworkManager-5af1dbe43d8babc78a49801a524b35bfca7c228e.tar.gz
core: secret-agent: use the new CancelGetSecretsWithReason() method
-rw-r--r--src/settings/nm-secret-agent.c87
1 files changed, 76 insertions, 11 deletions
diff --git a/src/settings/nm-secret-agent.c b/src/settings/nm-secret-agent.c
index 8bc88fd4d6..b2e38b682f 100644
--- a/src/settings/nm-secret-agent.c
+++ b/src/settings/nm-secret-agent.c
@@ -155,6 +155,36 @@ request_check_return (Request *r)
/*************************************************************/
+typedef struct {
+ char *path;
+ char *setting;
+ char *agent;
+} CancelInfo;
+
+static CancelInfo *
+cancel_info_new (NMSecretAgent *agent, const char *setting, const char *path)
+{
+ CancelInfo *info;
+
+ info = g_slice_new (CancelInfo);
+ info->agent = g_strdup (nm_secret_agent_get_description (agent));
+ info->setting = g_strdup (setting);
+ info->path = g_strdup (path);
+
+ return info;
+}
+
+static void
+cancel_info_free (CancelInfo *info)
+{
+ g_free (info->agent);
+ g_free (info->path);
+ g_free (info->setting);
+ g_slice_free (CancelInfo, info);
+}
+
+/*************************************************************/
+
static char *
_create_description (const char *dbus_owner, const char *identifier, gulong uid)
{
@@ -383,17 +413,49 @@ nm_secret_agent_get_secrets (NMSecretAgent *self,
static void
cancel_done (GObject *proxy, GAsyncResult *result, gpointer user_data)
{
- char *description = user_data;
- GError *error = NULL;
+ CancelInfo *info = user_data;
+ gs_free_error GError *error = NULL;
+ gboolean r;
+
+ r = nmdbus_secret_agent_call_cancel_get_secrets_finish (NMDBUS_SECRET_AGENT (proxy),
+ result,
+ &error);
- if (!nmdbus_secret_agent_call_cancel_get_secrets_finish (NMDBUS_SECRET_AGENT (proxy), result, &error)) {
+ if (!r) {
nm_log_dbg (LOGD_AGENTS, "%s%s%s: agent failed to cancel secrets: %s",
- NM_PRINT_FMT_QUOTED (description, "(", description, ")", "???"),
+ NM_PRINT_FMT_QUOTED (info->agent, "(", info->agent, ")", "???"),
+ error->message);
+ }
+
+ cancel_info_free (info);
+}
+
+static void
+cancel_with_reason_done (GObject *proxy, GAsyncResult *result, gpointer user_data)
+{
+ CancelInfo *info = user_data;
+ gs_free_error GError *error = NULL;
+ gboolean r;
+
+ r = nmdbus_secret_agent_call_cancel_get_secrets_with_reason_finish (NMDBUS_SECRET_AGENT (proxy),
+ result,
+ &error);
+ if (!r) {
+ nm_log_dbg (LOGD_AGENTS, "%s%s%s: agent failed to cancel secrets with reason: %s",
+ NM_PRINT_FMT_QUOTED (info->agent, "(", info->agent, ")", "???"),
error->message);
- g_clear_error (&error);
+
+ if (g_error_matches (error, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD)) {
+ nmdbus_secret_agent_call_cancel_get_secrets (NMDBUS_SECRET_AGENT (proxy),
+ info->path, info->setting,
+ NULL,
+ cancel_done,
+ info);
+ return;
+ }
}
- g_free (description);
+ cancel_info_free (info);
}
static void
@@ -403,6 +465,7 @@ do_cancel_secrets (NMSecretAgent *self, Request *r, gboolean disposing)
GCancellable *cancellable;
NMSecretAgentCallback callback;
gpointer callback_data;
+ CancelInfo *info;
g_return_if_fail (r->agent == self);
g_return_if_fail (r->cancellable);
@@ -410,11 +473,13 @@ do_cancel_secrets (NMSecretAgent *self, Request *r, gboolean disposing)
if ( r->is_get_secrets
&& priv->proxy) {
/* for GetSecrets call, we must cancel the request. */
- nmdbus_secret_agent_call_cancel_get_secrets (priv->proxy,
- r->path, r->setting_name,
- NULL,
- cancel_done,
- g_strdup (nm_secret_agent_get_description (self)));
+ info = cancel_info_new (r->agent, r->setting_name, r->path);
+ nmdbus_secret_agent_call_cancel_get_secrets_with_reason (priv->proxy,
+ r->path, r->setting_name,
+ NM_SECRET_AGENT_CANCEL_REASON_CANCELED,
+ NULL,
+ cancel_with_reason_done,
+ info);
}
cancellable = r->cancellable;