From 9201145d021f5c026907608be3687a4b2065732a Mon Sep 17 00:00:00 2001 From: Hajimu UMEMOTO Date: Fri, 18 Mar 2011 12:23:20 +0000 Subject: [PATCH] Use resolvconf(8) to update /etc/resolv.conf. If you don't want to use resolvconf(8) to update /etc/resolv.conf, you can put resolvconf_enable="NO" into /etc/dhclient-enter-hooks. --- sbin/dhclient/dhclient-script | 67 +++++++++++++++++++++++------------ 1 file changed, 44 insertions(+), 23 deletions(-) diff --git a/sbin/dhclient/dhclient-script b/sbin/dhclient/dhclient-script index c457bf465303..826d83cf3b19 100644 --- a/sbin/dhclient/dhclient-script +++ b/sbin/dhclient/dhclient-script @@ -216,30 +216,41 @@ add_new_resolv_conf() { cat /etc/resolv.conf.tail >>$tmpres fi - # When resolv.conf is not changed actually, we don't - # need to update it. - # If /usr is not mounted yet, we cannot use cmp, then - # the following test fails. In such case, we simply - # ignore an error and do update resolv.conf. - if cmp -s $tmpres /etc/resolv.conf; then - rm -f $tmpres - return 0 - fi 2>/dev/null + case $resolvconf_enable in + # "no", "false", "off", or "0" + [Nn][Oo]|[Ff][Aa][Ll][Ss][Ee]|[Oo][Ff][Ff]|0) + # When resolv.conf is not changed actually, we don't + # need to update it. + # If /usr is not mounted yet, we cannot use cmp, then + # the following test fails. In such case, we simply + # ignore an error and do update resolv.conf. + if cmp -s $tmpres /etc/resolv.conf; then + rm -f $tmpres + return 0 + fi 2>/dev/null - # In case (e.g. during OpenBSD installs) /etc/resolv.conf - # is a symbolic link, take care to preserve the link and write - # the new data in the correct location. + # In case (e.g. during OpenBSD installs) + # /etc/resolv.conf is a symbolic link, take + # care to preserve the link and write the new + # data in the correct location. + + if [ -f /etc/resolv.conf ]; then + cat /etc/resolv.conf > /etc/resolv.conf.save + fi + cat $tmpres > /etc/resolv.conf + + # Try to ensure correct ownership and permissions. + chown -RL root:wheel /etc/resolv.conf + chmod -RL 644 /etc/resolv.conf + ;; + + *) + /sbin/resolvconf -a ${interface} < $tmpres + ;; + esac - if [ -f /etc/resolv.conf ]; then - cat /etc/resolv.conf > /etc/resolv.conf.save - fi - cat $tmpres > /etc/resolv.conf rm -f $tmpres - # Try to ensure correct ownership and permissions. - chown -RL root:wheel /etc/resolv.conf - chmod -RL 644 /etc/resolv.conf - return 0 fi @@ -296,6 +307,8 @@ if [ -f /etc/dhclient-enter-hooks ]; then fi fi +: ${resolvconf_enable="YES"} + case $reason in MEDIUM) eval "$IFCONFIG $interface $medium" @@ -349,9 +362,17 @@ EXPIRE|FAIL) # XXX Why add alias we just deleted above? add_new_alias if is_default_interface; then - if [ -f /etc/resolv.conf.save ]; then - cat /etc/resolv.conf.save > /etc/resolv.conf - fi + case $resolvconf_enable in + # "no", "false", "off", or "0" + [Nn][Oo]|[Ff][Aa][Ll][Ss][Ee]|[Oo][Ff][Ff]|0) + if [ -f /etc/resolv.conf.save ]; then + cat /etc/resolv.conf.save > /etc/resolv.conf + fi + ;; + *) + /sbin/resolvconf -d ${interface} + ;; + esac fi ;;