summary refs log tree commit diff
path: root/src/settings/plugins/ifnet
diff options
context:
space:
mode:
authorMichael Biebl <biebl@debian.org>2017-11-07 00:14:39 +0100
committerMichael Biebl <biebl@debian.org>2017-11-07 00:14:39 +0100
commit90e8691111889a7b5f3c812f5a41f15a8a058913 (patch)
treef101a879eca27c34a9bfa5f3da52266b22539a36 /src/settings/plugins/ifnet
parentbdb6eeb0670658255c2a4c3c501c0a27fa8cfe55 (diff)
New upstream version 1.9.90 upstream/1.9.90
Diffstat (limited to 'src/settings/plugins/ifnet')
-rw-r--r--src/settings/plugins/ifnet/nms-ifnet-connection-parser.c2
-rw-r--r--src/settings/plugins/ifnet/nms-ifnet-connection.c76
-rw-r--r--src/settings/plugins/ifnet/nms-ifnet-net-parser.c6
-rw-r--r--src/settings/plugins/ifnet/nms-ifnet-plugin.c45
-rw-r--r--src/settings/plugins/ifnet/nms-ifnet-wpa-parser.c9
5 files changed, 70 insertions, 68 deletions
diff --git a/src/settings/plugins/ifnet/nms-ifnet-connection-parser.c b/src/settings/plugins/ifnet/nms-ifnet-connection-parser.c
index c5129fea..ed0a757f 100644
--- a/src/settings/plugins/ifnet/nms-ifnet-connection-parser.c
+++ b/src/settings/plugins/ifnet/nms-ifnet-connection-parser.c
@@ -31,7 +31,7 @@
 #include "settings/nm-settings-plugin.h"
 #include "nm-core-internal.h"
 #include "NetworkManagerUtils.h"
-#include "nm-setting-metadata.h"
+#include "nm-meta-setting.h"
 
 #include "nms-ifnet-net-utils.h"
 #include "nms-ifnet-wpa-parser.h"
diff --git a/src/settings/plugins/ifnet/nms-ifnet-connection.c b/src/settings/plugins/ifnet/nms-ifnet-connection.c
index ba87d46c..5dbb124c 100644
--- a/src/settings/plugins/ifnet/nms-ifnet-connection.c
+++ b/src/settings/plugins/ifnet/nms-ifnet-connection.c
@@ -74,89 +74,81 @@ nm_ifnet_connection_get_conn_name (NMIfnetConnection *connection)
 	return NM_IFNET_CONNECTION_GET_PRIVATE (connection)->conn_name;
 }
 
-static void
+static gboolean
 commit_changes (NMSettingsConnection *connection,
+                NMConnection *new_connection,
                 NMSettingsConnectionCommitReason commit_reason,
-                NMSettingsConnectionCommitFunc callback,
-                gpointer user_data)
+                NMConnection **out_reread_connection,
+                char **out_logmsg_change,
+                GError **error)
 {
-	GError *error = NULL;
 	NMIfnetConnectionPrivate *priv = NM_IFNET_CONNECTION_GET_PRIVATE ((NMIfnetConnection *) connection);
-	gchar *new_name = NULL;
+	char *new_name = NULL;
 	gboolean success = FALSE;
+	gboolean added = FALSE;
+
+	nm_assert (out_reread_connection && !*out_reread_connection);
+	nm_assert (!out_logmsg_change || !*out_logmsg_change);
 
 	g_signal_emit (connection, signals[IFNET_CANCEL_MONITORS], 0);
 
 	if (priv->conn_name) {
-		/* Existing connection; update it */
 		success = ifnet_update_parsers_by_connection (NM_CONNECTION (connection),
 		                                              priv->conn_name,
 		                                              CONF_NET_FILE,
 		                                              WPA_SUPPLICANT_CONF,
 		                                              &new_name,
 		                                              NULL,
-		                                              &error);
+		                                              error);
 	} else {
-		/* New connection, add it */
+		added = TRUE;
 		success = ifnet_add_new_connection (NM_CONNECTION (connection),
 		                                    CONF_NET_FILE,
 		                                    WPA_SUPPLICANT_CONF,
 		                                    &new_name,
 		                                    NULL,
-		                                    &error);
-		if (success)
-			reload_parsers ();
+		                                    error);
 	}
 
