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:
14
ChangeLog
14
ChangeLog
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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;
|
||||||
|
@@ -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 {
|
||||||
|
@@ -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,
|
||||||
|
@@ -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,
|
||||||
|
@@ -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);
|
||||||
|
@@ -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;
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user