diff options
author | Lubomir Rintel <lkundrak@v3.sk> | 2016-12-27 15:20:58 +0000 |
---|---|---|
committer | Lubomir Rintel <lkundrak@v3.sk> | 2017-02-17 14:47:31 +0100 |
commit | 01a90312a5ee35c9eefaa6ae91a20f40fcd7d748 (patch) | |
tree | e39e148e3c6719f834d3b91a61a2dd42f0f2db74 | |
parent | 5a5891575d6077a846c9ded11428cdfc8c301fea (diff) | |
download | NetworkManager-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.c | 17 |
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)); |