dns: split parsing of rc-manager out of init_resolv_conf_manager()

Makes more sense in the next commit, when init_resolv_conf_manager()
gets merged with init_resolv_conf_mode(). Bear with me.
This commit is contained in:
Thomas Haller
2016-04-21 17:04:13 +02:00
parent cd6a469668
commit aea2d98e2d
2 changed files with 51 additions and 25 deletions

View File

@@ -164,11 +164,12 @@ typedef struct {
NM_UTILS_LOOKUP_STR_DEFINE_STATIC (_rc_manager_to_string, NMDnsManagerResolvConfManager,
NM_UTILS_LOOKUP_DEFAULT_WARN (NULL),
NM_UTILS_LOOKUP_STR_ITEM (NM_DNS_MANAGER_RESOLV_CONF_MAN_SYMLINK, "symlink"),
NM_UTILS_LOOKUP_STR_ITEM (NM_DNS_MANAGER_RESOLV_CONF_MAN_FILE, "file"),
NM_UTILS_LOOKUP_STR_ITEM (NM_DNS_MANAGER_RESOLV_CONF_MAN_RESOLVCONF, "resolvconf"),
NM_UTILS_LOOKUP_STR_ITEM (NM_DNS_MANAGER_RESOLV_CONF_MAN_NETCONFIG, "netconfig"),
NM_UTILS_LOOKUP_ITEM_IGNORE (_NM_DNS_MANAGER_RESOLV_CONF_MAN_INTERNAL_ONLY),
NM_UTILS_LOOKUP_STR_ITEM (NM_DNS_MANAGER_RESOLV_CONF_MAN_UNKNOWN, "unknown"),
NM_UTILS_LOOKUP_STR_ITEM (NM_DNS_MANAGER_RESOLV_CONF_MAN_SYMLINK, "symlink"),
NM_UTILS_LOOKUP_STR_ITEM (NM_DNS_MANAGER_RESOLV_CONF_MAN_FILE, "file"),
NM_UTILS_LOOKUP_STR_ITEM (NM_DNS_MANAGER_RESOLV_CONF_MAN_RESOLVCONF, "resolvconf"),
NM_UTILS_LOOKUP_STR_ITEM (NM_DNS_MANAGER_RESOLV_CONF_MAN_NETCONFIG, "netconfig"),
NM_UTILS_LOOKUP_STR_ITEM (_NM_DNS_MANAGER_RESOLV_CONF_MAN_INTERNAL_ONLY, "internal-only"),
);
static void
@@ -1417,6 +1418,39 @@ nm_dns_manager_end_updates (NMDnsManager *self, const char *func)
/******************************************************************/
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;
return NM_DNS_MANAGER_RESOLV_CONF_MAN_UNKNOWN;
}
static bool
_get_resconf_immutable (int *immutable_cached)
{
@@ -1509,29 +1543,19 @@ static void
init_resolv_conf_manager (NMDnsManager *self)
{
NMDnsManagerPrivate *priv = NM_DNS_MANAGER_GET_PRIVATE (self);
const char *man;
NMDnsManagerResolvConfManager rc_manager;
man = nm_config_data_get_rc_manager (nm_config_get_data (priv->config));
if (NM_IN_STRSET (man, "symlink", "none"))
priv->rc_manager = NM_DNS_MANAGER_RESOLV_CONF_MAN_SYMLINK;
else if (nm_streq0 (man, "file"))
priv->rc_manager = NM_DNS_MANAGER_RESOLV_CONF_MAN_FILE;
else if (!g_strcmp0 (man, "resolvconf"))
priv->rc_manager = NM_DNS_MANAGER_RESOLV_CONF_MAN_RESOLVCONF;
else if (!g_strcmp0 (man, "netconfig"))
priv->rc_manager = NM_DNS_MANAGER_RESOLV_CONF_MAN_NETCONFIG;
else {
#if defined(RESOLVCONF_SELECTED)
priv->rc_manager = NM_DNS_MANAGER_RESOLV_CONF_MAN_RESOLVCONF;
#elif defined(NETCONFIG_SELECTED)
priv->rc_manager = NM_DNS_MANAGER_RESOLV_CONF_MAN_NETCONFIG;
#else
priv->rc_manager = NM_DNS_MANAGER_RESOLV_CONF_MAN_SYMLINK;
#endif
if (man)
_LOGW ("unknown resolv.conf manager '%s'", man);
rc_manager = _get_resolv_conf_manager (priv->config);
if (rc_manager == NM_DNS_MANAGER_RESOLV_CONF_MAN_UNKNOWN) {
_LOGW ("unknown resolv.conf manager '%s'",
nm_config_data_get_rc_manager (nm_config_get_data (priv->config)));
rc_manager = _get_resolv_conf_manager_default ();
}
if (rc_manager == priv->rc_manager)
return;
priv->rc_manager = rc_manager;
_LOGI ("using resolv.conf manager '%s'", _rc_manager_to_string (priv->rc_manager));
}

View File

@@ -107,6 +107,7 @@ typedef enum {
/**
* NMDnsManagerResolvConfManager
* @NM_DNS_MANAGER_RESOLV_CONF_MAN_UNKNOWN: unspecified rc-manager.
* @_NM_DNS_MANAGER_RESOLV_CONF_MAN_INTERNAL_ONLY: dummy-manager
* to not write resolv.conf at all, only the internal file in
* NM's run state directory.
@@ -122,6 +123,7 @@ typedef enum {
* NMDnsManager's management of resolv.conf
*/
typedef enum {
NM_DNS_MANAGER_RESOLV_CONF_MAN_UNKNOWN,
_NM_DNS_MANAGER_RESOLV_CONF_MAN_INTERNAL_ONLY,
NM_DNS_MANAGER_RESOLV_CONF_MAN_SYMLINK,
NM_DNS_MANAGER_RESOLV_CONF_MAN_FILE,