static void import_vpn_from_file_cb (GtkWidget *dialog, gint response, gpointer user_data) { char *filename = NULL; ActionInfo *info = (ActionInfo *) user_data; GHashTableIter iter; gpointer key; NMVpnPluginUiInterface *plugin; NMConnection *connection = NULL; GError *error = NULL; if (response != GTK_RESPONSE_ACCEPT) goto out; filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); if (!filename) { g_warning ("%s: didn't get a filename back from the chooser!", __func__); goto out; } g_hash_table_iter_init (&iter, plugins); while (!connection && g_hash_table_iter_next (&iter, &key, (gpointer *)&plugin)) { g_clear_error (&error); connection = nm_vpn_plugin_ui_interface_import (plugin, filename, &error); } if (connection) info->callback (connection, info->user_data); else { GtkWidget *err_dialog; char *bname = g_path_get_basename (filename); err_dialog = gtk_message_dialog_new (NULL, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("Cannot import VPN connection")); gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (err_dialog), _("The file '%s' could not be read or does not contain recognized VPN connection information\n\nError: %s."), bname, error ? error->message : "unknown error"); g_free (bname); g_signal_connect (err_dialog, "delete-event", G_CALLBACK (gtk_widget_destroy), NULL); g_signal_connect (err_dialog, "response", G_CALLBACK (gtk_widget_destroy), NULL); gtk_widget_show_all (err_dialog); gtk_window_present (GTK_WINDOW (err_dialog)); } g_clear_error (&error); g_free (filename); out: gtk_widget_hide (dialog); gtk_widget_destroy (dialog); g_free (info); }
static void test_legacy_ike_port_1_import (NMVpnPluginUiInterface *plugin, const char *dir) { NMConnection *connection; NMSettingConnection *s_con; NMSettingVPN *s_vpn; GError *error = NULL; char *pcf; const char *expected_id = "Don't use Legacy IKE Port (500)"; const char *value; pcf = g_build_path ("/", dir, "use-legacy-ike-port-1.pcf", NULL); ASSERT (pcf != NULL, "use-legacy-ike-port-1", "failed to create pcf path"); connection = nm_vpn_plugin_ui_interface_import (plugin, pcf, &error); if (error) FAIL ("", "error importing %s: %s", pcf, error->message); ASSERT (connection != NULL, "use-legacy-ike-port-1", "error importing %s: (unknown)", pcf); /* Connection setting */ s_con = nm_connection_get_setting_connection (connection); ASSERT (s_con != NULL, "use-legacy-ike-port-1", "missing 'connection' setting"); ASSERT (strcmp (nm_setting_connection_get_id (s_con), expected_id) == 0, "use-legacy-ike-port-1", "unexpected connection ID"); /* VPN setting */ s_vpn = nm_connection_get_setting_vpn (connection); ASSERT (s_vpn != NULL, "use-legacy-ike-port-1", "missing 'vpn' setting"); value = nm_setting_vpn_get_data_item (s_vpn, NM_VPNC_KEY_LOCAL_PORT); ASSERT (value != NULL, "use-legacy-ike-port-1", "unexpected missing value for item %s", NM_VPNC_KEY_LOCAL_PORT); ASSERT (strcmp (value, "500") == 0, "use-legacy-ike-port-1", "unexpected value for item %s", NM_VPNC_KEY_LOCAL_PORT); g_free (pcf); }
static void test_nat_force_natt (NMVpnPluginUiInterface *plugin, const char *dir) { NMConnection *connection; NMSettingConnection *s_con; NMSettingVPN *s_vpn; GError *error = NULL; char *pcf; const char *expected_id = "Force NAT-T"; const char *value; pcf = g_build_path ("/", dir, "force-natt.pcf", NULL); ASSERT (pcf != NULL, "force-natt", "failed to create pcf path"); connection = nm_vpn_plugin_ui_interface_import (plugin, pcf, &error); if (error) FAIL ("force-natt", "error importing %s: %s", pcf, error->message); ASSERT (connection != NULL, "force-natt", "error importing %s: (unknown)", pcf); /* Connection setting */ s_con = nm_connection_get_setting_connection (connection); ASSERT (s_con != NULL, "force-natt", "missing 'connection' setting"); ASSERT (strcmp (nm_setting_connection_get_id (s_con), expected_id) == 0, "force-natt", "unexpected connection ID"); /* VPN setting */ s_vpn = nm_connection_get_setting_vpn (connection); ASSERT (s_vpn != NULL, "force-natt", "missing 'vpn' setting"); value = nm_setting_vpn_get_data_item (s_vpn, NM_VPNC_KEY_NAT_TRAVERSAL_MODE); ASSERT (value != NULL, "force-natt", "unexpected missing value for item %s", NM_VPNC_KEY_NAT_TRAVERSAL_MODE); ASSERT (strcmp (value, NM_VPNC_NATT_MODE_NATT_ALWAYS) == 0, "force-natt", "unexpected value for item %s", NM_VPNC_KEY_NAT_TRAVERSAL_MODE); g_free (pcf); }
static void test_everything_via_vpn (NMVpnPluginUiInterface *plugin, const char *dir) { NMConnection *connection; NMSettingConnection *s_con; NMSettingIP4Config *s_ip4; GError *error = NULL; char *pcf; const char *expected_id = "All your traffic are belong to VPN"; pcf = g_build_path ("/", dir, "everything-via-vpn.pcf", NULL); ASSERT (pcf != NULL, "everything-via-vpn", "failed to create pcf path"); connection = nm_vpn_plugin_ui_interface_import (plugin, pcf, &error); if (error) FAIL ("everything-via-vpn", "error importing %s: %s", pcf, error->message); ASSERT (connection != NULL, "everything-via-vpn", "error importing %s: (unknown)", pcf); /* Connection setting */ s_con = nm_connection_get_setting_connection (connection); ASSERT (s_con != NULL, "everything-via-vpn", "missing 'connection' setting"); ASSERT (strcmp (nm_setting_connection_get_id (s_con), expected_id) == 0, "everything-via-vpn", "unexpected connection ID"); /* IP4 setting */ s_ip4 = nm_connection_get_setting_ip4_config (connection); ASSERT (s_ip4 != NULL, "everything-via-vpn", "missing 'ip4-config' setting"); ASSERT (nm_setting_ip4_config_get_never_default (s_ip4) == FALSE, "everything-via-vpn", "never-default unexpectedly FALSE"); ASSERT (nm_setting_ip4_config_get_num_routes (s_ip4) == 0, "everything-via-vpn", "unexpected number of routes"); g_free (pcf); }
static void test_always_ask (NMVpnPluginUiInterface *plugin, const char *dir) { NMConnection *connection; NMSettingConnection *s_con; NMSettingVPN *s_vpn; GError *error = NULL; char *pcf; const char *expected_id = "Always Ask For Password"; const char *value; pcf = g_build_path ("/", dir, "always-ask.pcf", NULL); ASSERT (pcf != NULL, "always-ask", "failed to create pcf path"); connection = nm_vpn_plugin_ui_interface_import (plugin, pcf, &error); if (error) FAIL ("always-ask", "error importing %s: %s", pcf, error->message); ASSERT (connection != NULL, "always-ask", "error importing %s: (unknown)", pcf); /* Connection setting */ s_con = nm_connection_get_setting_connection (connection); ASSERT (s_con != NULL, "always-ask", "missing 'connection' setting"); ASSERT (strcmp (nm_setting_connection_get_id (s_con), expected_id) == 0, "always-ask", "unexpected connection ID"); /* VPN setting */ s_vpn = nm_connection_get_setting_vpn (connection); ASSERT (s_vpn != NULL, "always-ask", "missing 'vpn' setting"); value = nm_setting_vpn_get_data_item (s_vpn, NM_VPNC_KEY_XAUTH_PASSWORD_TYPE); ASSERT (value == NULL, "always-ask", "unexpected value for item %s", NM_VPNC_KEY_XAUTH_PASSWORD_TYPE); g_free (pcf); }
static NMConnection * get_basic_connection (const char *detail, NMVpnPluginUiInterface *plugin, const char *dir, const char *filename) { NMConnection *connection; GError *error = NULL; char *pcf; pcf = g_build_path ("/", dir, filename, NULL); ASSERT (pcf != NULL, "basic", "failed to create pcf path"); connection = nm_vpn_plugin_ui_interface_import (plugin, pcf, &error); if (error) FAIL ("basic", "error importing %s: %s", pcf, error->message); ASSERT (connection != NULL, "basic", "error importing %s: (unknown)", pcf); g_free (pcf); return connection; }