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 write_connection_to_child (int fd, NMConnection *connection, GError **error) { NMSettingVPN *s_vpn; WriteItemInfo info = { .fd = fd, .secret = FALSE, .error = error }; s_vpn = nm_connection_get_setting_vpn (connection); if (!s_vpn) { g_set_error_literal (error, NM_SECRET_AGENT_ERROR, NM_SECRET_AGENT_ERROR_INTERNAL_ERROR, "Connection had no VPN setting"); return FALSE; } nm_setting_vpn_foreach_data_item (s_vpn, write_one_key_val, &info); if (error && *error) return FALSE; info.secret = TRUE; nm_setting_vpn_foreach_secret (s_vpn, write_one_key_val, &info); if (error && *error) return FALSE; if (!write_item (fd, "DONE\n\n", error)) return FALSE; return TRUE; }
static void test_items (const char *detail, NMSettingVPN *s_vpn, const Item *items, gboolean secrets) { const Item *iter; guint32 expected_count = 0, actual_count = 0; const char *value; for (iter = items; iter->name; iter++) { if (secrets) value = nm_setting_vpn_get_secret (s_vpn, iter->name); else value = nm_setting_vpn_get_data_item (s_vpn, iter->name); if (!iter->value) { ASSERT (value == NULL, detail, "unexpected item '%s'", iter->name); } else { ASSERT (value != NULL, detail, "unexpected missing value for item %s", iter->name); ASSERT (strcmp (value, iter->value) == 0, detail, "unexpected value for item %s (%s != %s", iter->name, value, iter->value); expected_count++; } } if (secrets) nm_setting_vpn_foreach_secret (s_vpn, item_count_func, &actual_count); else nm_setting_vpn_foreach_data_item (s_vpn, item_count_func, &actual_count); ASSERT (actual_count == expected_count, detail, "unexpected number of items (got %d, expected %d)", actual_count, expected_count); }
NMVpnEditor * nm_vpnc_editor_new (NMConnection *connection, GError **error) { NMVpnEditor *object; VpncEditorPrivate *priv; char *ui_file; NMSettingVpn *s_vpn; gboolean is_new = TRUE; if (error) g_return_val_if_fail (*error == NULL, NULL); object = g_object_new (VPNC_TYPE_EDITOR, NULL); if (!object) { g_set_error (error, NMV_EDITOR_PLUGIN_ERROR, NMV_EDITOR_PLUGIN_ERROR_FAILED, "could not create vpnc object"); return NULL; } priv = VPNC_EDITOR_GET_PRIVATE (object); ui_file = g_strdup_printf ("%s/%s", UIDIR, "nm-vpnc-dialog.ui"); priv->builder = gtk_builder_new (); gtk_builder_set_translation_domain (priv->builder, GETTEXT_PACKAGE); if (!gtk_builder_add_from_file (priv->builder, ui_file, error)) { g_warning ("Couldn't load builder file: %s", error && *error ? (*error)->message : "(unknown)"); g_clear_error (error); g_set_error (error, NMV_EDITOR_PLUGIN_ERROR, NMV_EDITOR_PLUGIN_ERROR_FAILED, "could not load required resources at %s", ui_file); g_free (ui_file); g_object_unref (object); return NULL; } g_free (ui_file); priv->widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "vpnc-vbox")); if (!priv->widget) { g_set_error (error, NMV_EDITOR_PLUGIN_ERROR, NMV_EDITOR_PLUGIN_ERROR_FAILED, "could not load UI widget"); g_object_unref (object); return NULL; } g_object_ref_sink (priv->widget); s_vpn = nm_connection_get_setting_vpn (connection); if (s_vpn) nm_setting_vpn_foreach_data_item (s_vpn, is_new_func, &is_new); if (!init_plugin_ui (VPNC_EDITOR (object), connection, is_new, error)) { g_object_unref (object); return NULL; } return object; }
static NMVpnPluginUiWidgetInterface * nm_vpn_plugin_ui_widget_interface_new (NMConnection *connection, GError **error) { NMVpnPluginUiWidgetInterface *object; OpenswanPluginUiWidgetPrivate *priv; char *ui_file; NMSettingVPN *s_vpn; gboolean is_new = TRUE; if (error) g_return_val_if_fail (*error == NULL, NULL); object = NM_VPN_PLUGIN_UI_WIDGET_INTERFACE (g_object_new (OPENSWAN_TYPE_PLUGIN_UI_WIDGET, NULL)); if (!object) { g_set_error (error, OPENSWAN_PLUGIN_UI_ERROR, 0, "could not create openswan object"); return NULL; } priv = OPENSWAN_PLUGIN_UI_WIDGET_GET_PRIVATE (object); ui_file = g_strdup_printf ("%s/%s", UIDIR, "nm-openswan-dialog.ui"); priv->builder = gtk_builder_new (); g_assert (priv->builder); gtk_builder_set_translation_domain (priv->builder, GETTEXT_PACKAGE); if (!gtk_builder_add_from_file (priv->builder, ui_file, error)) { g_warning ("Couldn't load builder file: %s", error && *error ? (*error)->message : "(unknown)"); g_clear_error (error); g_set_error (error, OPENSWAN_PLUGIN_UI_ERROR, 0, "could not load required resources at %s", ui_file); g_free (ui_file); g_object_unref (object); return NULL; } g_free (ui_file); priv->widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "openswan-vbox")); if (!priv->widget) { g_set_error (error, OPENSWAN_PLUGIN_UI_ERROR, 0, "could not load UI widget"); g_object_unref (object); return NULL; } g_object_ref_sink (priv->widget); s_vpn = nm_connection_get_setting_vpn (connection); if (s_vpn) nm_setting_vpn_foreach_data_item (s_vpn, is_new_func, &is_new); if (!init_plugin_ui (OPENSWAN_PLUGIN_UI_WIDGET (object), connection, is_new, error)) { g_object_unref (object); return NULL; } return object; }
GHashTable * ipsec_dialog_new_hash_from_connection (NMConnection *connection, GError **error) { GHashTable *hash; NMSettingVpn *s_vpn; hash = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); s_vpn = (NMSettingVpn *) nm_connection_get_setting (connection, NM_TYPE_SETTING_VPN); nm_setting_vpn_foreach_data_item (s_vpn, copy_values, hash); return hash; }
GHashTable * advanced_dialog_new_hash_from_connection (NMConnection *connection, GError **error) { GHashTable *hash; NMSettingVpn *s_vpn; hash = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); s_vpn = nm_connection_get_setting_vpn (connection); nm_setting_vpn_foreach_data_item (s_vpn, copy_values, hash); return hash; }
static gboolean nm_openconnect_properties_validate (NMSettingVPN *s_vpn, GError **error) { ValidateInfo info = { &valid_properties[0], error, FALSE }; nm_setting_vpn_foreach_data_item (s_vpn, validate_one_property, &info); if (!info.have_items) { g_set_error (error, NM_VPN_PLUGIN_ERROR, NM_VPN_PLUGIN_ERROR_BAD_ARGUMENTS, "%s", _("No VPN configuration options.")); return FALSE; } return *error ? FALSE : TRUE; }
static gboolean nm_sstp_properties_validate (NMSettingVpn *s_vpn, GError **error) { ValidateInfo info = { &valid_properties[0], error, FALSE }; int i; nm_setting_vpn_foreach_data_item (s_vpn, validate_one_property, &info); if (!info.have_items) { g_set_error (error, NM_VPN_PLUGIN_ERROR, NM_VPN_PLUGIN_ERROR_BAD_ARGUMENTS, "%s", _("No VPN configuration options.")); return FALSE; } if (*error) return FALSE; /* Ensure required properties exist */ for (i = 0; valid_properties[i].name; i++) { ValidProperty prop = valid_properties[i]; const char *value; if (!prop.required) continue; value = nm_setting_vpn_get_data_item (s_vpn, prop.name); if (!value || !strlen (value)) { g_set_error (error, NM_VPN_PLUGIN_ERROR, NM_VPN_PLUGIN_ERROR_BAD_ARGUMENTS, _("Missing required option '%s'."), prop.name); return FALSE; } } return TRUE; }
static gboolean nm_openssh_properties_validate (NMSettingVPN *s_vpn, GError **error) { GError *validate_error = NULL; ValidateInfo info = { &valid_properties[0], &validate_error, FALSE }; nm_setting_vpn_foreach_data_item (s_vpn, validate_one_property, &info); if (!info.have_items) { g_set_error (error, NM_VPN_PLUGIN_ERROR, NM_VPN_PLUGIN_ERROR_BAD_ARGUMENTS, "%s", "No VPN configuration options."); return FALSE; } if (validate_error) { *error = validate_error; return FALSE; } return TRUE; }