+	g_assert (!!success == (new_name != NULL));
 	if (success) {
-		/* update connection name */
-		g_assert (new_name);
 		g_free (priv->conn_name);
 		priv->conn_name = new_name;
-
-		NM_SETTINGS_CONNECTION_CLASS (nm_ifnet_connection_parent_class)->commit_changes (connection, commit_reason, callback, user_data);
-		nm_log_info (LOGD_SETTINGS, "Successfully updated %s", priv->conn_name);
-	} else {
-		nm_log_warn (LOGD_SETTINGS, "Failed to update %s",
-		             priv->conn_name ? priv->conn_name :
-		             nm_connection_get_id (NM_CONNECTION (connection)));
-		reload_parsers ();
-		callback (connection, error, user_data);
-		g_error_free (error);
 	}
 
+	reload_parsers ();
+
 	g_signal_emit (connection, signals[IFNET_SETUP_MONITORS], 0);
+
+	if (success) {
+		NM_SET_OUT (out_logmsg_change,
+		            g_strdup_printf ("ifcfg-rh: %s %s",
+		                             added ? "persist" : "updated",
+		                             new_name));
+	}
+	return success;
 }
 
-static void
-do_delete (NMSettingsConnection *connection,
-           NMSettingsConnectionDeleteFunc callback,
-           gpointer user_data)
+static gboolean
+delete (NMSettingsConnection *connection,
+        GError **error)
 {
-	GError *error = NULL;
 	NMIfnetConnectionPrivate *priv = NM_IFNET_CONNECTION_GET_PRIVATE ((NMIfnetConnection *) connection);
 
-	g_signal_emit (connection, signals[IFNET_CANCEL_MONITORS], 0);
-
 	/* Only connections which exist in /etc/conf.d/net will have a conn_name */
 	if (priv->conn_name) {
+		g_signal_emit (connection, signals[IFNET_CANCEL_MONITORS], 0);
+
 		if (!ifnet_delete_connection_in_parsers (priv->conn_name, CONF_NET_FILE, WPA_SUPPLICANT_CONF, NULL)) {
 			nm_log_warn (LOGD_SETTINGS, "Failed to delete %s", priv->conn_name);
 			reload_parsers ();
-			callback (connection, error, user_data);
-			g_error_free (error);
-			g_signal_emit (connection, signals[IFNET_SETUP_MONITORS], 0);
-			return;
+			/* let's not return an error. */
 		}
-	}
-
-	NM_SETTINGS_CONNECTION_CLASS (nm_ifnet_connection_parent_class)->delete (connection, callback, user_data);
 
-	g_signal_emit (connection, signals[IFNET_SETUP_MONITORS], 0);
+		g_signal_emit (connection, signals[IFNET_SETUP_MONITORS], 0);
+	}
 
-	nm_log_info (LOGD_SETTINGS, "Successfully deleted %s",
-	             priv->conn_name ? priv->conn_name :
-	             nm_connection_get_id (NM_CONNECTION (connection)));
+	return TRUE;
 }
 
 /*****************************************************************************/
@@ -222,7 +214,7 @@ nm_ifnet_connection_class_init (NMIfnetConnectionClass * ifnet_connection_class)
 
 	object_class->finalize = finalize;
 
-	settings_class->delete = do_delete;
+	settings_class->delete = delete;
 	settings_class->commit_changes = commit_changes;
 
 	signals[IFNET_SETUP_MONITORS] =
diff --git a/src/settings/plugins/ifnet/nms-ifnet-net-parser.c b/src/settings/plugins/ifnet/nms-ifnet-net-parser.c
index 0007f9cd..d3e47219 100644
--- a/src/settings/plugins/ifnet/nms-ifnet-net-parser.c
+++ b/src/settings/plugins/ifnet/nms-ifnet-net-parser.c
@@ -58,7 +58,7 @@ add_new_connection_config (const gchar * type, const gchar * name)
 	/* Return existing connection */
 	if ((new_conn = g_hash_table_lookup (conn_table, name)) != NULL)
 		return new_conn;
