2007-09-25 Dan Williams <dcbw@redhat.com>

* 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
This commit is contained in:
Dan Williams 2007-09-25 06:11:44 +00:00
parent a4ab8e22e6
commit 008bab498f
5 changed files with 113 additions and 0 deletions

View file

@ -1,3 +1,20 @@
2007-09-25 Dan Williams <dcbw@redhat.com>
* 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 <dcbw@redhat.com>
* src/nm-activation-request.c

View file

@ -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)
{

View file

@ -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);

View file

@ -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;

View file

@ -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,