summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2014-08-14 15:34:39 -0500
committerThomas Haller <thaller@redhat.com>2014-09-25 10:06:17 +0200
commit5d82c848a8168bd1e9d5286e5a8f1c8266de3338 (patch)
treef68848d8a6b540313c9093d4e072c7e01a4b4f8e
parent26c903fe51d8af3c92bdf57dd193bd7e6b9ff45b (diff)
downloadNetworkManager-5d82c848a8168bd1e9d5286e5a8f1c8266de3338.tar.gz
config: back NMConfig with NMConfigData
-rw-r--r--src/main.c7
-rw-r--r--src/nm-config-data.c24
-rw-r--r--src/nm-config-data.h6
-rw-r--r--src/nm-config.c151
-rw-r--r--src/nm-config.h5
5 files changed, 74 insertions, 119 deletions
diff --git a/src/main.c b/src/main.c
index d41472d4ff..1975f33559 100644
--- a/src/main.c
+++ b/src/main.c
@@ -360,7 +360,6 @@ main (int argc, char *argv[])
GOptionEntry options[] = {
{ "version", 'V', 0, G_OPTION_ARG_NONE, &show_version, N_("Print NetworkManager version and exit"), NULL },
{ "no-daemon", 'n', G_OPTION_FLAG_REVERSE, G_OPTION_ARG_NONE, &become_daemon, N_("Don't become a daemon"), NULL },
- { "debug", 'd', 0, G_OPTION_ARG_NONE, &debug, N_("Don't become a daemon, and log to stderr"), NULL },
{ "log-level", 0, 0, G_OPTION_ARG_STRING, &opt_log_level, N_("Log level: one of [%s]"), "INFO" },
{ "log-domains", 0, 0, G_OPTION_ARG_STRING, &opt_log_domains,
N_("Log domains separated by ',': any combination of [%s]"),
@@ -419,6 +418,7 @@ main (int argc, char *argv[])
g_option_context_set_help_enabled (opt_ctx, TRUE);
g_option_context_add_main_entries (opt_ctx, options, NULL);
g_option_context_add_main_entries (opt_ctx, nm_config_get_options (), NULL);
+ g_option_context_add_main_entries (opt_ctx, nm_config_data_get_options (), NULL);
g_option_context_set_summary (opt_ctx,
_("NetworkManager monitors all network connections and automatically\nchooses the best connection to use. It also allows the user to\nspecify wireless access points which wireless cards in the computer\nshould associate with."));
@@ -496,14 +496,15 @@ main (int argc, char *argv[])
if (check_pidfile (pidfile))
exit (1);
- /* Read the config file and CLI overrides */
- config = nm_config_new (&error);
+ /* Read the config files and CLI overrides */
+ config = nm_config_new (opt_log_level, opt_log_domains, &error);
if (config == NULL) {
fprintf (stderr, _("Failed to read configuration: (%d) %s\n"),
error ? error->code : -1,
(error && error->message) ? error->message : _("unknown"));
exit (1);
}
+ debug = !!nm_config_get_debug (config);
/* Initialize logging from config file *only* if not explicitly
* specified by commandline.
diff --git a/src/nm-config-data.c b/src/nm-config-data.c
index f5f481b57c..57cfed8a07 100644
--- a/src/nm-config-data.c
+++ b/src/nm-config-data.c
@@ -177,7 +177,9 @@ nm_config_data_get_options (void)
#define IGNORE_EMPTY(s) (s && s[0] ? s : NULL)
NMConfigData *
-nm_config_data_new_cli (GError **error)
+nm_config_data_new_cli (const char *cli_log_level,
+ const char *cli_log_domains,
+ GError **error)
{
gs_strfreev char **plugins = NULL;
@@ -187,6 +189,8 @@ nm_config_data_new_cli (GError **error)
return g_object_new (NM_TYPE_CONFIG_DATA,
NM_CONFIG_DATA_PLUGINS, plugins,
NM_CONFIG_DATA_DEBUG, cli_debug ? "debug" : NULL,
+ NM_CONFIG_DATA_LOG_LEVEL, IGNORE_EMPTY (cli_log_level),
+ NM_CONFIG_DATA_LOG_DOMAINS, IGNORE_EMPTY (cli_log_domains),
NM_CONFIG_DATA_CONNECTIVITY_URI, IGNORE_EMPTY (cli_connectivity_uri),
NM_CONFIG_DATA_CONNECTIVITY_INTERVAL, cli_connectivity_interval,
NM_CONFIG_DATA_CONNECTIVITY_RESPONSE, IGNORE_EMPTY (cli_connectivity_response),
@@ -196,8 +200,6 @@ nm_config_data_new_cli (GError **error)
NMConfigData *
nm_config_data_new_keyfile (GKeyFile *keyfile,
NMConfigData *override,
- const char *override_log_level,
- const char *override_log_domains,
GError **error)
{
NMConfigData *self;
@@ -242,12 +244,14 @@ nm_config_data_new_keyfile (GKeyFile *keyfile,
else
debug = g_key_file_get_value (keyfile, "main", "debug", NULL);
- log_level = g_strdup (override_log_level);
- if (!log_level)
+ if (nm_config_data_get_log_level (override))
+ log_level = g_strdup (nm_config_data_get_log_level (override));
+ else
log_level = g_key_file_get_value (keyfile, "logging", "level", NULL);
- log_domains = g_strdup (override_log_domains);
- if (!log_domains)
+ if (nm_config_data_get_log_domains (override))
+ log_domains = g_strdup (nm_config_data_get_log_domains (override));
+ else
log_domains = g_key_file_get_value (keyfile, "logging", "domains", NULL);
if (nm_config_data_get_connectivity_uri (override))
@@ -381,11 +385,6 @@ set_property (GObject *object,
}
static void
-dispose (GObject *object)
-{
-}
-
-static void
finalize (GObject *gobject)
{
NMConfigDataPrivate *priv = NM_CONFIG_DATA_GET_PRIVATE (gobject);
@@ -414,7 +413,6 @@ nm_config_data_class_init (NMConfigDataClass *config_class)
g_type_class_add_private (config_class, sizeof (NMConfigDataPrivate));
- object_class->dispose = dispose;
object_class->finalize = finalize;
object_class->get_property = get_property;
object_class->set_property = set_property;
diff --git a/src/nm-config-data.h b/src/nm-config-data.h
index 6d7460681d..31416f0f86 100644
--- a/src/nm-config-data.h
+++ b/src/nm-config-data.h
@@ -69,11 +69,11 @@ const char * nm_config_data_get_connectivity_response (NMConfigData *self);
/* for main.c only */
GOptionEntry *nm_config_data_get_options (void);
-NMConfigData *nm_config_data_new_cli (GError **error);
+NMConfigData *nm_config_data_new_cli (const char *cli_log_level,
+ const char *cli_log_domains,
+ GError **error);
NMConfigData *nm_config_data_new_keyfile (GKeyFile *keyfile,
NMConfigData *override,
- const char *log_level,
- const char *log_domains,
GError **error);
G_END_DECLS
diff --git a/src/nm-config.c b/src/nm-config.c
index 8fc78602bc..bd87a0ce4c 100644
--- a/src/nm-config.c
+++ b/src/nm-config.c
@@ -44,22 +44,14 @@ typedef struct {
char *no_auto_default_file;
GKeyFile *keyfile;
- char **plugins;
- gboolean monitor_connection_files;
- char *dhcp_client;
- char *dns_mode;
-
- char *log_level;
- char *log_domains;
-
- char *debug;
-
- char *connectivity_uri;
- gint connectivity_interval;
- char *connectivity_response;
-
char **no_auto_default;
char **ignore_carrier;
+
+ /* Config from CLI, never changes */
+ NMConfigData *cli_data;
+
+ /* Changes when configuration is reloaded */
+ NMConfigData *config_data;
} NMConfigPrivate;
static NMConfig *singleton = NULL;
@@ -91,7 +83,7 @@ nm_config_get_plugins (NMConfig *config)
{
g_return_val_if_fail (config != NULL, NULL);
- return (const char **) NM_CONFIG_GET_PRIVATE (config)->plugins;
+ return nm_config_data_get_plugins (NM_CONFIG_GET_PRIVATE (config)->config_data);
}
gboolean
@@ -99,7 +91,7 @@ nm_config_get_monitor_connection_files (NMConfig *config)
{
g_return_val_if_fail (config != NULL, FALSE);
- return NM_CONFIG_GET_PRIVATE (config)->monitor_connection_files;
+ return nm_config_data_get_monitor_connection_files (NM_CONFIG_GET_PRIVATE (config)->config_data);
}
const char *
@@ -107,7 +99,7 @@ nm_config_get_dhcp_client (NMConfig *config)
{
g_return_val_if_fail (config != NULL, NULL);
- return NM_CONFIG_GET_PRIVATE (config)->dhcp_client;
+ return nm_config_data_get_dhcp_client (NM_CONFIG_GET_PRIVATE (config)->config_data);
}
const char *
@@ -115,7 +107,7 @@ nm_config_get_dns_mode (NMConfig *config)
{
g_return_val_if_fail (config != NULL, NULL);
- return NM_CONFIG_GET_PRIVATE (config)->dns_mode;
+ return nm_config_data_get_dns_mode (NM_CONFIG_GET_PRIVATE (config)->config_data);
}
const char *
@@ -123,7 +115,7 @@ nm_config_get_log_level (NMConfig *config)
{
g_return_val_if_fail (config != NULL, NULL);
- return NM_CONFIG_GET_PRIVATE (config)->log_level;
+ return nm_config_data_get_log_level (NM_CONFIG_GET_PRIVATE (config)->config_data);
}
const char *
@@ -131,7 +123,7 @@ nm_config_get_log_domains (NMConfig *config)
{
g_return_val_if_fail (config != NULL, NULL);
- return NM_CONFIG_GET_PRIVATE (config)->log_domains;
+ return nm_config_data_get_log_domains (NM_CONFIG_GET_PRIVATE (config)->config_data);
}
const char *
@@ -139,7 +131,7 @@ nm_config_get_debug (NMConfig *config)
{
g_return_val_if_fail (config != NULL, NULL);
- return NM_CONFIG_GET_PRIVATE (config)->debug;
+ return nm_config_data_get_debug (NM_CONFIG_GET_PRIVATE (config)->config_data);
}
const char *
@@ -147,7 +139,7 @@ nm_config_get_connectivity_uri (NMConfig *config)
{
g_return_val_if_fail (config != NULL, NULL);
- return NM_CONFIG_GET_PRIVATE (config)->connectivity_uri;
+ return nm_config_data_get_connectivity_uri (NM_CONFIG_GET_PRIVATE (config)->config_data);
}
guint
@@ -155,10 +147,7 @@ nm_config_get_connectivity_interval (NMConfig *config)
{
g_return_val_if_fail (config != NULL, 0);
- /* We store interval as signed internally to track whether it's
- * set or not, but report as unsigned to callers.
- */
- return MAX (NM_CONFIG_GET_PRIVATE (config)->connectivity_interval, 0);
+ return nm_config_data_get_connectivity_interval (NM_CONFIG_GET_PRIVATE (config)->config_data);
}
const char *
@@ -166,7 +155,7 @@ nm_config_get_connectivity_response (NMConfig *config)
{
g_return_val_if_fail (config != NULL, NULL);
- return NM_CONFIG_GET_PRIVATE (config)->connectivity_response;
+ return nm_config_data_get_connectivity_response (NM_CONFIG_GET_PRIVATE (config)->config_data);
}
char *
@@ -294,23 +283,14 @@ nm_config_set_ethernet_no_auto_default (NMConfig *config, NMDevice *device)
static char *cli_config_path;
static char *cli_config_dir;
static char *cli_no_auto_default_file;
-static char *cli_plugins;
-static char *cli_connectivity_uri;
-static int cli_connectivity_interval = -1;
-static char *cli_connectivity_response;
static GOptionEntry config_options[] = {
{ "config", 0, 0, G_OPTION_ARG_FILENAME, &cli_config_path, N_("Config file location"), N_("/path/to/config.file") },
{ "config-dir", 0, 0, G_OPTION_ARG_FILENAME, &cli_config_dir, N_("Config directory location"), N_("/path/to/config/dir") },
{ "no-auto-default", 0, G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_FILENAME, &cli_no_auto_default_file, "no-auto-default.state location", NULL },
- { "plugins", 0, 0, G_OPTION_ARG_STRING, &cli_plugins, N_("List of plugins separated by ','"), N_("plugin1,plugin2") },
-
- /* These three are hidden for now, and should eventually just go away. */
- { "connectivity-uri", 0, G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_STRING, &cli_connectivity_uri, N_("An http(s) address for checking internet connectivity"), "http://example.com" },
- { "connectivity-interval", 0, G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_INT, &cli_connectivity_interval, N_("The interval between connectivity checks (in seconds)"), "60" },
- { "connectivity-response", 0, G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_STRING, &cli_connectivity_response, N_("The expected start of the response"), N_("Bingo!") },
{NULL}
};
+
GOptionEntry *
nm_config_get_options (void)
{
@@ -456,7 +436,9 @@ sort_asciibetically (gconstpointer a, gconstpointer b)
/* call this function only once! */
NMConfig *
-nm_config_new (GError **error)
+nm_config_new (const char *cli_log_level,
+ const char *cli_log_domains,
+ GError **error)
{
NMConfigPrivate *priv = NULL;
GFile *dir;
@@ -464,7 +446,6 @@ nm_config_new (GError **error)
GFileInfo *info;
GPtrArray *confs;
const char *name;
- char *value;
int i;
GString *config_description;
@@ -473,11 +454,13 @@ nm_config_new (GError **error)
priv = NM_CONFIG_GET_PRIVATE (singleton);
/* First read the base config file */
- if (!find_base_config (singleton, error)) {
- g_object_unref (singleton);
- singleton = NULL;
- return NULL;
- }
+ if (!find_base_config (singleton, error))
+ goto fail;
+
+ /* Read command-line overrides */
+ priv->cli_data = nm_config_data_new_cli (cli_log_level, cli_log_domains, error);
+ if (!priv->cli_data)
+ goto fail;
/* Now read the overrides in the config dir */
if (cli_config_dir)
@@ -517,7 +500,7 @@ nm_config_new (GError **error)
}
g_ptr_array_unref (confs);
if (!singleton)
- return FALSE;
+ return NULL;
/* Handle no-auto-default key and state file */
priv->no_auto_default = g_key_file_get_string_list (priv->keyfile, "main", "no-auto-default", NULL, NULL);
@@ -527,48 +510,20 @@ nm_config_new (GError **error)
priv->no_auto_default_file = g_strdup (NM_NO_AUTO_DEFAULT_STATE_FILE);
merge_no_auto_default_state (singleton);
- /* Now let command-line options override the config files, and fill in priv. */
- if (cli_plugins && cli_plugins[0])
- g_key_file_set_value (priv->keyfile, "main", "plugins", cli_plugins);
- priv->plugins = g_key_file_get_string_list (priv->keyfile, "main", "plugins", NULL, NULL);
-
- value = g_key_file_get_value (priv->keyfile, "main", "monitor-connection-files", NULL);
- if (value) {
- if (!strcmp (value, "true") || !strcmp (value, "yes") || !strcmp (value, "on"))
- priv->monitor_connection_files = TRUE;
- else if (!strcmp (value, "false") || !strcmp (value, "no") || !strcmp (value, "off"))
- priv->monitor_connection_files = FALSE;
- else {
- nm_log_warn (LOGD_CORE, "Unrecognized value for main.monitor-connection-files: %s. Assuming 'false'", value);
- priv->monitor_connection_files = FALSE;
- }
- g_free (value);
- } else
- priv->monitor_connection_files = FALSE;
-
- priv->dhcp_client = g_key_file_get_value (priv->keyfile, "main", "dhcp", NULL);
- priv->dns_mode = g_key_file_get_value (priv->keyfile, "main", "dns", NULL);
-
- priv->log_level = g_key_file_get_value (priv->keyfile, "logging", "level", NULL);
- priv->log_domains = g_key_file_get_value (priv->keyfile, "logging", "domains", NULL);
-
- priv->debug = g_key_file_get_value (priv->keyfile, "main", "debug", NULL);
-
- if (cli_connectivity_uri && cli_connectivity_uri[0])
- g_key_file_set_value (priv->keyfile, "connectivity", "uri", cli_connectivity_uri);
- priv->connectivity_uri = g_key_file_get_value (priv->keyfile, "connectivity", "uri", NULL);
-
- if (cli_connectivity_interval >= 0)
- g_key_file_set_integer (priv->keyfile, "connectivity", "interval", cli_connectivity_interval);
- priv->connectivity_interval = g_key_file_get_integer (priv->keyfile, "connectivity", "interval", NULL);
-
- if (cli_connectivity_response && cli_connectivity_response[0])
- g_key_file_set_value (priv->keyfile, "connectivity", "response", cli_connectivity_response);
- priv->connectivity_response = g_key_file_get_value (priv->keyfile, "connectivity", "response", NULL);
-
priv->ignore_carrier = g_key_file_get_string_list (priv->keyfile, "main", "ignore-carrier", NULL, NULL);
+ priv->config_data = nm_config_data_new_keyfile (priv->keyfile,
+ priv->cli_data,
+ error);
+ if (!priv->config_data)
+ goto fail;
+
return singleton;
+
+fail:
+ g_object_unref (singleton);
+ singleton = NULL;
+ return NULL;
}
static void
@@ -578,8 +533,17 @@ nm_config_init (NMConfig *config)
priv->keyfile = g_key_file_new ();
g_key_file_set_list_separator (priv->keyfile, ',');
+}
+
+static void
+dispose (GObject *gobject)
+{
+ NMConfigPrivate *priv = NM_CONFIG_GET_PRIVATE (gobject);
- priv->connectivity_interval = -1;
+ g_clear_object (&priv->cli_data);
+ g_clear_object (&priv->config_data);
+
+ G_OBJECT_CLASS (nm_config_parent_class)->dispose (gobject);
}
static void
@@ -592,25 +556,13 @@ finalize (GObject *gobject)
g_free (priv->config_description);
g_free (priv->no_auto_default_file);
g_clear_pointer (&priv->keyfile, g_key_file_unref);
- g_strfreev (priv->plugins);
- g_free (priv->dhcp_client);
- g_free (priv->dns_mode);
- g_free (priv->log_level);
- g_free (priv->log_domains);
- g_free (priv->debug);
- g_free (priv->connectivity_uri);
- g_free (priv->connectivity_response);
g_strfreev (priv->no_auto_default);
g_strfreev (priv->ignore_carrier);
-
- singleton = NULL;
-
g_clear_pointer (&cli_config_path, g_free);
g_clear_pointer (&cli_config_dir, g_free);
g_clear_pointer (&cli_no_auto_default_file, g_free);
- g_clear_pointer (&cli_plugins, g_free);
- g_clear_pointer (&cli_connectivity_uri, g_free);
- g_clear_pointer (&cli_connectivity_response, g_free);
+
+ singleton = NULL;
G_OBJECT_CLASS (nm_config_parent_class)->finalize (gobject);
}
@@ -622,6 +574,7 @@ nm_config_class_init (NMConfigClass *config_class)
GObjectClass *object_class = G_OBJECT_CLASS (config_class);
g_type_class_add_private (config_class, sizeof (NMConfigPrivate));
+ object_class->dispose = dispose;
object_class->finalize = finalize;
}
diff --git a/src/nm-config.h b/src/nm-config.h
index 8f4fa1f7af..c1d6aab0ea 100644
--- a/src/nm-config.h
+++ b/src/nm-config.h
@@ -26,6 +26,7 @@
#include <glib-object.h>
#include "nm-types.h"
+#include "nm-config-data.h"
G_BEGIN_DECLS
@@ -70,7 +71,9 @@ char *nm_config_get_value (NMConfig *config, const char *group, const char *key,
/* for main.c only */
GOptionEntry *nm_config_get_options (void);
-NMConfig *nm_config_new (GError **error);
+NMConfig *nm_config_new (const char *cli_log_level,
+ const char *cli_log_domains,
+ GError **error);
G_END_DECLS