-	new_conn = g_hash_table_new (g_str_hash, g_str_equal);
+	new_conn = g_hash_table_new (nm_str_hash, g_str_equal);
 	new_name = g_strdup (name);
 	g_hash_table_insert (new_conn, g_strdup ("name"), new_name);
 	g_hash_table_insert (new_conn, g_strdup ("type"), g_strdup (type));
@@ -302,8 +302,8 @@ ifnet_init (gchar * config_file)
 
 	net_parser_data_changed = FALSE;
 
-	conn_table = g_hash_table_new (g_str_hash, g_str_equal);
-	global_settings_table = g_hash_table_new (g_str_hash, g_str_equal);
+	conn_table = g_hash_table_new (nm_str_hash, g_str_equal);
+	global_settings_table = g_hash_table_new (nm_str_hash, g_str_equal);
 	functions_list = NULL;
 
 	if (g_file_test (config_file, G_FILE_TEST_IS_REGULAR))
diff --git a/src/settings/plugins/ifnet/nms-ifnet-plugin.c b/src/settings/plugins/ifnet/nms-ifnet-plugin.c
index 5a6a8ce8..998b04b4 100644
--- a/src/settings/plugins/ifnet/nms-ifnet-plugin.c
+++ b/src/settings/plugins/ifnet/nms-ifnet-plugin.c
@@ -138,9 +138,9 @@ monitor_file_changes (const char *filename,
 		info->callback = callback;
 		info->user_data = user_data;
 		g_object_weak_ref (G_OBJECT (monitor), (GWeakNotify) g_free,
-				   info);
+		                   info);
 		g_signal_connect (monitor, "changed", G_CALLBACK (file_changed),
-				  info);
+		                  info);
 	} else {
 		nm_log_warn (LOGD_SETTINGS, "Monitoring %s failed, error: %s", filename,
 		             error == NULL ? "nothing" : (*error)->message);
@@ -150,34 +150,38 @@ monitor_file_changes (const char *filename,
 }
 
 static void
-setup_monitors (NMIfnetConnection * connection, gpointer user_data)
+setup_monitors (NMIfnetConnection *connection, gpointer user_data)
 {
 	SettingsPluginIfnet *self = SETTINGS_PLUGIN_IFNET (user_data);
 	SettingsPluginIfnetPrivate *priv = SETTINGS_PLUGIN_IFNET_GET_PRIVATE (self);
 
-	if (nm_config_get_monitor_connection_files (nm_config_get ())) {
-		priv->net_monitor =
-			monitor_file_changes (CONF_NET_FILE, (FileChangedFn) reload_connections,
-			                      user_data);
-		priv->wpa_monitor =
-			monitor_file_changes (WPA_SUPPLICANT_CONF, (FileChangedFn) reload_connections,
-			                      user_data);
-	}
+	if (!nm_config_get_monitor_connection_files (nm_config_get ()))
+		return;
+
+	if (priv->net_monitor || priv->wpa_monitor)
+		return;
+
+	priv->net_monitor = monitor_file_changes (CONF_NET_FILE,
+	                                          (FileChangedFn) reload_connections,
+	                                          user_data);
+	priv->wpa_monitor = monitor_file_changes (WPA_SUPPLICANT_CONF,
+	                                          (FileChangedFn) reload_connections,
+	                                          user_data);
 }
 
 static void
-cancel_monitors (NMIfnetConnection * connection, gpointer user_data)
+cancel_monitors (NMIfnetConnection *connection, gpointer user_data)
 {
 	SettingsPluginIfnet *self = SETTINGS_PLUGIN_IFNET (user_data);
 	SettingsPluginIfnetPrivate *priv = SETTINGS_PLUGIN_IFNET_GET_PRIVATE (self);
 
 	if (priv->net_monitor) {
 		g_file_monitor_cancel (priv->net_monitor);
-		g_object_unref (priv->net_monitor);
+		g_clear_object (&priv->net_monitor);
 	}
 	if (priv->wpa_monitor) {
 		g_file_monitor_cancel (priv->wpa_monitor);
-		g_object_unref (priv->wpa_monitor);
+		g_clear_object (&priv->wpa_monitor);
 	}
 }
 
@@ -226,7 +230,7 @@ reload_connections (NMSettingsPlugin *config)
 	                                                 NM_CONFIG_KEYFILE_GROUP_IFNET, NM_CONFIG_KEYFILE_KEY_IFNET_AUTO_REFRESH,
 	                                                 FALSE);
 
