diff options
| author | Michael Biebl <biebl@debian.org> | 2016-08-03 22:59:23 +0200 |
|---|---|---|
| committer | Michael Biebl <biebl@debian.org> | 2016-08-03 22:59:23 +0200 |
| commit | d6201f5d8daada3d64a0a3e0038e14eebec683ce (patch) | |
| tree | 035500728cc23e7ee5368c3fd605270265a077f7 /src/nm-config.c | |
| parent | 73e152af6e3fb4f5848bfb8394484026ff119003 (diff) | |
Imported Upstream version 1.2.4 upstream/1.2.4
Diffstat (limited to 'src/nm-config.c')
| -rw-r--r-- | src/nm-config.c | 81 |
1 files changed, 46 insertions, 35 deletions
diff --git a/src/nm-config.c b/src/nm-config.c index 8bca6870..247b9a89 100644 --- a/src/nm-config.c +++ b/src/nm-config.c @@ -21,10 +21,11 @@ #include "nm-default.h" +#include "nm-config.h" + #include <string.h> #include <stdio.h> -#include "nm-config.h" #include "nm-utils.h" #include "nm-device.h" #include "NetworkManagerUtils.h" @@ -109,7 +110,7 @@ G_DEFINE_TYPE_WITH_CODE (NMConfig, nm_config, G_TYPE_OBJECT, /************************************************************************/ -static void _set_config_data (NMConfig *self, NMConfigData *new_data, int signal); +static void _set_config_data (NMConfig *self, NMConfigData *new_data, NMConfigChangeFlags reload_flags); /************************************************************************/ @@ -393,7 +394,7 @@ nm_config_set_no_auto_default_for_device (NMConfig *self, NMDevice *device) /* unref no_auto_default_set here. Note that _set_config_data() probably invalidates the content of the array. */ g_ptr_array_unref (no_auto_default_new); - _set_config_data (self, new_data, 0); + _set_config_data (self, new_data, NM_CONFIG_CHANGE_CAUSE_NO_AUTO_DEFAULT); } /************************************************************************/ @@ -634,6 +635,7 @@ read_config (GKeyFile *keyfile, gboolean is_base_config, const char *dirname, co kf = nm_config_create_keyfile (); if (!g_key_file_load_from_file (kf, path, G_KEY_FILE_NONE, error)) { + g_prefix_error (error, "%s: ", path); g_key_file_free (kf); return FALSE; } @@ -646,7 +648,7 @@ read_config (GKeyFile *keyfile, gboolean is_base_config, const char *dirname, co /* the config-group is internal to every configuration snippets. It doesn't make sense * to merge the into the global configuration, and it doesn't make sense to preserve the * group beyond this point. */ - g_key_file_remove_group (keyfile, NM_CONFIG_KEYFILE_GROUP_CONFIG, NULL); + g_key_file_remove_group (kf, NM_CONFIG_KEYFILE_GROUP_CONFIG, NULL); /* Override the current settings with the new ones */ groups = g_key_file_get_groups (kf, &ngroups); @@ -815,8 +817,7 @@ read_base_config (GKeyFile *keyfile, } if (!g_error_matches (my_error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_NOT_FOUND)) { - nm_log_warn (LOGD_CORE, "Old default config file %s invalid: %s\n", - DEFAULT_CONFIG_MAIN_FILE_OLD, + nm_log_warn (LOGD_CORE, "Old default config file invalid: %s\n", my_error->message); } g_clear_error (&my_error); @@ -828,8 +829,7 @@ read_base_config (GKeyFile *keyfile, } if (!g_error_matches (my_error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_NOT_FOUND)) { - nm_log_warn (LOGD_CORE, "Default config file %s invalid: %s\n", - DEFAULT_CONFIG_MAIN_FILE, + nm_log_warn (LOGD_CORE, "Default config file invalid: %s\n", my_error->message); g_propagate_error (error, my_error); return FALSE; @@ -1640,7 +1640,7 @@ nm_config_set_values (NMConfig *self, nm_log_dbg (LOGD_CORE, "don't persistate internal configuration (no file set, use --intern-config?)"); } if (new_data) - _set_config_data (self, new_data, 0); + _set_config_data (self, new_data, NM_CONFIG_CHANGE_CAUSE_SET_VALUES); g_key_file_unref (keyfile_new); } @@ -1648,7 +1648,7 @@ nm_config_set_values (NMConfig *self, /************************************************************************/ void -nm_config_reload (NMConfig *self, int signal) +nm_config_reload (NMConfig *self, NMConfigChangeFlags reload_flags) { NMConfigPrivate *priv; GError *error = NULL; @@ -1660,11 +1660,16 @@ nm_config_reload (NMConfig *self, int signal) gboolean intern_config_needs_rewrite; g_return_if_fail (NM_IS_CONFIG (self)); + g_return_if_fail ( reload_flags + && !NM_FLAGS_ANY (reload_flags, ~NM_CONFIG_CHANGE_CAUSES) + && !NM_FLAGS_ANY (reload_flags, NM_CONFIG_CHANGE_CAUSE_NO_AUTO_DEFAULT + | NM_CONFIG_CHANGE_CAUSE_SET_VALUES)); priv = NM_CONFIG_GET_PRIVATE (self); - if (signal != SIGHUP) { - _set_config_data (self, NULL, signal); + if (!NM_FLAGS_ANY (reload_flags, NM_CONFIG_CHANGE_CAUSE_SIGHUP | NM_CONFIG_CHANGE_CAUSE_CONF)) { + /* unless SIGHUP is specified, we don't reload the configuration from disc. */ + _set_config_data (self, NULL, reload_flags); return; } @@ -1681,7 +1686,7 @@ nm_config_reload (NMConfig *self, int signal) if (!keyfile) { nm_log_err (LOGD_CORE, "Failed to reload the configuration: %s", error->message); g_clear_error (&error); - _set_config_data (self, NULL, signal); + _set_config_data (self, NULL, reload_flags); return; } @@ -1703,13 +1708,20 @@ nm_config_reload (NMConfig *self, int signal) if (keyfile_intern) g_key_file_unref (keyfile_intern); - _set_config_data (self, new_data, signal); + _set_config_data (self, new_data, reload_flags); } NM_UTILS_FLAGS2STR_DEFINE (nm_config_change_flags_to_string, NMConfigChangeFlags, - NM_UTILS_FLAGS2STR (NM_CONFIG_CHANGE_SIGHUP, "SIGHUP"), - NM_UTILS_FLAGS2STR (NM_CONFIG_CHANGE_SIGUSR1, "SIGUSR1"), - NM_UTILS_FLAGS2STR (NM_CONFIG_CHANGE_SIGUSR2, "SIGUSR2"), + + NM_UTILS_FLAGS2STR (NM_CONFIG_CHANGE_CAUSE_CONF, "CONF"), + NM_UTILS_FLAGS2STR (NM_CONFIG_CHANGE_CAUSE_DNS_RC, "DNS_RC"), + NM_UTILS_FLAGS2STR (NM_CONFIG_CHANGE_CAUSE_DNS_FULL, "DNS_FULL"), + NM_UTILS_FLAGS2STR (NM_CONFIG_CHANGE_CAUSE_SIGHUP, "SIGHUP"), + NM_UTILS_FLAGS2STR (NM_CONFIG_CHANGE_CAUSE_SIGUSR1, "SIGUSR1"), + NM_UTILS_FLAGS2STR (NM_CONFIG_CHANGE_CAUSE_SIGUSR2, "SIGUSR2"), + NM_UTILS_FLAGS2STR (NM_CONFIG_CHANGE_CAUSE_NO_AUTO_DEFAULT, "NO_AUTO_DEFAULT"), + NM_UTILS_FLAGS2STR (NM_CONFIG_CHANGE_CAUSE_SET_VALUES, "SET_VALUES"), + NM_UTILS_FLAGS2STR (NM_CONFIG_CHANGE_CONFIG_FILES, "config-files"), NM_UTILS_FLAGS2STR (NM_CONFIG_CHANGE_VALUES, "values"), NM_UTILS_FLAGS2STR (NM_CONFIG_CHANGE_VALUES_USER, "values-user"), @@ -1722,27 +1734,19 @@ NM_UTILS_FLAGS2STR_DEFINE (nm_config_change_flags_to_string, NMConfigChangeFlags ); static void -_set_config_data (NMConfig *self, NMConfigData *new_data, int signal) +_set_config_data (NMConfig *self, NMConfigData *new_data, NMConfigChangeFlags reload_flags) { NMConfigPrivate *priv = NM_CONFIG_GET_PRIVATE (self); NMConfigData *old_data = priv->config_data; NMConfigChangeFlags changes, changes_diff; gboolean had_new_data = !!new_data; - switch (signal) { - case SIGHUP: - changes = NM_CONFIG_CHANGE_SIGHUP; - break; - case SIGUSR1: - changes = NM_CONFIG_CHANGE_SIGUSR1; - break; - case SIGUSR2: - changes = NM_CONFIG_CHANGE_SIGUSR2; - break; - default: - changes = NM_CONFIG_CHANGE_NONE; - break; - } + nm_assert (reload_flags); + nm_assert (!NM_FLAGS_ANY (reload_flags, ~NM_CONFIG_CHANGE_CAUSES)); + nm_assert ( NM_IN_SET (reload_flags, NM_CONFIG_CHANGE_CAUSE_NO_AUTO_DEFAULT, NM_CONFIG_CHANGE_CAUSE_SET_VALUES) + || !NM_FLAGS_ANY (reload_flags, NM_CONFIG_CHANGE_CAUSE_NO_AUTO_DEFAULT | NM_CONFIG_CHANGE_CAUSE_SET_VALUES)); + + changes = reload_flags; if (new_data) { changes_diff = nm_config_data_diff (old_data, new_data); @@ -1752,12 +1756,19 @@ _set_config_data (NMConfig *self, NMConfigData *new_data, int signal) changes |= changes_diff; } - if (changes == NM_CONFIG_CHANGE_NONE) + if ( NM_IN_SET (reload_flags, + NM_CONFIG_CHANGE_CAUSE_NO_AUTO_DEFAULT, + NM_CONFIG_CHANGE_CAUSE_SET_VALUES, + NM_CONFIG_CHANGE_CAUSE_CONF) + && !new_data) { + /* no relevant changes that should be propagated. Return silently. */ return; + } if (new_data) { - nm_log_info (LOGD_CORE, "config: update %s (%s)", nm_config_data_get_config_description (new_data), - nm_config_change_flags_to_string (changes, NULL, 0)); + nm_log_info (LOGD_CORE, "config: signal %s (%s)", + nm_config_change_flags_to_string (changes, NULL, 0), + nm_config_data_get_config_description (new_data)); nm_config_data_log (new_data, "CONFIG: ", " ", NULL); priv->config_data = new_data; } else if (had_new_data) |