diff options
author | Thomas Haller <thaller@redhat.com> | 2016-05-19 16:43:48 +0200 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2016-05-22 11:45:03 +0200 |
commit | ce9929a9a5cbc63b148e171424c0b12e32d08e46 (patch) | |
tree | 54e46d5a66cd56073430845103466b8078a14292 | |
parent | f8cc73150fb2244191f6ba5ca046a3e5d5f03845 (diff) | |
download | NetworkManager-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.ac | 15 | ||||
-rw-r--r-- | man/NetworkManager.conf.xml | 4 | ||||
-rw-r--r-- | man/common.ent.in | 1 | ||||
-rw-r--r-- | src/dns-manager/nm-dns-manager.c | 71 |
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; } } |