2008-11-19 Dan Williams <dcbw@redhat.com>

* libnm-util/nm-connection.c
	  libnm-util/nm-connection.h
		- (nm_connection_replace_settings): take a GError

	* libnm-glib/nm-settings.c
	  libnm-glib/nm-dbus-connection.c
	  src/nm-manager.c
	  system-settings/plugins/ifcfg-suse/nm-suse-connection.c
	  system-settings/plugins/keyfile/nm-keyfile-connection.c
	  system-settings/plugins/keyfile/plugin.c
		- Handle, or don't handle, errors from nm_connection_replace_settings()



git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@4298 4912f4e0-d625-0410-9fb7-b9a5a253dbdc
This commit is contained in:
Dan Williams
2008-11-19 15:09:05 +00:00
parent 68a2fc9739
commit 3c2d8253ec
9 changed files with 89 additions and 32 deletions

View File

@@ -1,3 +1,17 @@
2008-11-19 Dan Williams <dcbw@redhat.com>
* libnm-util/nm-connection.c
libnm-util/nm-connection.h
- (nm_connection_replace_settings): take a GError
* libnm-glib/nm-settings.c
libnm-glib/nm-dbus-connection.c
src/nm-manager.c
system-settings/plugins/ifcfg-suse/nm-suse-connection.c
system-settings/plugins/keyfile/nm-keyfile-connection.c
system-settings/plugins/keyfile/plugin.c
- Handle, or don't handle, errors from nm_connection_replace_settings()
2008-11-19 Dan Williams <dcbw@redhat.com> 2008-11-19 Dan Williams <dcbw@redhat.com>
* libnm-util/libnm-util.ver * libnm-util/libnm-util.ver

View File

