summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLubomir Rintel <lkundrak@v3.sk>2016-12-27 15:20:58 +0000
committerLubomir Rintel <lkundrak@v3.sk>2017-02-17 14:47:31 +0100
commit01a90312a5ee35c9eefaa6ae91a20f40fcd7d748 (patch)
treee39e148e3c6719f834d3b91a61a2dd42f0f2db74
parent5a5891575d6077a846c9ded11428cdfc8c301fea (diff)
downloadNetworkManager-01a90312a5ee35c9eefaa6ae91a20f40fcd7d748.tar.gz
XXX agent-manager: complete requests with matching setting only early
The requested setting being present should be sufficient in deciding whether to do early completion or not.
-rw-r--r--src/settings/nm-agent-manager.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/settings/nm-agent-manager.c b/src/settings/nm-agent-manager.c
index 0db20979ee..dedfc042e3 100644
--- a/src/settings/nm-agent-manager.c
+++ b/src/settings/nm-agent-manager.c
@@ -36,6 +36,7 @@
#include "nm-simple-connection.h"
#include "NetworkManagerUtils.h"
#include "nm-core-internal.h"
+#include "nm-setting-private.h"
#include "introspection/org.freedesktop.NetworkManager.AgentManager.h"
@@ -1130,6 +1131,8 @@ _con_get_try_complete_early (Request *req)
NMAgentManager *self;
gs_unref_variant GVariant *setting_secrets = NULL;
gs_unref_object NMConnection *tmp = NULL;
+ NMSetting *setting;
+ GPtrArray *needed_secrets;
GError *error = NULL;
self = req->self;
@@ -1154,18 +1157,30 @@ _con_get_try_complete_early (Request *req)
g_clear_error (&error);
return TRUE;
}
+
+ setting = nm_connection_get_setting_by_name (tmp, req->con.get.setting_name);
+ if (!setting)
+ return FALSE;
+
+ needed_secrets = _nm_setting_need_secrets (setting);
+
/* Do we have everything we need? */
if ( NM_FLAGS_HAS (req->con.get.flags, NM_SECRET_AGENT_GET_SECRETS_FLAG_ONLY_SYSTEM)
- || ( (nm_connection_need_secrets (tmp, NULL) == NULL)
+ || ( needed_secrets == NULL
&& !NM_FLAGS_HAS(req->con.get.flags, NM_SECRET_AGENT_GET_SECRETS_FLAG_REQUEST_NEW))) {
_LOGD (NULL, "("LOG_REQ_FMT") system settings secrets sufficient",
LOG_REQ_ARG (req));
/* Got everything, we're done */
req_complete (req, req->con.get.existing_secrets, NULL, NULL, NULL);
+ if (needed_secrets)
+ g_ptr_array_free (needed_secrets, FALSE);
return TRUE;
}
+ if (needed_secrets)
+ g_ptr_array_free (needed_secrets, FALSE);
+
_LOGD (NULL, "("LOG_REQ_FMT") system settings secrets insufficient, asking agents",
LOG_REQ_ARG (req));