From 008bab498f3dcee9d48ff95740f1909ec295b136 Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Tue, 25 Sep 2007 06:11:44 +0000 Subject: [PATCH] 2007-09-25 Dan Williams * libnm-util/nm-connection.c libnm-util/nm-connection.h - (nm_connection_clear_secrets): new function; clear secrets out of each NMSetting in an NMConnection * libnm-util/nm-setting.h libnm-util/nm-setting.c - (nm_setting_clear_secrets, default_setting_clear_secrets): clear secrets out of an NMSetting - (nm_setting_connection_new, nm_setting_ip4_config_new, nm_setting_wired_new, nm_setting_wireless_new, nm_setting_wireless_security_new, nm_setting_ppp_new, nm_setting_vpn_new, nm_setting_vpn_properties_new): set clear_secrets to default handler default_setting_clear_secrets() git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@2871 4912f4e0-d625-0410-9fb7-b9a5a253dbdc --- ChangeLog | 17 +++++++++ libnm-util/nm-connection.c | 19 ++++++++++ libnm-util/nm-connection.h | 2 ++ libnm-util/nm-setting.c | 71 ++++++++++++++++++++++++++++++++++++++ libnm-util/nm-setting.h | 4 +++ 5 files changed, 113 insertions(+) diff --git a/ChangeLog b/ChangeLog index cfa1ec1cd6..39d157801c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,20 @@ +2007-09-25 Dan Williams + + * libnm-util/nm-connection.c + libnm-util/nm-connection.h + - (nm_connection_clear_secrets): new function; clear secrets out of + each NMSetting in an NMConnection + + * libnm-util/nm-setting.h + libnm-util/nm-setting.c + - (nm_setting_clear_secrets, default_setting_clear_secrets): clear + secrets out of an NMSetting + - (nm_setting_connection_new, nm_setting_ip4_config_new, + nm_setting_wired_new, nm_setting_wireless_new, + nm_setting_wireless_security_new, nm_setting_ppp_new, + nm_setting_vpn_new, nm_setting_vpn_properties_new): set clear_secrets + to default handler default_setting_clear_secrets() + 2007-09-25 Dan Williams * src/nm-activation-request.c diff --git a/libnm-util/nm-connection.c b/libnm-util/nm-connection.c index 88818ffdb9..dd1a1415e2 100644 --- a/libnm-util/nm-connection.c +++ b/libnm-util/nm-connection.c @@ -189,6 +189,25 @@ nm_connection_need_secrets (NMConnection *connection) return NULL; } +static void +clear_setting_secrets (gpointer key, gpointer data, gpointer user_data) +{ + NMSetting *setting = (NMSetting *) data; + + nm_setting_clear_secrets (setting); +} + +void +nm_connection_clear_secrets (NMConnection *connection) +{ + NMConnectionPrivate *priv; + + g_return_if_fail (NM_IS_CONNECTION (connection)); + + priv = NM_CONNECTION_GET_PRIVATE (connection); + g_hash_table_foreach (priv->settings, clear_setting_secrets, NULL); +} + static void add_one_setting_to_hash (gpointer key, gpointer data, gpointer user_data) { diff --git a/libnm-util/nm-connection.h b/libnm-util/nm-connection.h index 5b5ccca4ac..db79a47f12 100644 --- a/libnm-util/nm-connection.h +++ b/libnm-util/nm-connection.h @@ -40,6 +40,8 @@ gboolean nm_connection_compare (NMConnection *connection, const char * nm_connection_need_secrets (NMConnection *connection); +void nm_connection_clear_secrets (NMConnection *connection); + void nm_connection_update_secrets (NMConnection *connection, const char *setting_name, GHashTable *secrets); diff --git a/libnm-util/nm-setting.c b/libnm-util/nm-setting.c index eb4b0692b4..1955477871 100644 --- a/libnm-util/nm-setting.c +++ b/libnm-util/nm-setting.c @@ -75,6 +75,15 @@ nm_setting_update_secrets (NMSetting *setting, return TRUE; } +void +nm_setting_clear_secrets (NMSetting *setting) +{ + g_return_if_fail (setting != NULL); + + if (setting->clear_secrets_fn) + return setting->clear_secrets_fn (setting); +} + GPtrArray * nm_setting_need_secrets (NMSetting *setting) { @@ -366,6 +375,60 @@ nm_setting_hash (NMSetting *setting) return hash; } +static void +default_setting_clear_secrets (NMSetting *setting) +{ + SettingMember *m; + + g_return_if_fail (setting != NULL); + + m = setting->_members; + while (m->key) { + if (m->secret == FALSE) + goto next; + + switch (m->type) { + case NM_S_TYPE_GVALUE_HASH: { + GHashTable **val = (GHashTable **) G_STRUCT_MEMBER_P (setting, m->offset); + g_hash_table_remove_all (*val); + break; + } + case NM_S_TYPE_STRING: { + char **val = (char **) G_STRUCT_MEMBER_P (setting, m->offset); + g_free (*val); + *val = NULL; + break; + } + case NM_S_TYPE_BOOL: { + gboolean *val = (gboolean *) G_STRUCT_MEMBER_P (setting, m->offset); + *val = FALSE; + break; + } + case NM_S_TYPE_UINT32: { + guint32 *val = (guint32 *) G_STRUCT_MEMBER_P (setting, m->offset); + *val = 0; + break; + } + case NM_S_TYPE_BYTE_ARRAY: { + GByteArray **val = (GByteArray **) G_STRUCT_MEMBER_P (setting, m->offset); + g_byte_array_free (*val, TRUE); + *val = NULL; + break; + } + case NM_S_TYPE_STRING_ARRAY: { + GSList **val = (GSList **) G_STRUCT_MEMBER_P (setting, m->offset); + g_slist_foreach (*val, (GFunc) g_free, NULL); + g_slist_free (*val); + *val = NULL; + break; + } + } + +next: + m++; + } +} + /* Connection */ @@ -410,6 +473,7 @@ nm_setting_connection_new (void) setting->_members = con_table; setting->verify_fn = setting_connection_verify; setting->hash_fn = default_setting_hash; + setting->clear_secrets_fn = default_setting_clear_secrets; setting->destroy_fn = setting_connection_destroy; return setting; @@ -478,6 +542,7 @@ nm_setting_ip4_config_new (void) setting->_members = ip4_config_table; setting->verify_fn = setting_ip4_config_verify; setting->hash_fn = default_setting_hash; + setting->clear_secrets_fn = default_setting_clear_secrets; setting->destroy_fn = setting_ip4_config_destroy; return setting; @@ -563,6 +628,7 @@ nm_setting_wired_new (void) setting->_members = wired_table; setting->verify_fn = setting_wired_verify; setting->hash_fn = default_setting_hash; + setting->clear_secrets_fn = default_setting_clear_secrets; setting->destroy_fn = setting_wired_destroy; s_wired->auto_negotiate = TRUE; @@ -715,6 +781,7 @@ nm_setting_wireless_new (void) setting->_members = wireless_table; setting->verify_fn = setting_wireless_verify; setting->hash_fn = default_setting_hash; + setting->clear_secrets_fn = default_setting_clear_secrets; setting->destroy_fn = setting_wireless_destroy; return setting; @@ -1057,6 +1124,7 @@ nm_setting_wireless_security_new (void) setting->hash_fn = default_setting_hash; setting->update_secrets_fn = setting_wireless_security_update_secrets; setting->need_secrets_fn = setting_wireless_security_need_secrets; + setting->clear_secrets_fn = default_setting_clear_secrets; setting->destroy_fn = setting_wireless_security_destroy; return setting; @@ -1127,6 +1195,7 @@ nm_setting_ppp_new (void) setting->_members = ppp_table; setting->verify_fn = setting_ppp_verify; setting->hash_fn = default_setting_hash; + setting->clear_secrets_fn = default_setting_clear_secrets; setting->destroy_fn = setting_ppp_destroy; return setting; @@ -1193,6 +1262,7 @@ nm_setting_vpn_new (void) setting->_members = vpn_table; setting->verify_fn = setting_vpn_verify; setting->hash_fn = default_setting_hash; + setting->clear_secrets_fn = default_setting_clear_secrets; setting->destroy_fn = setting_vpn_destroy; return setting; @@ -1274,6 +1344,7 @@ nm_setting_vpn_properties_new (void) setting->_members = vpn_properties_table; setting->verify_fn = setting_vpn_properties_verify; setting->hash_fn = setting_vpn_properties_hash; + setting->clear_secrets_fn = default_setting_clear_secrets; setting->destroy_fn = setting_vpn_properties_destroy; s_vpn_props = (NMSettingVPNProperties *) setting; diff --git a/libnm-util/nm-setting.h b/libnm-util/nm-setting.h index 6d4c3dd944..8c4369c836 100644 --- a/libnm-util/nm-setting.h +++ b/libnm-util/nm-setting.h @@ -20,6 +20,8 @@ typedef gboolean (*NMSettingUpdateSecretsFn) (NMSetting *setting, typedef GPtrArray *(*NMSettingNeedSecretsFn) (NMSetting *setting); +typedef void (*NMSettingClearSecretsFn) (NMSetting *setting); + typedef void (*NMSettingDestroyFn) (NMSetting *setting); typedef void (*NMSettingValueIterFn) (NMSetting *setting, @@ -52,6 +54,7 @@ struct _NMSetting { NMSettingToHashFn hash_fn; NMSettingUpdateSecretsFn update_secrets_fn; NMSettingNeedSecretsFn need_secrets_fn; + NMSettingClearSecretsFn clear_secrets_fn; NMSettingDestroyFn destroy_fn; }; @@ -59,6 +62,7 @@ gboolean nm_settings_verify (GHashTable *all_settings); GHashTable *nm_setting_to_hash (NMSetting *setting); gboolean nm_setting_update_secrets (NMSetting *setting, GHashTable *secrets); GPtrArray * nm_setting_need_secrets (NMSetting *setting); +void nm_setting_clear_secrets (NMSetting *setting); void nm_setting_destroy (NMSetting *setting); void nm_setting_enumerate_values (NMSetting *setting, NMSettingValueIterFn func,