@@ -94,12 +94,20 @@ connection_updated_cb (DBusGProxy *proxy, GHashTable *settings, gpointer user_da
{ {
NMExportedConnection *exported = NM_EXPORTED_CONNECTION (user_data); NMExportedConnection *exported = NM_EXPORTED_CONNECTION (user_data);
NMConnection *wrapped; NMConnection *wrapped;
GError *error = NULL;
wrapped = nm_exported_connection_get_connection (exported); wrapped = nm_exported_connection_get_connection (exported);
if (nm_connection_replace_settings (wrapped, settings)) if (nm_connection_replace_settings (wrapped, settings, &error))
nm_exported_connection_signal_updated (exported, settings); nm_exported_connection_signal_updated (exported, settings);
else else {
g_warning ("%s: '%s' / '%s' invalid: %d",
__func__,
error ? g_type_name (nm_connection_lookup_setting_type_by_quark (error->domain)) : "(none)",
(error && error->message) ? error->message : "(none)",
error ? error->code : -1);
g_clear_error (&error);
nm_exported_connection_signal_removed (exported); nm_exported_connection_signal_removed (exported);
}
} }
static void static void

View File

@@ -524,6 +524,7 @@ nm_exported_connection_update (NMExportedConnection *connection,
GError **err) GError **err)
{ {
gboolean success = TRUE; gboolean success = TRUE;
GError *error = NULL;
g_return_val_if_fail (NM_IS_EXPORTED_CONNECTION (connection), FALSE); g_return_val_if_fail (NM_IS_EXPORTED_CONNECTION (connection), FALSE);
g_return_val_if_fail (new_settings != NULL, FALSE); g_return_val_if_fail (new_settings != NULL, FALSE);
@@ -532,8 +533,16 @@ nm_exported_connection_update (NMExportedConnection *connection,
success = EXPORTED_CONNECTION_CLASS (connection)->update (connection, new_settings, err); success = EXPORTED_CONNECTION_CLASS (connection)->update (connection, new_settings, err);
if (success) { if (success) {
nm_connection_replace_settings (NM_EXPORTED_CONNECTION_GET_PRIVATE (connection)->wrapped, new_settings); if (!nm_connection_replace_settings (NM_EXPORTED_CONNECTION_GET_PRIVATE (connection)->wrapped, new_settings, &error)) {
nm_exported_connection_signal_updated (connection, new_settings); g_warning ("%s: '%s' / '%s' invalid: %d",
__func__,
error ? g_type_name (nm_connection_lookup_setting_type_by_quark (error->domain)) : "(none)",
(error && error->message) ? error->message : "(none)",
error ? error->code : -1);
g_clear_error (&error);
success = FALSE;
} else
nm_exported_connection_signal_updated (connection, new_settings);
} }
return success; return success;

View File

@@ -347,29 +347,30 @@ nm_connection_get_setting_by_name (NMConnection *connection, const char *name)
return type ? nm_connection_get_setting (connection, type) : NULL; return type ? nm_connection_get_setting (connection, type) : NULL;
} }
/**
* nm_connection_replace_settings:
* @connection: a #NMConnection
* @new_settings: a #GHashTable of settings
* @error: location to store error, or %NULL
*
* Returns: TRUE if the settings were valid and added to the connection, FALSE
* if they were not
**/
gboolean gboolean
nm_connection_replace_settings (NMConnection *connection, nm_connection_replace_settings (NMConnection *connection,
GHashTable *new_settings) GHashTable *new_settings,
GError **error)
{ {
GError *error = NULL; g_return_val_if_fail (connection != NULL, FALSE);
g_return_val_if_fail (NM_IS_CONNECTION (connection), FALSE); g_return_val_if_fail (NM_IS_CONNECTION (connection), FALSE);
g_return_val_if_fail (new_settings != NULL, FALSE); g_return_val_if_fail (new_settings != NULL, FALSE);
if (error)
g_return_val_if_fail (*error == NULL, FALSE);
g_hash_table_remove_all (NM_CONNECTION_GET_PRIVATE (connection)->settings); g_hash_table_remove_all (NM_CONNECTION_GET_PRIVATE (connection)->settings);
g_hash_table_foreach (new_settings, parse_one_setting, connection); g_hash_table_foreach (new_settings, parse_one_setting, connection);
if (!nm_connection_verify (connection, &error)) { return nm_connection_verify (connection, error);
g_warning ("%s: '%s' / '%s' invalid: %d",
__func__,
g_type_name (nm_connection_lookup_setting_type_by_quark (error->domain)),
error->message,
error->code);
g_error_free (error);
return FALSE;
}
return TRUE;
} }
typedef struct { typedef struct {

View File

@@ -92,7 +92,8 @@ NMSetting *nm_connection_get_setting_by_name (NMConnection *connection,
const char *name); const char *name);
gboolean nm_connection_replace_settings (NMConnection *connection, gboolean nm_connection_replace_settings (NMConnection *connection,
GHashTable *new_settings); GHashTable *new_settings,
GError **error);
/* Returns TRUE if the connections are the same */ /* Returns TRUE if the connections are the same */
gboolean nm_connection_compare (NMConnection *connection, gboolean nm_connection_compare (NMConnection *connection,

View File

@@ -970,7 +970,7 @@ connection_updated_cb (DBusGProxy *proxy, GHashTable *settings, gpointer user_da
} }
g_object_unref (new_connection); g_object_unref (new_connection);
valid = nm_connection_replace_settings (old_connection, settings); valid = nm_connection_replace_settings (old_connection, settings, NULL);
if (valid) { if (valid) {
g_signal_emit (manager, signals[CONNECTION_UPDATED], 0, g_signal_emit (manager, signals[CONNECTION_UPDATED], 0,
old_connection, old_connection,

View File

@@ -37,9 +37,20 @@ file_changed (GFileMonitor *monitor,
case G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT: case G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT:
new_connection = parse_ifcfg (priv->iface, priv->dev_type); new_connection = parse_ifcfg (priv->iface, priv->dev_type);
if (new_connection) { if (new_connection) {
GError *error = NULL;
new_settings = nm_connection_to_hash (new_connection); new_settings = nm_connection_to_hash (new_connection);
nm_connection_replace_settings (nm_exported_connection_get_connection (exported), new_settings); if (nm_connection_replace_settings (nm_exported_connection_get_connection (exported), new_settings, &error))
nm_exported_connection_signal_updated (exported, new_settings); nm_exported_connection_signal_updated (exported, new_settings);
else {
g_warning ("%s: '%s' / '%s' invalid: %d",
__func__,
error ? g_type_name (nm_connection_lookup_setting_type_by_quark (error->domain)) : "(none)",
(error && error->message) ? error->message : "(none)",
error ? error->code : -1);
g_clear_error (&error);
nm_exported_connection_signal_removed (exported);
}
g_hash_table_destroy (new_settings); g_hash_table_destroy (new_settings);
g_object_unref (new_connection); g_object_unref (new_connection);

View File

@@ -222,14 +222,16 @@ update (NMExportedConnection *exported,
char *filename = NULL; char *filename = NULL;
connection = nm_exported_connection_get_connection (exported); connection = nm_exported_connection_get_connection (exported);
nm_connection_replace_settings (connection, new_settings); success = nm_connection_replace_settings (connection, new_settings, error);
success = write_connection (connection, &filename, error); if (success) {
if (success && filename && strcmp (priv->filename, filename)) { success = write_connection (connection, &filename, error);
/* Update the filename if it changed */ if (success && filename && strcmp (priv->filename, filename)) {
g_free (priv->filename); /* Update the filename if it changed */
priv->filename = filename; g_free (priv->filename);
} else priv->filename = filename;
g_free (filename); } else
g_free (filename);
}
} }
return success; return success;

View File

@@ -133,11 +133,22 @@ update_connection_settings (NMExportedConnection *orig,
{ {
NMConnection *wrapped; NMConnection *wrapped;
GHashTable *new_settings; GHashTable *new_settings;
GError *error = NULL;
new_settings = nm_connection_to_hash (nm_exported_connection_get_connection (new)); new_settings = nm_connection_to_hash (nm_exported_connection_get_connection (new));
wrapped = nm_exported_connection_get_connection (orig); wrapped = nm_exported_connection_get_connection (orig);
nm_connection_replace_settings (wrapped, new_settings); if (nm_connection_replace_settings (wrapped, new_settings, &error))
nm_exported_connection_signal_updated (orig, new_settings); nm_exported_connection_signal_updated (orig, new_settings);
else {
g_warning ("%s: '%s' / '%s' invalid: %d",
__func__,
error ? g_type_name (nm_connection_lookup_setting_type_by_quark (error->domain)) : "(none)",
(error && error->message) ? error->message : "(none)",
error ? error->code : -1);
g_clear_error (&error);
nm_exported_connection_signal_removed (orig);
}
g_hash_table_destroy (new_settings); g_hash_table_destroy (new_settings);
} }