summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLubomir Rintel <lkundrak@v3.sk>2019-04-03 08:59:08 +0200
committerLubomir Rintel <lkundrak@v3.sk>2019-04-03 08:59:08 +0200
commitacd734e7b7a4548a9499a649f7f79c4b1179faf4 (patch)
tree52d0292496617bc2b6bed620bcbb42845f4d091b
parentb027723e00679f2b709880407a6ff24583faeae3 (diff)
parentee73c560b95cce3d6cbd3a905b3e56a63643f4b6 (diff)
downloadNetworkManager-acd734e7b7a4548a9499a649f7f79c4b1179faf4.tar.gz
merge: branch lr/agent-hints
https://github.com/NetworkManager/NetworkManager/pull/328
-rw-r--r--clients/common/nm-secret-agent-simple.c45
1 files changed, 29 insertions, 16 deletions
diff --git a/clients/common/nm-secret-agent-simple.c b/clients/common/nm-secret-agent-simple.c
index cd3ce2eeea..ca486f4f28 100644
--- a/clients/common/nm-secret-agent-simple.c
+++ b/clients/common/nm-secret-agent-simple.c
@@ -741,16 +741,8 @@ try_spawn_vpn_auth_helper (RequestData *request,
GPtrArray *secrets)
{
NMSettingVpn *s_vpn = nm_connection_get_setting_vpn (request->connection);
- NMVpnPluginInfo *plugin_info;
- gboolean supports_external;
- const char *auth_dialog_argv[] = { NULL,
- "-u", nm_connection_get_uuid (request->connection),
- "-n", nm_connection_get_id (request->connection),
- "-s", nm_setting_vpn_get_service_type (s_vpn),
- "--external-ui-mode",
- "-i",
- NULL, /* [9], slot for "-r" */
- NULL };
+ gs_unref_ptrarray GPtrArray *auth_dialog_argv = NULL;
+ NMVpnPluginInfo *plugin_info;
const char *s;
GPid auth_dialog_pid;
int auth_dialog_in_fd;
@@ -762,6 +754,7 @@ try_spawn_vpn_auth_helper (RequestData *request,
char *auth_dialog_request_str;
gsize auth_dialog_request_len;
AuthDialogData *data;
+ int i;
plugin_info = nm_vpn_plugin_info_list_find_by_service (nm_vpn_get_plugin_infos (),
nm_setting_vpn_get_service_type (s_vpn));
@@ -769,17 +762,37 @@ try_spawn_vpn_auth_helper (RequestData *request,
return FALSE;
s = nm_vpn_plugin_info_lookup_property (plugin_info, "GNOME", "supports-external-ui-mode");
- supports_external = _nm_utils_ascii_str_to_bool (s, FALSE);
- if (!supports_external)
+ if (!_nm_utils_ascii_str_to_bool (s, FALSE))
return FALSE;
- auth_dialog_argv[0] = nm_vpn_plugin_info_lookup_property (plugin_info, "GNOME", "auth-dialog");
- g_return_val_if_fail (auth_dialog_argv[0], FALSE);
+ auth_dialog_argv = g_ptr_array_new ();
+
+ s = nm_vpn_plugin_info_lookup_property (plugin_info, "GNOME", "auth-dialog");
+ g_return_val_if_fail (s, FALSE);
+ g_ptr_array_add (auth_dialog_argv, (gpointer) s);
+
+ g_ptr_array_add (auth_dialog_argv, "-u");
+ g_ptr_array_add (auth_dialog_argv, (gpointer) nm_connection_get_uuid (request->connection));
+ g_ptr_array_add (auth_dialog_argv, "-n");
+ g_ptr_array_add (auth_dialog_argv, (gpointer) nm_connection_get_id (request->connection));
+ g_ptr_array_add (auth_dialog_argv, "-s");
+ g_ptr_array_add (auth_dialog_argv, (gpointer) nm_setting_vpn_get_service_type (s_vpn));
+ g_ptr_array_add (auth_dialog_argv, "--external-ui-mode");
+ g_ptr_array_add (auth_dialog_argv, "-i");
if (request->flags & NM_SECRET_AGENT_GET_SECRETS_FLAG_REQUEST_NEW)
- auth_dialog_argv[9] = "-r";
+ g_ptr_array_add (auth_dialog_argv, "-r");
+
+ s = nm_vpn_plugin_info_lookup_property (plugin_info, "GNOME", "supports-hints");
+ if (_nm_utils_ascii_str_to_bool (s, FALSE)) {
+ for (i = 0; request->hints[i]; i++) {
+ g_ptr_array_add (auth_dialog_argv, "-t");
+ g_ptr_array_add (auth_dialog_argv, request->hints[i]);
+ }
+ }
- if (!g_spawn_async_with_pipes (NULL, (char **)auth_dialog_argv, NULL,
+ g_ptr_array_add (auth_dialog_argv, NULL);
+ if (!g_spawn_async_with_pipes (NULL, (char **) auth_dialog_argv->pdata, NULL,
G_SPAWN_DO_NOT_REAP_CHILD,
NULL, NULL,
&auth_dialog_pid,