summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2016-05-19 16:43:48 +0200
committerThomas Haller <thaller@redhat.com>2016-05-22 11:45:03 +0200
commitce9929a9a5cbc63b148e171424c0b12e32d08e46 (patch)
tree54e46d5a66cd56073430845103466b8078a14292
parentf8cc73150fb2244191f6ba5ca046a3e5d5f03845 (diff)
downloadNetworkManager-th/dns-rc-manager-default-rh1337222.tar.gz
dns: add configure option "--with-config-dns-rc-manager-default" for default of main.rc-managerth/dns-rc-manager-default-rh1337222
Downstream might want to choose a different default value for main.rc-manager setting. Make the default configurable at build-time and also embed it into the manual page of "NetworkManager.conf". https://bugzilla.redhat.com/show_bug.cgi?id=1337222
-rw-r--r--configure.ac15
-rw-r--r--man/NetworkManager.conf.xml4
-rw-r--r--man/common.ent.in1
-rw-r--r--src/dns-manager/nm-dns-manager.c71
4 files changed, 45 insertions, 46 deletions
diff --git a/configure.ac b/configure.ac
index 50384f320e..dbcc024572 100644
--- a/configure.ac
+++ b/configure.ac
@@ -779,6 +779,11 @@ fi
# resolvconf and netconfig support
AC_ARG_WITH(resolvconf, AS_HELP_STRING([--with-resolvconf=yes|no|path], [Enable resolvconf support]))
AC_ARG_WITH(netconfig, AS_HELP_STRING([--with-netconfig=yes|no], [Enable SUSE netconfig support]))
+AC_ARG_WITH(config-dns-rc-manager-default, AS_HELP_STRING([--with-config-dns-rc-manager-default=symlink|file|netconfig|resolvconf], [Configure default value for main.rc-manager setting]), [config_dns_rc_manager_default=$withval])
+if test "$config_dns_rc_manager_default" != symlink -a "$config_dns_rc_manager_default" != file -a "$config_dns_rc_manager_default" != netconfig -a "$config_dns_rc_manager_default" != resolvconf; then
+ AC_MSG_WARN([Unknown --with-config-dns-rc-manager-default=$config_dns_rc_manager_default setting.])
+ config_dns_rc_manager_default=
+fi
# Use netconfig by default on SUSE
AS_IF([test -z "$with_netconfig"], AC_CHECK_FILE(/etc/SuSE-release, with_netconfig=yes))
# Otherwise default to "no"
@@ -788,9 +793,16 @@ AS_IF([test -z "$with_netconfig"], with_netconfig=no)
if test "$with_resolvconf" = "yes"; then
AC_PATH_PROGS(with_resolvconf, resolvconf, no, /sbin:/usr/sbin:/usr/local/sbin)
fi
+if test "$with_resolvconf" != "no"; then
+ AS_IF([test -z "$config_dns_rc_manager_default"], config_dns_rc_manager_default=resolvconf)
+fi
if test "$with_netconfig" = "yes"; then
AC_PATH_PROGS(with_netconfig, netconfig, no, /sbin:/usr/sbin:/usr/local/sbin)
fi
+if test "$with_netconfig" != "no"; then
+ AS_IF([test -z "$config_dns_rc_manager_default"], config_dns_rc_manager_default=netconfig)
+fi
+AS_IF([test -z "$config_dns_rc_manager_default"], config_dns_rc_manager_default=symlink)
# Define resolvconf and netconfig paths
if test "$with_resolvconf" != "no"; then
AC_DEFINE_UNQUOTED(RESOLVCONF_PATH, "$with_resolvconf", [Path to resolvconf])
@@ -798,6 +810,8 @@ fi
if test "$with_netconfig" != "no"; then
AC_DEFINE_UNQUOTED(NETCONFIG_PATH, "$with_netconfig", [Path to netconfig])
fi
+AC_DEFINE_UNQUOTED(NM_CONFIG_DEFAULT_DNS_RC_MANAGER, "$config_dns_rc_manager_default", [Default value for main.rc-manager setting (--with-config-dns-rc-manager-default)])
+AC_SUBST(NM_CONFIG_DEFAULT_DNS_RC_MANAGER, $config_dns_rc_manager_default)
# iptables path
AC_ARG_WITH(iptables, AS_HELP_STRING([--with-iptables=/path/to/iptables], [path to iptables]))
@@ -1190,6 +1204,7 @@ echo
echo "Handlers for /etc/resolv.conf:"
echo " resolvconf: ${with_resolvconf}"
echo " netconfig: ${with_netconfig}"
+echo " config-dns-rc-manager-default: ${config_dns_rc_manager_default}"
echo
echo "DHCP clients:"
diff --git a/man/NetworkManager.conf.xml b/man/NetworkManager.conf.xml
index 56d5e259bc..3035d6054a 100644
--- a/man/NetworkManager.conf.xml
+++ b/man/NetworkManager.conf.xml
@@ -312,7 +312,9 @@ no-auto-default=*
<term><varname>rc-manager</varname></term>
<listitem><para>Set the <filename>resolv.conf</filename>
management mode. The default value depends on how NetworkManager
- was built. Regardless of this setting, NetworkManager will
+ was built, whereas this version of NetworkManager was build with
+ a default of "<literal>&NM_CONFIG_DEFAULT_DNS_RC_MANAGER;</literal>".
+ Regardless of this setting, NetworkManager will
always write resolv.conf to its runtime state directory.</para>
<para><literal>symlink</literal>: NetworkManager will symlink
<filename>/etc/resolv.conf</filename> to its private
diff --git a/man/common.ent.in b/man/common.ent.in
index ae8897eb8a..ec91e8a6a2 100644
--- a/man/common.ent.in
+++ b/man/common.ent.in
@@ -4,3 +4,4 @@
<!ENTITY NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT "@NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@">
<!ENTITY NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT "@NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@">
<!ENTITY NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT "@NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@">
+<!ENTITY NM_CONFIG_DEFAULT_DNS_RC_MANAGER "@NM_CONFIG_DEFAULT_DNS_RC_MANAGER@">
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;
}
}