diff options
author | Dan Williams <dcbw@redhat.com> | 2014-08-14 15:34:39 -0500 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2014-09-25 10:06:17 +0200 |
commit | 5d82c848a8168bd1e9d5286e5a8f1c8266de3338 (patch) | |
tree | f68848d8a6b540313c9093d4e072c7e01a4b4f8e | |
parent | 26c903fe51d8af3c92bdf57dd193bd7e6b9ff45b (diff) | |
download | NetworkManager-5d82c848a8168bd1e9d5286e5a8f1c8266de3338.tar.gz |
config: back NMConfig with NMConfigData
-rw-r--r-- | src/main.c | 7 | ||||
-rw-r--r-- | src/nm-config-data.c | 24 | ||||
-rw-r--r-- | src/nm-config-data.h | 6 | ||||
-rw-r--r-- | src/nm-config.c | 151 | ||||
-rw-r--r-- | src/nm-config.h | 5 |
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 |