summaryrefslogtreecommitdiff
path: root/system-settings/plugins/ifcfg-rh/plugin.c
diff options
context:
space:
mode:
Diffstat (limited to 'system-settings/plugins/ifcfg-rh/plugin.c')
-rw-r--r--system-settings/plugins/ifcfg-rh/plugin.c122
1 files changed, 51 insertions, 71 deletions
diff --git a/system-settings/plugins/ifcfg-rh/plugin.c b/system-settings/plugins/ifcfg-rh/plugin.c
index 121aa80362..361a858005 100644
--- a/system-settings/plugins/ifcfg-rh/plugin.c
+++ b/system-settings/plugins/ifcfg-rh/plugin.c
@@ -72,9 +72,6 @@ G_DEFINE_TYPE_EXTENDED (SCPluginIfcfg, sc_plugin_ifcfg, G_TYPE_OBJECT, 0,
typedef struct {
- DBusGConnection *g_connection;
- NMSystemConfigHalManager *hal_mgr;
-
GHashTable *connections;
gulong ih_event_id;
@@ -87,40 +84,6 @@ typedef struct {
static void
-check_unmanaged (gpointer key, gpointer data, gpointer user_data)
-{
- GSList **list = (GSList **) user_data;
- NMIfcfgConnection *connection = NM_IFCFG_CONNECTION (data);
- const char *udi;
- GSList *iter;
-
- if (!nm_ifcfg_connection_get_unmanaged (connection))
- return;
-
- udi = nm_ifcfg_connection_get_udi (connection);
- if (!udi)
- return;
-
- /* Just return if the UDI is already in the list */
- for (iter = *list; iter; iter = g_slist_next (iter)) {
- if (!strcmp ((char *) iter->data, udi))
- return;
- }
-
- *list = g_slist_prepend (*list, g_strdup (udi));
-}
-
-static GSList *
-get_unmanaged_devices (NMSystemConfigInterface *config)
-{
- SCPluginIfcfgPrivate *priv = SC_PLUGIN_IFCFG_GET_PRIVATE (config);
- GSList *list = NULL;
-
- g_hash_table_foreach (priv->connections, check_unmanaged, &list);
- return list;
-}
-
-static void
connection_unmanaged_changed (NMIfcfgConnection *connection,
GParamSpec *pspec,
gpointer user_data)
@@ -152,7 +115,7 @@ read_one_connection (SCPluginIfcfg *plugin, const char *filename)
PLUGIN_PRINT (IFCFG_PLUGIN_NAME, "parsing %s ... ", filename);
- connection = nm_ifcfg_connection_new (filename, priv->g_connection, priv->hal_mgr, &error, &ignore_error);
+ connection = nm_ifcfg_connection_new (filename, &error, &ignore_error);
if (connection) {
NMConnection *wrapped;
NMSettingConnection *s_con;
@@ -171,7 +134,7 @@ read_one_connection (SCPluginIfcfg *plugin, const char *filename)
g_object_ref (connection));
PLUGIN_PRINT (IFCFG_PLUGIN_NAME, " read connection '%s'", cid);
- if (nm_ifcfg_connection_get_unmanaged (connection)) {
+ if (nm_ifcfg_connection_get_unmanaged_spec (connection)) {
PLUGIN_PRINT (IFCFG_PLUGIN_NAME, "Ignoring connection '%s' and its "
"device because NM_CONTROLLED was false.", cid);
g_signal_emit_by_name (plugin, "unmanaged-devices-changed");
@@ -271,11 +234,11 @@ connection_changed_handler (SCPluginIfcfg *plugin,
gboolean *do_remove,
gboolean *do_new)
{
- SCPluginIfcfgPrivate *priv = SC_PLUGIN_IFCFG_GET_PRIVATE (plugin);
NMIfcfgConnection *tmp;
GError *error = NULL;
GHashTable *settings;
- gboolean new_unmanaged, old_unmanaged, ignore_error = FALSE;
+ gboolean ignore_error = FALSE;
+ const char *new_unmanaged = NULL, *old_unmanaged = NULL;
g_return_if_fail (plugin != NULL);
g_return_if_fail (path != NULL);
@@ -285,10 +248,7 @@ connection_changed_handler (SCPluginIfcfg *plugin,
PLUGIN_PRINT (IFCFG_PLUGIN_NAME, "updating %s", path);
- tmp = (NMIfcfgConnection *) nm_ifcfg_connection_new (path, priv->g_connection,
- priv->hal_mgr,
- &error,
- &ignore_error);
+ tmp = (NMIfcfgConnection *) nm_ifcfg_connection_new (path, &error, &ignore_error);
if (!tmp) {
/* errors reading connection; remove it */
if (!ignore_error) {
@@ -304,8 +264,8 @@ connection_changed_handler (SCPluginIfcfg *plugin,
/* Successfully read connection changes */
- old_unmanaged = nm_ifcfg_connection_get_unmanaged (NM_IFCFG_CONNECTION (connection));
- new_unmanaged = nm_ifcfg_connection_get_unmanaged (NM_IFCFG_CONNECTION (tmp));
+ old_unmanaged = nm_ifcfg_connection_get_unmanaged_spec (NM_IFCFG_CONNECTION (connection));
+ new_unmanaged = nm_ifcfg_connection_get_unmanaged_spec (NM_IFCFG_CONNECTION (tmp));
if (new_unmanaged) {
if (!old_unmanaged) {
@@ -318,7 +278,7 @@ connection_changed_handler (SCPluginIfcfg *plugin,
new_wrapped = nm_exported_connection_get_connection (NM_EXPORTED_CONNECTION (tmp));
old_wrapped = nm_exported_connection_get_connection (NM_EXPORTED_CONNECTION (connection));
- if (old_unmanaged) { /* no longer unmanaged */
+ if (old_unmanaged) { /* now managed */
NMSettingConnection *s_con;
const char *cid;
@@ -364,11 +324,11 @@ handle_connection_remove_or_new (SCPluginIfcfg *plugin,
g_return_if_fail (path != NULL);
if (do_remove) {
- gboolean unmanaged;
+ const char *unmanaged;
g_return_if_fail (connection != NULL);
- unmanaged = nm_ifcfg_connection_get_unmanaged (connection);
+ unmanaged = nm_ifcfg_connection_get_unmanaged_spec (connection);
g_hash_table_remove (priv->connections, path);
nm_exported_connection_signal_removed (NM_EXPORTED_CONNECTION (connection));
@@ -380,7 +340,7 @@ handle_connection_remove_or_new (SCPluginIfcfg *plugin,
if (do_new) {
connection = read_one_connection (plugin, path);
if (connection) {
- if (!nm_ifcfg_connection_get_unmanaged (NM_IFCFG_CONNECTION (connection)))
+ if (!nm_ifcfg_connection_get_unmanaged_spec (NM_IFCFG_CONNECTION (connection)))
g_signal_emit_by_name (plugin, "connection-added", connection);
}
}
@@ -454,7 +414,7 @@ hash_to_slist (gpointer key, gpointer value, gpointer user_data)
NMIfcfgConnection *exported = NM_IFCFG_CONNECTION (value);
GSList **list = (GSList **) user_data;
- if (!nm_ifcfg_connection_get_unmanaged (exported))
+ if (!nm_ifcfg_connection_get_unmanaged_spec (exported))
*list = g_slist_prepend (*list, value);
}
@@ -475,6 +435,43 @@ get_connections (NMSystemConfigInterface *config)
return list;
}
+static void
+check_unmanaged (gpointer key, gpointer data, gpointer user_data)
+{
+ GSList **list = (GSList **) user_data;
+ NMIfcfgConnection *connection = NM_IFCFG_CONNECTION (data);
+ const char *unmanaged_spec;
+ GSList *iter;
+
+ unmanaged_spec = nm_ifcfg_connection_get_unmanaged_spec (connection);
+ if (!unmanaged_spec)
+ return;
+
+ /* Just return if the unmanaged spec is already in the list */
+ for (iter = *list; iter; iter = g_slist_next (iter)) {
+ if (!strcmp ((char *) iter->data, unmanaged_spec))
+ return;
+ }
+
+ *list = g_slist_prepend (*list, g_strdup (unmanaged_spec));
+}
+
+static GSList *
+get_unmanaged_specs (NMSystemConfigInterface *config)
+{
+ SCPluginIfcfg *plugin = SC_PLUGIN_IFCFG (config);
+ SCPluginIfcfgPrivate *priv = SC_PLUGIN_IFCFG_GET_PRIVATE (config);
+ GSList *list = NULL;
+
+ if (!priv->connections) {
+ setup_ifcfg_monitoring (plugin);
+ read_connections (plugin);
+ }
+
+ g_hash_table_foreach (priv->connections, check_unmanaged, &list);
+ return list;
+}
+
static gboolean
add_connection (NMSystemConfigInterface *config,
NMConnection *connection,
@@ -560,28 +557,16 @@ sc_network_changed_cb (NMInotifyHelper *ih,
}
static void
-init (NMSystemConfigInterface *config, NMSystemConfigHalManager *hal_manager)
+init (NMSystemConfigInterface *config)
{
- SCPluginIfcfg *plugin = SC_PLUGIN_IFCFG (config);
- SCPluginIfcfgPrivate *priv = SC_PLUGIN_IFCFG_GET_PRIVATE (plugin);
-
- priv->hal_mgr = g_object_ref (hal_manager);
}
static void
sc_plugin_ifcfg_init (SCPluginIfcfg *plugin)
{
SCPluginIfcfgPrivate *priv = SC_PLUGIN_IFCFG_GET_PRIVATE (plugin);
- GError *error = NULL;
NMInotifyHelper *ih;
- priv->g_connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
- if (!priv->g_connection) {
- PLUGIN_PRINT (IFCFG_PLUGIN_NAME, " dbus-glib error: %s",
- error->message ? error->message : "(unknown)");
- g_error_free (error);
- }
-
ih = nm_inotify_helper_get ();
priv->ih_event_id = g_signal_connect (ih, "event", G_CALLBACK (sc_network_changed_cb), plugin);
priv->sc_network_wd = nm_inotify_helper_add_watch (ih, SC_NETWORK_FILE);
@@ -596,8 +581,6 @@ dispose (GObject *object)
SCPluginIfcfgPrivate *priv = SC_PLUGIN_IFCFG_GET_PRIVATE (plugin);
NMInotifyHelper *ih;
- g_object_unref (priv->hal_mgr);
-
ih = nm_inotify_helper_get ();
g_signal_handler_disconnect (ih, priv->ih_event_id);
@@ -607,9 +590,6 @@ dispose (GObject *object)
g_free (priv->hostname);
- if (priv->g_connection)
- dbus_g_connection_unref (priv->g_connection);
-
if (priv->connections)
g_hash_table_destroy (priv->connections);
@@ -709,7 +689,7 @@ system_config_interface_init (NMSystemConfigInterface *system_config_interface_c
/* interface implementation */
system_config_interface_class->get_connections = get_connections;
system_config_interface_class->add_connection = add_connection;
- system_config_interface_class->get_unmanaged_devices = get_unmanaged_devices;
+ system_config_interface_class->get_unmanaged_specs = get_unmanaged_specs;
system_config_interface_class->init = init;
}