void vpn_connection_new (GtkWindow *parent, PageNewConnectionResultFunc result_func, PageGetConnectionsFunc get_connections_func, gpointer user_data) { char *service = NULL; NMConnection *connection; NMSetting *s_vpn; service = vpn_ask_connection_type (parent); if (!service) { (*result_func) (NULL, TRUE, NULL, user_data); return; } connection = ce_page_new_connection (_("VPN connection %d"), NM_SETTING_VPN_SETTING_NAME, FALSE, get_connections_func, user_data); s_vpn = nm_setting_vpn_new (); g_object_set (s_vpn, NM_SETTING_VPN_SERVICE_TYPE, service, NULL); g_free (service); nm_connection_add_setting (connection, s_vpn); (*result_func) (connection, FALSE, NULL, user_data); }
static void test_setting_vpn_items (void) { NMSettingVPN *s_vpn; s_vpn = (NMSettingVPN *) nm_setting_vpn_new (); ASSERT (s_vpn != NULL, "vpn-items", "error creating vpn setting"); nm_setting_vpn_add_data_item (s_vpn, "foobar1", "blahblah1"); nm_setting_vpn_add_data_item (s_vpn, "foobar2", "blahblah2"); nm_setting_vpn_add_data_item (s_vpn, "foobar3", "blahblah3"); nm_setting_vpn_add_data_item (s_vpn, "foobar4", "blahblah4"); /* Ensure that added values are all present */ nm_setting_vpn_foreach_data_item (s_vpn, vpn_check_func, "vpn-data"); nm_setting_vpn_remove_data_item (s_vpn, "foobar1"); nm_setting_vpn_remove_data_item (s_vpn, "foobar2"); nm_setting_vpn_remove_data_item (s_vpn, "foobar3"); nm_setting_vpn_remove_data_item (s_vpn, "foobar4"); nm_setting_vpn_add_secret (s_vpn, "foobar1", "blahblah1"); nm_setting_vpn_add_secret (s_vpn, "foobar2", "blahblah2"); nm_setting_vpn_add_secret (s_vpn, "foobar3", "blahblah3"); nm_setting_vpn_add_secret (s_vpn, "foobar4", "blahblah4"); /* Ensure that added values are all present */ nm_setting_vpn_foreach_secret (s_vpn, vpn_check_func, "vpn-secrets"); nm_setting_vpn_remove_secret (s_vpn, "foobar1"); nm_setting_vpn_remove_secret (s_vpn, "foobar2"); nm_setting_vpn_remove_secret (s_vpn, "foobar3"); nm_setting_vpn_remove_secret (s_vpn, "foobar4"); /* Try to add some blank values and make sure they are rejected */ nm_setting_vpn_add_data_item (s_vpn, NULL, NULL); nm_setting_vpn_add_data_item (s_vpn, "", ""); nm_setting_vpn_add_data_item (s_vpn, "foobar1", NULL); nm_setting_vpn_add_data_item (s_vpn, "foobar1", ""); nm_setting_vpn_add_data_item (s_vpn, NULL, "blahblah1"); nm_setting_vpn_add_data_item (s_vpn, "", "blahblah1"); nm_setting_vpn_foreach_data_item (s_vpn, vpn_check_empty_func, "vpn-data-empty"); /* Try to add some blank secrets and make sure they are rejected */ nm_setting_vpn_add_secret (s_vpn, NULL, NULL); nm_setting_vpn_add_secret (s_vpn, "", ""); nm_setting_vpn_add_secret (s_vpn, "foobar1", NULL); nm_setting_vpn_add_secret (s_vpn, "foobar1", ""); nm_setting_vpn_add_secret (s_vpn, NULL, "blahblah1"); nm_setting_vpn_add_secret (s_vpn, "", "blahblah1"); nm_setting_vpn_foreach_secret (s_vpn, vpn_check_empty_func, "vpn-secrets-empty"); g_object_unref (s_vpn); }
static gboolean update_connection (NMVpnPluginUiWidgetInterface *iface, NMConnection *connection, GError **error) { L2tpPluginUiWidget *self = L2TP_PLUGIN_UI_WIDGET (iface); L2tpPluginUiWidgetPrivate *priv = L2TP_PLUGIN_UI_WIDGET_GET_PRIVATE (self); NMSettingVPN *s_vpn; GtkWidget *widget; const char *str; gboolean valid = FALSE; if (!check_validity (self, error)) return FALSE; s_vpn = NM_SETTING_VPN (nm_setting_vpn_new ()); g_object_set (s_vpn, NM_SETTING_VPN_SERVICE_TYPE, NM_DBUS_SERVICE_L2TP, NULL); /* Gateway */ widget = glade_xml_get_widget (priv->xml, "gateway_entry"); str = gtk_entry_get_text (GTK_ENTRY (widget)); if (str && strlen (str)) nm_setting_vpn_add_data_item (s_vpn, NM_L2TP_KEY_GATEWAY, str); /* Username */ widget = glade_xml_get_widget (priv->xml, "user_entry"); str = gtk_entry_get_text (GTK_ENTRY (widget)); if (str && strlen (str)) nm_setting_vpn_add_data_item (s_vpn, NM_L2TP_KEY_USER, str); /* Domain */ widget = glade_xml_get_widget (priv->xml, "domain_entry"); str = gtk_entry_get_text (GTK_ENTRY (widget)); if (str && strlen (str)) nm_setting_vpn_add_data_item (s_vpn, NM_L2TP_KEY_DOMAIN, str); if (priv->advanced) g_hash_table_foreach (priv->advanced, hash_copy_advanced, s_vpn); nm_connection_add_setting (connection, NM_SETTING (s_vpn)); valid = TRUE; return valid; }
void vpn_connection_new (GtkWindow *parent, const char *detail, NMRemoteSettings *settings, PageNewConnectionResultFunc result_func, gpointer user_data) { NMConnection *connection; NMSetting *s_vpn; if (!detail) { NewVpnInfo *info; /* This will happen if nm-c-e is launched from the command line * with "--create --type vpn". Dump the user back into the * new connection dialog to let them pick a subtype now. */ info = g_slice_new (NewVpnInfo); info->result_func = result_func; info->user_data = user_data; new_connection_dialog_full (parent, settings, NEW_VPN_CONNECTION_PRIMARY_LABEL, NEW_VPN_CONNECTION_SECONDARY_LABEL, vpn_type_filter_func, vpn_type_result_func, info); return; } connection = ce_page_new_connection (_("VPN connection %d"), NM_SETTING_VPN_SETTING_NAME, FALSE, settings, user_data); s_vpn = nm_setting_vpn_new (); g_object_set (s_vpn, NM_SETTING_VPN_SERVICE_TYPE, detail, NULL); nm_connection_add_setting (connection, s_vpn); (*result_func) (connection, FALSE, NULL, user_data); }
static NMConnection * import (NMVpnPluginUiInterface *iface, const char *path, GError **error) { NMConnection *connection; NMSettingConnection *s_con; NMSettingVPN *s_vpn; NMSettingIP4Config *s_ip4; GKeyFile *keyfile; GKeyFileFlags flags; const char *buf; keyfile = g_key_file_new (); flags = G_KEY_FILE_KEEP_COMMENTS | G_KEY_FILE_KEEP_TRANSLATIONS; if (!g_key_file_load_from_file (keyfile, path, flags, error)) { g_set_error (error, NM_IODINE_IMPORT_EXPORT_ERROR, NM_IODINE_IMPORT_EXPORT_ERROR_NOT_IODINE, "does not look like a %s VPN connection (parse failed)", IODINE_PLUGIN_NAME); return NULL; } connection = nm_connection_new (); s_con = NM_SETTING_CONNECTION (nm_setting_connection_new ()); nm_connection_add_setting (connection, NM_SETTING (s_con)); s_vpn = NM_SETTING_VPN (nm_setting_vpn_new ()); g_object_set (s_vpn, NM_SETTING_VPN_SERVICE_TYPE, NM_DBUS_SERVICE_IODINE, NULL); nm_connection_add_setting (connection, NM_SETTING (s_vpn)); s_ip4 = NM_SETTING_IP4_CONFIG (nm_setting_ip4_config_new ()); nm_connection_add_setting (connection, NM_SETTING (s_ip4)); /* top level domain */ buf = g_key_file_get_string (keyfile, "iodine", "topdomain", NULL); if (buf) { nm_setting_vpn_add_data_item (s_vpn, NM_IODINE_KEY_TOPDOMAIN, buf); } else { g_set_error (error, NM_IODINE_IMPORT_EXPORT_ERROR, NM_IODINE_IMPORT_EXPORT_ERROR_NOT_IODINE, "does not look like a %s VPN connection " "(no top level domain)", IODINE_PLUGIN_NAME); g_object_unref (connection); return NULL; } /* Optional Settings */ /* Description */ buf = g_key_file_get_string (keyfile, "iodine", "Description", NULL); if (buf) g_object_set (s_con, NM_SETTING_CONNECTION_ID, buf, NULL); /* Name server */ buf = g_key_file_get_string (keyfile, "iodine", "Nameserver", NULL); if (buf) nm_setting_vpn_add_data_item (s_vpn, NM_IODINE_KEY_NAMESERVER, buf); /* Fragment size */ buf = g_key_file_get_string (keyfile, "iodine", "Fragsize", NULL); if (buf) nm_setting_vpn_add_data_item (s_vpn, NM_IODINE_KEY_FRAGSIZE, "yes"); return connection; }
static gboolean update_connection (NMVpnPluginUiWidgetInterface *iface, NMConnection *connection, GError **error) { StrongswanPluginUiWidget *self = STRONGSWAN_PLUGIN_UI_WIDGET (iface); StrongswanPluginUiWidgetPrivate *priv = STRONGSWAN_PLUGIN_UI_WIDGET_GET_PRIVATE (self); NMSettingVPN *settings; GtkWidget *widget; gboolean active; char *str; if (!check_validity (self, error)) return FALSE; settings = NM_SETTING_VPN (nm_setting_vpn_new ()); g_object_set (settings, NM_SETTING_VPN_SERVICE_TYPE, NM_DBUS_SERVICE_STRONGSWAN, NULL); widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "address-entry")); str = (char *) gtk_entry_get_text (GTK_ENTRY (widget)); if (str && strlen (str)) { nm_setting_vpn_add_data_item (settings, "address", str); } widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "certificate-button")); str = (char *) gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (widget)); if (str) { nm_setting_vpn_add_data_item (settings, "certificate", str); } widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "method-combo")); switch (gtk_combo_box_get_active (GTK_COMBO_BOX (widget))) { default: case 0: widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "userkey-button")); str = (char *) gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (widget)); if (str) { nm_setting_vpn_add_data_item (settings, "userkey", str); } widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "usercert-button")); str = (char *) gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (widget)); if (str) { nm_setting_vpn_add_data_item (settings, "usercert", str); } str = "key"; break; case 1: widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "usercert-button")); str = (char *) gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (widget)); if (str) { nm_setting_vpn_add_data_item (settings, "usercert", str); } str = "agent"; break; case 2: str = "smartcard"; break; case 3: widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "user-entry")); str = (char *) gtk_entry_get_text (GTK_ENTRY (widget)); if (str && strlen (str)) { nm_setting_vpn_add_data_item (settings, "user", str); } str = "eap"; break; case 4: widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "user-entry")); str = (char *) gtk_entry_get_text (GTK_ENTRY (widget)); if (str && strlen (str)) { nm_setting_vpn_add_data_item (settings, "user", str); } str = "psk"; break; } nm_setting_vpn_add_data_item (settings, "method", str); widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "virtual-check")); active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)); nm_setting_vpn_add_data_item (settings, "virtual", active ? "yes" : "no"); widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "encap-check")); active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)); nm_setting_vpn_add_data_item (settings, "encap", active ? "yes" : "no"); widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "ipcomp-check")); active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)); nm_setting_vpn_add_data_item (settings, "ipcomp", active ? "yes" : "no"); nm_setting_set_secret_flags (NM_SETTING (settings), "password", NM_SETTING_SECRET_FLAG_AGENT_OWNED, NULL); nm_connection_add_setting (connection, NM_SETTING (settings)); return TRUE; }
void vpn_connection_new (FUNC_TAG_PAGE_NEW_CONNECTION_IMPL, GtkWindow *parent, const char *detail, gpointer detail_data, NMConnection *connection, NMClient *client, PageNewConnectionResultFunc result_func, gpointer user_data) { NMSetting *s_vpn; const char *service_type; gs_free char *service_type_free = NULL; gs_free char *add_detail_key_free = NULL; gs_free char *add_detail_val_free = NULL; const CEPageVpnDetailData *vpn_data = detail_data; gssize split_idx, l; const char *add_detail_key = NULL; const char *add_detail_val = NULL; gs_unref_object NMConnection *connection_tmp = NULL; if (!detail && !connection) { NewVpnInfo *info; /* This will happen if nm-c-e is launched from the command line * with "--create --type vpn". Dump the user back into the * new connection dialog to let them pick a subtype now. */ info = g_slice_new (NewVpnInfo); info->result_func = result_func; info->user_data = user_data; new_connection_dialog_full (parent, client, NEW_VPN_CONNECTION_PRIMARY_LABEL, NEW_VPN_CONNECTION_SECONDARY_LABEL, vpn_type_filter_func, vpn_type_result_func, info); return; } connection = _ensure_connection_other (connection, &connection_tmp); if (detail) { service_type = detail; add_detail_key = vpn_data ? vpn_data->add_detail_key : NULL; add_detail_val = vpn_data ? vpn_data->add_detail_val : NULL; service_type_free = nm_vpn_plugin_info_list_find_service_type (vpn_get_plugin_infos (), detail); if (service_type_free) service_type = service_type_free; else if (!vpn_data) { /* when called without @vpn_data, it means that @detail may contain "<SERVICE_TYPE>:<ADD_DETAIL>". * Try to parse them by spliting @detail at the colons and try to interpret the first part as * @service_type and the remainder as add-detail. */ l = strlen (detail); for (split_idx = 1; split_idx < l - 1; split_idx++) { if (detail[split_idx] == ':') { gs_free char *detail_main = g_strndup (detail, split_idx); NMVpnEditorPlugin *plugin; service_type_free = nm_vpn_plugin_info_list_find_service_type (vpn_get_plugin_infos (), detail_main); if (!service_type_free) continue; plugin = vpn_get_plugin_by_service (service_type_free); if (!plugin) { g_clear_pointer (&service_type_free, g_free); continue; } /* we found a @service_type. Try to use the remainder as add-detail. */ service_type = service_type_free; if (nm_vpn_editor_plugin_get_service_add_detail (plugin, service_type, &detail[split_idx + 1], NULL, NULL, &add_detail_key_free, &add_detail_val_free, NULL) && add_detail_key_free && add_detail_key_free[0] && add_detail_val_free && add_detail_val_free[0]) { add_detail_key = add_detail_key_free; add_detail_val = add_detail_val_free; } break; } } } if (!service_type) service_type = detail; s_vpn = nm_setting_vpn_new (); g_object_set (s_vpn, NM_SETTING_VPN_SERVICE_TYPE, service_type, NULL); if (add_detail_key) nm_setting_vpn_add_data_item ((NMSettingVpn *) s_vpn, add_detail_key, add_detail_val); nm_connection_add_setting (connection, s_vpn); } complete_vpn_connection (connection, client); (*result_func) (FUNC_TAG_PAGE_NEW_CONNECTION_RESULT_CALL, connection, FALSE, NULL, user_data); }
static gboolean update_connection (NMVpnEditor *editor, NMConnection *connection, GError **error) { VpncEditor *self = VPNC_EDITOR (editor); VpncEditorPrivate *priv = VPNC_EDITOR_GET_PRIVATE (self); NMSettingConnection *s_con; NMSettingVpn *s_vpn; GtkWidget *widget; char *str; guint32 port; GtkTreeModel *model; GtkTreeIter iter; if (!check_validity (self, error)) return FALSE; s_con = nm_connection_get_setting_connection (connection); s_vpn = NM_SETTING_VPN (nm_setting_vpn_new ()); g_object_set (s_vpn, NM_SETTING_VPN_SERVICE_TYPE, NM_DBUS_SERVICE_VPNC, NULL); /* Interface name */ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "interface_name_entry")); str = (char *) gtk_entry_get_text (GTK_ENTRY (widget)); if (str && strlen (str)) g_object_set (G_OBJECT (s_con), NM_SETTING_CONNECTION_INTERFACE_NAME, str, NULL); /* Gateway */ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "gateway_entry")); str = (char *) gtk_entry_get_text (GTK_ENTRY (widget)); if (str && strlen (str)) nm_setting_vpn_add_data_item (s_vpn, NM_VPNC_KEY_GATEWAY, str); /* Group name */ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "group_entry")); str = (char *) gtk_entry_get_text (GTK_ENTRY (widget)); if (str && strlen (str)) nm_setting_vpn_add_data_item (s_vpn, NM_VPNC_KEY_ID, str); widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "user_entry")); str = (char *) gtk_entry_get_text (GTK_ENTRY (widget)); if (str && strlen (str)) nm_setting_vpn_add_data_item (s_vpn, NM_VPNC_KEY_XAUTH_USER, str); widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "domain_entry")); str = (char *) gtk_entry_get_text (GTK_ENTRY (widget)); if (str && strlen (str)) nm_setting_vpn_add_data_item (s_vpn, NM_VPNC_KEY_DOMAIN, str); widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "vendor_combo")); model = gtk_combo_box_get_model (GTK_COMBO_BOX (widget)); if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (widget), &iter)) { const char *vendor = NULL; gtk_tree_model_get (model, &iter, 1, &vendor, -1); nm_setting_vpn_add_data_item (s_vpn, NM_VPNC_KEY_VENDOR, vendor); } else nm_setting_vpn_add_data_item (s_vpn, NM_VPNC_KEY_VENDOR, NM_VPNC_VENDOR_CISCO); /* Application version */ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "application_version_entry")); str = (char *) gtk_entry_get_text (GTK_ENTRY (widget)); if (str && strlen (str)) nm_setting_vpn_add_data_item (s_vpn, NM_VPNC_KEY_APP_VERSION, str); widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "encryption_combo")); switch (gtk_combo_box_get_active (GTK_COMBO_BOX (widget))) { case ENC_TYPE_WEAK: nm_setting_vpn_add_data_item (s_vpn, NM_VPNC_KEY_SINGLE_DES, "yes"); break; case ENC_TYPE_NONE: nm_setting_vpn_add_data_item (s_vpn, NM_VPNC_KEY_NO_ENCRYPTION, "yes"); break; case ENC_TYPE_SECURE: default: break; } widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "natt_combo")); model = gtk_combo_box_get_model (GTK_COMBO_BOX (widget)); if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (widget), &iter)) { const char *mode = NULL; gtk_tree_model_get (model, &iter, 1, &mode, -1); nm_setting_vpn_add_data_item (s_vpn, NM_VPNC_KEY_NAT_TRAVERSAL_MODE, mode); } else nm_setting_vpn_add_data_item (s_vpn, NM_VPNC_KEY_NAT_TRAVERSAL_MODE, NM_VPNC_NATT_MODE_NATT); widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "dhgroup_combo")); model = gtk_combo_box_get_model (GTK_COMBO_BOX (widget)); if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (widget), &iter)) { const char *dhgroup = NULL; gtk_tree_model_get (model, &iter, 1, &dhgroup, -1); nm_setting_vpn_add_data_item (s_vpn, NM_VPNC_KEY_DHGROUP, dhgroup); } else nm_setting_vpn_add_data_item (s_vpn, NM_VPNC_KEY_DHGROUP, NM_VPNC_DHGROUP_DH2); widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "pfsecrecy_combo")); model = gtk_combo_box_get_model (GTK_COMBO_BOX (widget)); if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (widget), &iter)) { const char *pfs = NULL; gtk_tree_model_get (model, &iter, 1, &pfs, -1); nm_setting_vpn_add_data_item (s_vpn, NM_VPNC_KEY_PERFECT_FORWARD, pfs); } else nm_setting_vpn_add_data_item (s_vpn, NM_VPNC_KEY_PERFECT_FORWARD, NM_VPNC_PFS_SERVER); /* Local port */ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "local_port_spinbutton")); port = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (widget)); nm_setting_vpn_add_data_item (s_vpn, NM_VPNC_KEY_LOCAL_PORT, g_strdup_printf ("%d", port)); widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "disable_dpd_checkbutton")); if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) { nm_setting_vpn_add_data_item (s_vpn, NM_VPNC_KEY_DPD_IDLE_TIMEOUT, "0"); } else { /* If DPD was disabled and now the user wishes to enable it, just * don't pass the DPD_IDLE_TIMEOUT option to vpnc and thus use the * default DPD idle time. Otherwise keep the original DPD idle timeout. */ if (priv->orig_dpd_timeout >= 10) { char *tmp = g_strdup_printf ("%d", priv->orig_dpd_timeout); nm_setting_vpn_add_data_item (s_vpn, NM_VPNC_KEY_DPD_IDLE_TIMEOUT, tmp); g_free (tmp); } } /* User password */ save_one_password (s_vpn, priv->builder, "user_password_entry", NM_VPNC_KEY_XAUTH_PASSWORD, NM_VPNC_KEY_XAUTH_PASSWORD_TYPE); /* Group password */ save_one_password (s_vpn, priv->builder, "group_password_entry", NM_VPNC_KEY_SECRET, NM_VPNC_KEY_SECRET_TYPE); /* hybrid auth */ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "hybrid_checkbutton")); if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) nm_setting_vpn_add_data_item (s_vpn, NM_VPNC_KEY_AUTHMODE, "hybrid"); widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "ca_file_chooser")); str = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (widget)); if (str && strlen (str)) nm_setting_vpn_add_data_item (s_vpn, NM_VPNC_KEY_CA_FILE, str); nm_connection_add_setting (connection, NM_SETTING (s_vpn)); return TRUE; }
static gboolean update_connection (NMVpnPluginUiWidgetInterface *iface, NMConnection *connection, GError **error) { OpenswanPluginUiWidget *self = OPENSWAN_PLUGIN_UI_WIDGET (iface); OpenswanPluginUiWidgetPrivate *priv = OPENSWAN_PLUGIN_UI_WIDGET_GET_PRIVATE (self); NMSettingVPN *s_vpn; GtkWidget *widget; char *str; if (!check_validity (self, error)) return FALSE; s_vpn = NM_SETTING_VPN (nm_setting_vpn_new ()); g_object_set (s_vpn, NM_SETTING_VPN_SERVICE_TYPE, NM_DBUS_SERVICE_OPENSWAN, NULL); /* Gateway */ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "gateway_entry")); str = (char *) gtk_entry_get_text (GTK_ENTRY (widget)); if (str && strlen (str)) nm_setting_vpn_add_data_item (s_vpn, NM_OPENSWAN_RIGHT, str); /* Group name */ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "group_entry")); str = (char *) gtk_entry_get_text (GTK_ENTRY (widget)); if (str && strlen (str)) nm_setting_vpn_add_data_item (s_vpn, NM_OPENSWAN_LEFTID, str); /* User name*/ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "user_entry")); str = (char *) gtk_entry_get_text (GTK_ENTRY (widget)); if (str && strlen (str)) nm_setting_vpn_add_data_item (s_vpn, NM_OPENSWAN_LEFTXAUTHUSER, str); /* Phase 1 Algorithms: ike */ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "phase1_entry")); str = (char *) gtk_entry_get_text (GTK_ENTRY (widget)); if (str && strlen (str)) nm_setting_vpn_add_data_item (s_vpn, NM_OPENSWAN_IKE, str); /* Phase 2 Algorithms: esp */ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "phase2_entry")); str = (char *) gtk_entry_get_text (GTK_ENTRY (widget)); if (str && strlen (str)) nm_setting_vpn_add_data_item (s_vpn, NM_OPENSWAN_ESP, str); /* Domain entry */ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "domain_entry")); str = (char *) gtk_entry_get_text (GTK_ENTRY (widget)); if (str && strlen (str)) nm_setting_vpn_add_data_item (s_vpn, NM_OPENSWAN_DOMAIN, str); save_one_password (s_vpn, priv->builder, "user_password_entry", "user_pass_type_combo", NM_OPENSWAN_XAUTH_PASSWORD, NM_OPENSWAN_XAUTH_PASSWORD_INPUT_MODES); save_one_password (s_vpn, priv->builder, "group_password_entry", "group_pass_type_combo", NM_OPENSWAN_PSK_VALUE, NM_OPENSWAN_PSK_INPUT_MODES); nm_connection_add_setting (connection, NM_SETTING (s_vpn)); return TRUE; }
static NMConnection * import (NMVpnPluginUiInterface *iface, const char *path, GError **error) { NMConnection *connection; NMSettingConnection *s_con; NMSettingVPN *s_vpn; NMSettingIP4Config *s_ip4; GKeyFile *keyfile; GKeyFileFlags flags; const char *buf; gboolean bval; keyfile = g_key_file_new (); flags = G_KEY_FILE_KEEP_COMMENTS | G_KEY_FILE_KEEP_TRANSLATIONS; if (!g_key_file_load_from_file (keyfile, path, flags, NULL)) { g_set_error (error, NM_OPENCONNECT_IMPORT_EXPORT_ERROR, NM_OPENCONNECT_IMPORT_EXPORT_ERROR_NOT_OPENCONNECT, "does not look like a %s VPN connection (parse failed)", OPENCONNECT_PLUGIN_NAME); return NULL; } connection = nm_connection_new (); s_con = NM_SETTING_CONNECTION (nm_setting_connection_new ()); nm_connection_add_setting (connection, NM_SETTING (s_con)); s_vpn = NM_SETTING_VPN (nm_setting_vpn_new ()); g_object_set (s_vpn, NM_SETTING_VPN_SERVICE_TYPE, NM_DBUS_SERVICE_OPENCONNECT, NULL); nm_connection_add_setting (connection, NM_SETTING (s_vpn)); s_ip4 = NM_SETTING_IP4_CONFIG (nm_setting_ip4_config_new ()); nm_connection_add_setting (connection, NM_SETTING (s_ip4)); /* Host */ buf = g_key_file_get_string (keyfile, "openconnect", "Host", NULL); if (buf) { nm_setting_vpn_add_data_item (s_vpn, NM_OPENCONNECT_KEY_GATEWAY, buf); } else { g_set_error (error, NM_OPENCONNECT_IMPORT_EXPORT_ERROR, NM_OPENCONNECT_IMPORT_EXPORT_ERROR_BAD_DATA, "does not look like a %s VPN connection (no Host)", OPENCONNECT_PLUGIN_NAME); g_object_unref (connection); return NULL; } /* Optional Settings */ /* Description */ buf = g_key_file_get_string (keyfile, "openconnect", "Description", NULL); if (buf) g_object_set (s_con, NM_SETTING_CONNECTION_ID, buf, NULL); /* CA Certificate */ buf = g_key_file_get_string (keyfile, "openconnect", "CACert", NULL); if (buf) nm_setting_vpn_add_data_item (s_vpn, NM_OPENCONNECT_KEY_CACERT, buf); /* Proxy */ buf = g_key_file_get_string (keyfile, "openconnect", "Proxy", NULL); if (buf) nm_setting_vpn_add_data_item (s_vpn, NM_OPENCONNECT_KEY_PROXY, buf); /* Cisco Secure Desktop */ bval = g_key_file_get_boolean (keyfile, "openconnect", "CSDEnable", NULL); if (bval) nm_setting_vpn_add_data_item (s_vpn, NM_OPENCONNECT_KEY_CSD_ENABLE, "yes"); /* Cisco Secure Desktop wrapper */ buf = g_key_file_get_string (keyfile, "openconnect", "CSDWrapper", NULL); if (buf) nm_setting_vpn_add_data_item (s_vpn, NM_OPENCONNECT_KEY_CSD_WRAPPER, buf); /* User Certificate */ buf = g_key_file_get_string (keyfile, "openconnect", "UserCertificate", NULL); if (buf) nm_setting_vpn_add_data_item (s_vpn, NM_OPENCONNECT_KEY_USERCERT, buf); /* Private Key */ buf = g_key_file_get_string (keyfile, "openconnect", "PrivateKey", NULL); if (buf) nm_setting_vpn_add_data_item (s_vpn, NM_OPENCONNECT_KEY_PRIVKEY, buf); /* FSID */ bval = g_key_file_get_boolean (keyfile, "openconnect", "FSID", NULL); if (bval) nm_setting_vpn_add_data_item (s_vpn, NM_OPENCONNECT_KEY_PEM_PASSPHRASE_FSID, "yes"); /* Soft token mode */ buf = g_key_file_get_string (keyfile, "openconnect", "StokenSource", NULL); if (buf) nm_setting_vpn_add_data_item (s_vpn, NM_OPENCONNECT_KEY_TOKEN_MODE, buf); /* Soft token secret */ buf = g_key_file_get_string (keyfile, "openconnect", "StokenString", NULL); if (buf) nm_setting_vpn_add_secret (s_vpn, NM_OPENCONNECT_KEY_TOKEN_SECRET, buf); return connection; }