From 7c817d41764c11f780c3a64ef5495efdb055e2b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ji=C5=99=C3=AD=20Klime=C5=A1?= Date: Mon, 24 Feb 2014 16:38:56 +0100 Subject: [PATCH] libnm-util: add *_remove_*_by_value() functions for '802-1x' setting nm_setting_802_1x_remove_eap_method_by_value() nm_setting_802_1x_remove_altsubject_match_by_value() nm_setting_802_1x_remove_phase2_altsubject_match_by_value() --- libnm-util/libnm-util.ver | 3 ++ libnm-util/nm-setting-8021x.c | 99 +++++++++++++++++++++++++++++++++++ libnm-util/nm-setting-8021x.h | 32 ++++++----- 3 files changed, 122 insertions(+), 12 deletions(-) diff --git a/libnm-util/libnm-util.ver b/libnm-util/libnm-util.ver index b3c74aaca3..1a4ebc9d24 100644 --- a/libnm-util/libnm-util.ver +++ b/libnm-util/libnm-util.ver @@ -172,8 +172,11 @@ global: nm_setting_802_1x_get_type; nm_setting_802_1x_new; nm_setting_802_1x_remove_altsubject_match; + nm_setting_802_1x_remove_altsubject_match_by_value; nm_setting_802_1x_remove_eap_method; + nm_setting_802_1x_remove_eap_method_by_value; nm_setting_802_1x_remove_phase2_altsubject_match; + nm_setting_802_1x_remove_phase2_altsubject_match_by_value; nm_setting_802_1x_set_ca_cert; nm_setting_802_1x_set_client_cert; nm_setting_802_1x_set_phase2_ca_cert; diff --git a/libnm-util/nm-setting-8021x.c b/libnm-util/nm-setting-8021x.c index c7debbef90..ce4886a4db 100644 --- a/libnm-util/nm-setting-8021x.c +++ b/libnm-util/nm-setting-8021x.c @@ -276,6 +276,38 @@ nm_setting_802_1x_remove_eap_method (NMSetting8021x *setting, guint32 i) g_object_notify (G_OBJECT (setting), NM_SETTING_802_1X_EAP); } +/** + * nm_setting_802_1x_remove_eap_method_by_value: + * @setting: the #NMSetting8021x + * @eap: the name of the EAP method to remove + * + * Removes the allowed EAP method @method. + * + * Returns: %TRUE if the EAP method was founs and removed, %FALSE if it was not. + * + * Since: 0.9.10 + **/ +gboolean +nm_setting_802_1x_remove_eap_method_by_value (NMSetting8021x *setting, + const char *eap) +{ + NMSetting8021xPrivate *priv; + GSList *iter; + + g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), FALSE); + g_return_val_if_fail (eap != NULL, FALSE); + + priv = NM_SETTING_802_1X_GET_PRIVATE (setting); + for (iter = priv->eap; iter; iter = g_slist_next (iter)) { + if (!strcmp (eap, (char *) iter->data)) { + priv->eap = g_slist_delete_link (priv->eap, iter); + g_object_notify (G_OBJECT (setting), NM_SETTING_802_1X_EAP); + return TRUE; + } + } + return FALSE; +} + /** * nm_setting_802_1x_clear_eap_methods: * @setting: the #NMSetting8021x @@ -682,6 +714,39 @@ nm_setting_802_1x_remove_altsubject_match (NMSetting8021x *setting, guint32 i) g_object_notify (G_OBJECT (setting), NM_SETTING_802_1X_ALTSUBJECT_MATCHES); } +/** + * nm_setting_802_1x_remove_altsubject_match_by_value: + * @setting: the #NMSetting8021x + * @altsubject_match: the altSubjectName to remove + * + * Removes the allowed altSubjectName @altsubject_match. + * + * Returns: %TRUE if the alternative subject name match was found and removed, + * %FALSE if it was not. + * + * Since: 0.9.10 + **/ +gboolean +nm_setting_802_1x_remove_altsubject_match_by_value (NMSetting8021x *setting, + const char *altsubject_match) +{ + NMSetting8021xPrivate *priv; + GSList *iter; + + g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), FALSE); + g_return_val_if_fail (altsubject_match != NULL, FALSE); + + priv = NM_SETTING_802_1X_GET_PRIVATE (setting); + for (iter = priv->altsubject_matches; iter; iter = g_slist_next (iter)) { + if (!strcmp (altsubject_match, (char *) iter->data)) { + priv->altsubject_matches = g_slist_delete_link (priv->altsubject_matches, iter); + g_object_notify (G_OBJECT (setting), NM_SETTING_802_1X_ALTSUBJECT_MATCHES); + return TRUE; + } + } + return FALSE; +} + /** * nm_setting_802_1x_clear_altsubject_matches: * @setting: the #NMSetting8021x @@ -1229,6 +1294,40 @@ nm_setting_802_1x_remove_phase2_altsubject_match (NMSetting8021x *setting, guint g_object_notify (G_OBJECT (setting), NM_SETTING_802_1X_PHASE2_ALTSUBJECT_MATCHES); } + +/** + * nm_setting_802_1x_remove_phase2_altsubject_match_by_value: + * @setting: the #NMSetting8021x + * @phase2_altsubject_match: the "phase 2" altSubjectName to remove + * + * Removes the allowed "phase 2" altSubjectName @phase2_altsubject_match. + * + * Returns: %TRUE if the alternative subject name match for "phase 2" was found and removed, + * %FALSE if it was not. + * + * Since: 0.9.10 + **/ +gboolean +nm_setting_802_1x_remove_phase2_altsubject_match_by_value (NMSetting8021x *setting, + const char *phase2_altsubject_match) +{ + NMSetting8021xPrivate *priv; + GSList *iter; + + g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), FALSE); + g_return_val_if_fail (phase2_altsubject_match != NULL, FALSE); + + priv = NM_SETTING_802_1X_GET_PRIVATE (setting); + for (iter = priv->phase2_altsubject_matches; iter; iter = g_slist_next (iter)) { + if (!strcmp (phase2_altsubject_match, (char *) iter->data)) { + priv->phase2_altsubject_matches = g_slist_delete_link (priv->phase2_altsubject_matches, iter); + g_object_notify (G_OBJECT (setting), NM_SETTING_802_1X_PHASE2_ALTSUBJECT_MATCHES); + return TRUE; + } + } + return FALSE; +} + /** * nm_setting_802_1x_clear_phase2_altsubject_matches: * @setting: the #NMSetting8021x diff --git a/libnm-util/nm-setting-8021x.h b/libnm-util/nm-setting-8021x.h index 8381fed7ce..263630ec00 100644 --- a/libnm-util/nm-setting-8021x.h +++ b/libnm-util/nm-setting-8021x.h @@ -19,7 +19,7 @@ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * - * (C) Copyright 2007 - 2012 Red Hat, Inc. + * (C) Copyright 2007 - 2014 Red Hat, Inc. * (C) Copyright 2007 - 2008 Novell, Inc. */ @@ -170,6 +170,8 @@ guint32 nm_setting_802_1x_get_num_eap_methods (NMSetting8 const char * nm_setting_802_1x_get_eap_method (NMSetting8021x *setting, guint32 i); gboolean nm_setting_802_1x_add_eap_method (NMSetting8021x *setting, const char *eap); void nm_setting_802_1x_remove_eap_method (NMSetting8021x *setting, guint32 i); +NM_AVAILABLE_IN_0_9_10 +gboolean nm_setting_802_1x_remove_eap_method_by_value (NMSetting8021x *setting, const char *eap); void nm_setting_802_1x_clear_eap_methods (NMSetting8021x *setting); const char * nm_setting_802_1x_get_identity (NMSetting8021x *setting); @@ -195,11 +197,14 @@ const char * nm_setting_802_1x_get_subject_match (NMSetting8 guint32 nm_setting_802_1x_get_num_altsubject_matches (NMSetting8021x *setting); const char * nm_setting_802_1x_get_altsubject_match (NMSetting8021x *setting, - guint32 i); + guint32 i); gboolean nm_setting_802_1x_add_altsubject_match (NMSetting8021x *setting, - const char *altsubject_match); + const char *altsubject_match); void nm_setting_802_1x_remove_altsubject_match (NMSetting8021x *setting, - guint32 i); + guint32 i); +NM_AVAILABLE_IN_0_9_10 +gboolean nm_setting_802_1x_remove_altsubject_match_by_value (NMSetting8021x *setting, + const char *altsubject_match); void nm_setting_802_1x_clear_altsubject_matches (NMSetting8021x *setting); NMSetting8021xCKScheme nm_setting_802_1x_get_client_cert_scheme (NMSetting8021x *setting); @@ -232,14 +237,17 @@ gboolean nm_setting_802_1x_set_phase2_ca_cert (NMSetting8 const char * nm_setting_802_1x_get_phase2_subject_match (NMSetting8021x *setting); -guint32 nm_setting_802_1x_get_num_phase2_altsubject_matches (NMSetting8021x *setting); -const char * nm_setting_802_1x_get_phase2_altsubject_match (NMSetting8021x *setting, - guint32 i); -gboolean nm_setting_802_1x_add_phase2_altsubject_match (NMSetting8021x *setting, - const char *phase2_altsubject_match); -void nm_setting_802_1x_remove_phase2_altsubject_match (NMSetting8021x *setting, - guint32 i); -void nm_setting_802_1x_clear_phase2_altsubject_matches (NMSetting8021x *setting); +guint32 nm_setting_802_1x_get_num_phase2_altsubject_matches (NMSetting8021x *setting); +const char * nm_setting_802_1x_get_phase2_altsubject_match (NMSetting8021x *setting, + guint32 i); +gboolean nm_setting_802_1x_add_phase2_altsubject_match (NMSetting8021x *setting, + const char *phase2_altsubject_match); +void nm_setting_802_1x_remove_phase2_altsubject_match (NMSetting8021x *setting, + guint32 i); +NM_AVAILABLE_IN_0_9_10 +gboolean nm_setting_802_1x_remove_phase2_altsubject_match_by_value (NMSetting8021x *setting, + const char *phase2_altsubject_match); +void nm_setting_802_1x_clear_phase2_altsubject_matches (NMSetting8021x *setting); NMSetting8021xCKScheme nm_setting_802_1x_get_phase2_client_cert_scheme (NMSetting8021x *setting); const GByteArray * nm_setting_802_1x_get_phase2_client_cert_blob (NMSetting8021x *setting);