diff options
Diffstat (limited to 'src/dns-manager/nm-dns-manager.c')
-rw-r--r-- | src/dns-manager/nm-dns-manager.c | 71 |
1 files changed, 26 insertions, 45 deletions
diff --git a/src/dns-manager/nm-dns-manager.c b/src/dns-manager/nm-dns-manager.c index 45d17deedd..bc2d4c66bb 100644 --- a/src/dns-manager/nm-dns-manager.c +++ b/src/dns-manager/nm-dns-manager.c @@ -67,15 +67,11 @@ G_DEFINE_TYPE (NMDnsManager, nm_dns_manager, G_TYPE_OBJECT) #define HASH_LEN 20 -#ifdef RESOLVCONF_PATH -#define RESOLVCONF_SELECTED -#else +#ifndef RESOLVCONF_PATH #define RESOLVCONF_PATH "/sbin/resolvconf" #endif -#ifdef NETCONFIG_PATH -#define NETCONFIG_SELECTED -#else +#ifndef NETCONFIG_PATH #define NETCONFIG_PATH "/sbin/netconfig" #endif @@ -1482,41 +1478,6 @@ _clear_plugin (NMDnsManager *self) return FALSE; } -static NMDnsManagerResolvConfManager -_get_resolv_conf_manager_default (void) -{ -#if defined(RESOLVCONF_SELECTED) - return NM_DNS_MANAGER_RESOLV_CONF_MAN_RESOLVCONF; -#elif defined(NETCONFIG_SELECTED) - return NM_DNS_MANAGER_RESOLV_CONF_MAN_NETCONFIG; -#else - return NM_DNS_MANAGER_RESOLV_CONF_MAN_SYMLINK; -#endif -} - -static NMDnsManagerResolvConfManager -_get_resolv_conf_manager (NMConfig *config) -{ - const char *man; - - man = nm_config_data_get_rc_manager (nm_config_get_data (config)); - if (!man) - return _get_resolv_conf_manager_default (); - - if (NM_IN_STRSET (man, "symlink", "none")) - return NM_DNS_MANAGER_RESOLV_CONF_MAN_SYMLINK; - if (nm_streq (man, "file")) - return NM_DNS_MANAGER_RESOLV_CONF_MAN_FILE; - if (nm_streq (man, "resolvconf")) - return NM_DNS_MANAGER_RESOLV_CONF_MAN_RESOLVCONF; - if (nm_streq (man, "netconfig")) - return NM_DNS_MANAGER_RESOLV_CONF_MAN_NETCONFIG; - if (nm_streq (man, "unmanaged")) - return NM_DNS_MANAGER_RESOLV_CONF_MAN_UNMANAGED; - - return NM_DNS_MANAGER_RESOLV_CONF_MAN_UNKNOWN; -} - static bool _get_resconf_immutable (void) { @@ -1549,11 +1510,31 @@ init_resolv_conf_mode (NMDnsManager *self) else if (_get_resconf_immutable ()) rc_manager = NM_DNS_MANAGER_RESOLV_CONF_MAN_IMMUTABLE; else { - rc_manager = _get_resolv_conf_manager (priv->config); + const char *man; + + rc_manager = NM_DNS_MANAGER_RESOLV_CONF_MAN_UNKNOWN; + man = nm_config_data_get_rc_manager (nm_config_get_data (priv->config)); + +again: + if (!man) { + /* nop */ + } else if (NM_IN_STRSET (man, "symlink", "none")) + rc_manager = NM_DNS_MANAGER_RESOLV_CONF_MAN_SYMLINK; + else if (nm_streq (man, "file")) + rc_manager = NM_DNS_MANAGER_RESOLV_CONF_MAN_FILE; + else if (nm_streq (man, "resolvconf")) + rc_manager = NM_DNS_MANAGER_RESOLV_CONF_MAN_RESOLVCONF; + else if (nm_streq (man, "netconfig")) + rc_manager = NM_DNS_MANAGER_RESOLV_CONF_MAN_NETCONFIG; + else if (nm_streq (man, "unmanaged")) + rc_manager = NM_DNS_MANAGER_RESOLV_CONF_MAN_UNMANAGED; + if (rc_manager == NM_DNS_MANAGER_RESOLV_CONF_MAN_UNKNOWN) { - _LOGW ("init: unknown resolv.conf manager '%s'", - nm_config_data_get_rc_manager (nm_config_get_data (priv->config))); - rc_manager = _get_resolv_conf_manager_default (); + _LOGW ("init: unknown resolv.conf manager %s%s%s, fallback to \"%s\"", + NM_PRINT_FMT_QUOTE_STRING (man), ""NM_CONFIG_DEFAULT_DNS_RC_MANAGER); + man = ""NM_CONFIG_DEFAULT_DNS_RC_MANAGER; + rc_manager = NM_DNS_MANAGER_RESOLV_CONF_MAN_SYMLINK; + goto again; } } |