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_STR_DEFINE_STATIC (_rc_manager_to_string, NMDnsManagerResolvConfManager,
NM_UTILS_LOOKUP_DEFAULT_WARN (NULL), NM_UTILS_LOOKUP_DEFAULT_WARN (NULL),
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_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_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_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_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_INTERNAL_ONLY, "internal-only"),
); );
static void 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 static bool
_get_resconf_immutable (int *immutable_cached) _get_resconf_immutable (int *immutable_cached)
{ {
@@ -1509,29 +1543,19 @@ static void
init_resolv_conf_manager (NMDnsManager *self) init_resolv_conf_manager (NMDnsManager *self)
{ {
NMDnsManagerPrivate *priv = NM_DNS_MANAGER_GET_PRIVATE (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)); rc_manager = _get_resolv_conf_manager (priv->config);
if (NM_IN_STRSET (man, "symlink", "none")) if (rc_manager == NM_DNS_MANAGER_RESOLV_CONF_MAN_UNKNOWN) {
priv->rc_manager = NM_DNS_MANAGER_RESOLV_CONF_MAN_SYMLINK; _LOGW ("unknown resolv.conf manager '%s'",
else if (nm_streq0 (man, "file")) nm_config_data_get_rc_manager (nm_config_get_data (priv->config)));
priv->rc_manager = NM_DNS_MANAGER_RESOLV_CONF_MAN_FILE; rc_manager = _get_resolv_conf_manager_default ();
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);
} }
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)); _LOGI ("using resolv.conf manager '%s'", _rc_manager_to_string (priv->rc_manager));
} }

View File

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