summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Winship <danw@gnome.org>2014-01-29 11:48:03 -0500
committerDan Winship <danw@gnome.org>2014-01-30 09:12:04 -0500
commit8e391dc3619f0c8192303c383e36f18984b33545 (patch)
treeea5559bdad89c88cddd268e12dc68dcb8566c49c
parent22c3a813ddfa991f63f00b1b49a14494d581e997 (diff)
downloadNetworkManager-8e391dc3619f0c8192303c383e36f18984b33545.tar.gz
core: make find_master() return a GError on failure
-rw-r--r--src/nm-manager.c28
1 files changed, 18 insertions, 10 deletions
diff --git a/src/nm-manager.c b/src/nm-manager.c
index eabf9a157f..e61d796341 100644
--- a/src/nm-manager.c
+++ b/src/nm-manager.c
@@ -180,7 +180,8 @@ static gboolean find_master (NMManager *self,
NMConnection *connection,
NMDevice *device,
NMConnection **out_master_connection,
- NMDevice **out_master_device);
+ NMDevice **out_master_device,
+ GError **error);
static void nm_manager_update_state (NMManager *manager);
@@ -1940,7 +1941,7 @@ add_device (NMManager *self, NMDevice *device, gboolean generate_con)
NMActRequest *master_req;
/* If the device is a slave or VLAN, find the master ActiveConnection */
- if (find_master (self, connection, device, NULL, &master) && master) {
+ if (find_master (self, connection, device, NULL, &master, NULL) && master) {
master_req = nm_device_get_act_request (master);
if (master_req)
nm_active_connection_set_master (active, NM_ACTIVE_CONNECTION (master_req));
@@ -2425,6 +2426,7 @@ impl_manager_get_device_by_ip_iface (NMManager *self,
* that master connection was found
* @out_master_device: on success, the master device of @connection if that
* master device was found
+ * @error: the error, if an error occurred
*
* Given an #NMConnection, attempts to find its master. If @connection has
* no master, this will return %TRUE and @out_master_connection and
@@ -2455,7 +2457,8 @@ find_master (NMManager *self,
NMConnection *connection,
NMDevice *device,
NMConnection **out_master_connection,
- NMDevice **out_master_device)
+ NMDevice **out_master_device,
+ GError **error)
{
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
NMSettingConnection *s_con;
@@ -2474,9 +2477,11 @@ find_master (NMManager *self,
/* Try as an interface name first */
master_device = find_device_by_ip_iface (self, master);
if (master_device) {
- /* A device obviously can't be its own master */
- if (master_device == device)
+ if (master_device == device) {
+ g_set_error_literal (error, NM_MANAGER_ERROR, NM_MANAGER_ERROR_DEPENDENCY_FAILED,
+ "Device cannot be its own master");
return FALSE;
+ }
} else {
/* Try master as a connection UUID */
master_connection = (NMConnection *) nm_settings_get_connection_by_uuid (priv->settings, master);
@@ -2520,7 +2525,13 @@ find_master (NMManager *self,
if (out_master_device)
*out_master_device = master_device;
- return master_device || master_connection;
+ if (master_device || master_connection)
+ return TRUE;
+ else {
+ g_set_error_literal (error, NM_MANAGER_ERROR, NM_MANAGER_ERROR_UNKNOWN_DEVICE,
+ "Master connection not found or invalid");
+ return FALSE;
+ }
}
static gboolean
@@ -2783,11 +2794,8 @@ _internal_activate_device (NMManager *self, NMActiveConnection *active, GError *
}
/* Try to find the master connection/device if the connection has a dependency */
- if (!find_master (self, connection, device, &master_connection, &master_device)) {
- g_set_error_literal (error, NM_MANAGER_ERROR, NM_MANAGER_ERROR_UNKNOWN_DEVICE,
- "Master connection not found or invalid");
+ if (!find_master (self, connection, device, &master_connection, &master_device, error))
return FALSE;
- }
/* Ensure there's a master active connection the new connection we're
* activating can depend on.