-	new_connections = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, g_object_unref);
+	new_connections = g_hash_table_new_full (nm_str_hash, g_str_equal, NULL, g_object_unref);
 
 	/* Reread on-disk data and refresh in-memory connections from it */
 	conn_names = ifnet_get_connection_names ();
@@ -321,11 +325,11 @@ add_connection (NMSettingsPlugin *config,
 	 * asked to write it to disk.
 	 */
 	if (!ifnet_can_write_connection (source, error))
-		return NULL;
+		goto out;
 
 	if (save_to_disk) {
 		if (!ifnet_add_new_connection (source, CONF_NET_FILE, WPA_SUPPLICANT_CONF, NULL, NULL, error))
-			return NULL;
+			goto out;
 		reload_connections (config);
 		new = g_hash_table_lookup (priv->connections, nm_connection_get_uuid (source));
 	} else {
@@ -337,6 +341,11 @@ add_connection (NMSettingsPlugin *config,
 		}
 	}
 
+out:
+	if (!new && error && !*error) {
+		g_set_error_literal (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_FAILED,
+		                     "The ifnet plugin cannot add the connection (unknown error).");
+	}
 	return (NMSettingsConnection *) new;
 }
 
@@ -439,7 +448,7 @@ init (NMSettingsPlugin *config)
 
 	nm_log_info (LOGD_SETTINGS, "Initializing!");
 
-	priv->connections = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
+	priv->connections = g_hash_table_new_full (nm_str_hash, g_str_equal, g_free, g_object_unref);
 	priv->unmanaged_well_known = !is_managed_plugin ();
 	nm_log_info (LOGD_SETTINGS, "management mode: %s",
 	             priv->unmanaged_well_known ? "unmanaged" : "managed");
diff --git a/src/settings/plugins/ifnet/nms-ifnet-wpa-parser.c b/src/settings/plugins/ifnet/nms-ifnet-wpa-parser.c
index 61e4da7c..2b62e886 100644
--- a/src/settings/plugins/ifnet/nms-ifnet-wpa-parser.c
+++ b/src/settings/plugins/ifnet/nms-ifnet-wpa-parser.c
@@ -26,6 +26,7 @@
 #include <string.h>
 #include <stdlib.h>
 
+#include "nm-utils/nm-hash-utils.h"
 #include "settings/nm-settings-plugin.h"
 
 #include "nms-ifnet-net-parser.h"
@@ -270,8 +271,8 @@ wpa_parser_init (const char *wpa_supplicant_conf)
 	gboolean complete = FALSE;
 
 	wpa_parser_data_changed = FALSE;
-	wsec_table = g_hash_table_new (g_str_hash, g_str_equal);
-	wsec_global_table = g_hash_table_new (g_str_hash, g_str_equal);
+	wsec_table = g_hash_table_new (nm_str_hash, g_str_equal);
+	wsec_global_table = g_hash_table_new (nm_str_hash, g_str_equal);
 
 	if (g_file_test (wpa_supplicant_conf, G_FILE_TEST_IS_REGULAR))
 		channel =
@@ -292,7 +293,7 @@ wpa_parser_init (const char *wpa_supplicant_conf)
 				continue;
 			} else {
 				GHashTable *network =
-				    g_hash_table_new (g_str_hash, g_str_equal);
+				    g_hash_table_new (nm_str_hash, g_str_equal);
 
 				do {
 					gchar *quote_start, *quote_end = NULL, *comment;
@@ -512,7 +513,7 @@ wpa_add_security (const char *ssid)
 		return TRUE;
 	else {
 		GHashTable *security =
-		    g_hash_table_new (g_str_hash, g_str_equal);
+		    g_hash_table_new (nm_str_hash, g_str_equal);
 		gchar *ssid_i;
 
 		nm_log_info (LOGD_SETTINGS, "Adding security for %s", ssid);