summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2022-11-16 21:25:30 +0100
committerThomas Haller <thaller@redhat.com>2022-11-17 12:38:45 +0100
commite65a19781e3ceb5e910f0aee13c18da683a97653 (patch)
treed6c7910a6cd93d1218a62ac45c4cf7d9b7162ef4
parent3ff5b6cc984162c27949139306bd5acb9a6ea0e0 (diff)
downloadnetwork-manager-applet-e65a19781e3ceb5e910f0aee13c18da683a97653.tar.gz
c-e: honor selected VPN plugin during import
When calling nm-connection-editor -i basic.pcf -t vpn:vpnc then the import should only try the VPNC plugin. For that to work, we need to honor the detail and pass it on to the import code, to only use the selected VPN plugin.
-rw-r--r--src/connection-editor/connection-helpers.c39
-rw-r--r--src/connection-editor/connection-helpers.h5
-rw-r--r--src/connection-editor/nm-connection-list.c4
3 files changed, 36 insertions, 12 deletions
diff --git a/src/connection-editor/connection-helpers.c b/src/connection-editor/connection-helpers.c
index 7ef75c67..a58a2fbb 100644
--- a/src/connection-editor/connection-helpers.c
+++ b/src/connection-editor/connection-helpers.c
@@ -163,7 +163,10 @@ no_description:
}
NMConnection *
-connection_import_from_file (const char *filename, GType ctype, GError **error)
+connection_import_from_file (const char *filename,
+ GType ctype,
+ const char *vpn_detail,
+ GError **error)
{
gs_free_error GError *unused_error = NULL;
NMConnection *connection = NULL;
@@ -181,14 +184,32 @@ connection_import_from_file (const char *filename, GType ctype, GError **error)
}
if (NM_IN_SET (ctype, G_TYPE_INVALID, NM_TYPE_SETTING_VPN)) {
- for (iter = vpn_get_plugin_infos (); !connection && iter; iter = iter->next) {
- NMVpnEditorPlugin *plugin;
+ GSList *plugin_infos = vpn_get_plugin_infos ();
+ NMVpnPluginInfo *plugin_info;
+ NMVpnEditorPlugin *plugin;
- plugin = nm_vpn_plugin_info_get_editor_plugin (iter->data);
- g_clear_error (error);
- connection = nm_vpn_editor_plugin_import (plugin, filename, error);
- if (connection)
- break;
+ if (vpn_detail) {
+ gs_free char *service_type = NULL;
+
+ if ((service_type =
+ nm_vpn_plugin_info_list_find_service_type (plugin_infos, vpn_detail)) &&
+ (plugin_info =
+ nm_vpn_plugin_info_list_find_by_service (plugin_infos, service_type))) {
+ plugin = nm_vpn_plugin_info_get_editor_plugin (plugin_info);
+ connection = nm_vpn_editor_plugin_import (plugin, filename, error);
+ } else {
+ g_set_error (error, NMA_ERROR, NMA_ERROR_GENERIC,
+ _("VPN plugin “%s” not found"), vpn_detail);
+ }
+ } else {
+ for (iter = plugin_infos; iter; iter = iter->next) {
+ plugin_info = iter->data;
+ plugin = nm_vpn_plugin_info_get_editor_plugin (plugin_info);
+ g_clear_error (error);
+ connection = nm_vpn_editor_plugin_import (plugin, filename, error);
+ if (connection)
+ break;
+ }
}
if (connection) {
@@ -248,7 +269,7 @@ import_vpn_from_file_cb (GtkWidget *dialog, gint response, gpointer user_data)
}
canceled = FALSE;
- connection = connection_import_from_file (filename, G_TYPE_INVALID, &error);
+ connection = connection_import_from_file (filename, G_TYPE_INVALID, NULL, &error);
if (!connection) {
/* pass */
} else if (nm_streq (nm_connection_get_connection_type (connection),
diff --git a/src/connection-editor/connection-helpers.h b/src/connection-editor/connection-helpers.h
index af9985ff..37a8ad40 100644
--- a/src/connection-editor/connection-helpers.h
+++ b/src/connection-editor/connection-helpers.h
@@ -73,7 +73,10 @@ gboolean connection_supports_proxy (NMConnection *connection);
gboolean connection_supports_ip4 (NMConnection *connection);
gboolean connection_supports_ip6 (NMConnection *connection);
-NMConnection *connection_import_from_file (const char *filename, GType ctype, GError **error);
+NMConnection *connection_import_from_file (const char *filename,
+ GType ctype,
+ const char *vpn_detail,
+ GError **error);
#endif /* __CONNECTION_HELPERS_H__ */
diff --git a/src/connection-editor/nm-connection-list.c b/src/connection-editor/nm-connection-list.c
index d0271e36..1eb0a4c2 100644
--- a/src/connection-editor/nm-connection-list.c
+++ b/src/connection-editor/nm-connection-list.c
@@ -1045,13 +1045,13 @@ nm_connection_list_create (NMConnectionList *list,
if (import_filename) {
if (ctype == G_TYPE_INVALID) {
- connection = connection_import_from_file (import_filename, ctype, NULL);
+ connection = connection_import_from_file (import_filename, ctype, NULL, NULL);
if (!connection) {
g_set_error (&error, NMA_ERROR, NMA_ERROR_GENERIC,
_ ("Unrecognized connection type"));
}
} else if (NM_IN_SET (ctype, NM_TYPE_SETTING_VPN, NM_TYPE_SETTING_WIREGUARD)) {
- connection = connection_import_from_file (import_filename, ctype, &error);
+ connection = connection_import_from_file (import_filename, ctype, detail, &error);
} else {
g_set_error (&error, NMA_ERROR, NMA_ERROR_GENERIC,
_("Don’t know how to import “%s” connections"), g_type_name (ctype));