Unexpected behavior: make_resolv_conf is not undefined if /etc/resolv.conf is not a symlink

Bug #1385010 reported by Alan on 2014-10-24
18
This bug affects 3 people
Affects Status Importance Assigned to Milestone
resolvconf (Ubuntu)
Undecided
Unassigned

Bug Description

The resolvconf package comes with /etc/dhcp/dhclient-enter-hooks.d/resolvconf which, if /sbin/resolvconf is present, redefines the make_resolv_conf function (previously defined by dhclient-script) to send nameserver information to resolvconf instead of writing it directly to /etc/resolv.conf.

However, the hook also checks if /etc/resolv.conf is a symlink. This is problematic because if /etc/resolv.conf is not a symlink then the script does not redefine make_resolv_conf() and so dhclient will overwrite /etc/resolv.conf when it configures an interface, even though the resolvconf package is installed.

The behavior I would expect would be /etc/resolv.conf never changing if resolvconf is installed and /etc/resolv.conf is not a symlink.

Debian implements the behavior I would expect.

At the very least, I think that the different behavior in Ubuntu should be documented in the man pages for resolvconf.

As far as I can tell, there's no reason to check for /etc/resolv.conf being a symlink when resolvconf itself already does that.

The patch was introduced by: http://bazaar.launchpad.net/~ubuntu-branches/ubuntu/trusty/resolvconf/trusty/revision/32/etc/dhcp/dhclient-enter-hooks.d/resolvconf

Related branches

Thomas Hood (jdthood) on 2014-10-27
description: updated
Thomas Hood (jdthood) wrote :

You are right. In the Debian version, the script is activated by "test -x /sbin/resolvconf" where the presence of /sbin/resolvconf indicates that the resolvconf package is installed. The convention in Debian is: "If the resolvconf package is installed then disable your default resolv.conf-updating behaviors and instead send the information to /sbin/resolvconf". In Debian the convention is furthermore that other packages should NOT check whether or not /etc/resolv.conf is a symlink and do things to /etc/resolv.conf if it isn't a symlink. In Debian, installing resolvconf and deleting the symlink at /etc/resolv.conf is a way of configuring the system such that the file is not updated by anything.

Unlike Debian, Ubuntu includes resolvconf in the base install. Furthermore Ubuntu has been afflicted by mysterious bug #1000244 which is the problem that in rare cases /etc/resolv.conf fails to be a symlink after resolvconf is installed. So perhaps there was a pragmatic reason for Ubuntu to make a change whose effect is to restore dhclient's default behavior when /etc/resolv.conf is not a symlink.

Nevertheless, as the Debian maintainer of resolvconf, I agree with you. :)

summary: - unexpected behavior: make_resolv_conf not undefined
+ Unexpected behavior: make_resolv_conf is not undefined if
+ /etc/resolv.conf is not a symlink
Thomas Hood (jdthood) on 2014-10-27
description: updated
Alan (asbraithwaite+launchpad) wrote :

Thanks @jdthood !

I figured there could be some arcane reason why the symlink check would be there on Ubuntu but not Debian, but I couldn't fathom why after reading through the entire hook.

Also, thanks for cleaning up the report! :D

Launchpad Janitor (janitor) wrote :

Status changed to 'Confirmed' because the bug affects multiple users.

Changed in resolvconf (Ubuntu):
status: New → Confirmed
Launchpad Janitor (janitor) wrote :

This bug was fixed in the package resolvconf - 1.77ubuntu1

---------------
resolvconf (1.77ubuntu1) wily; urgency=medium

  * Merge with Debian unstable. Remaining Ubuntu changes:
    - debian/postinst: Make /etc/resolv.conf a relative symlink so that it
      works when setting up chroots.
    - Eliminate all references to /etc/resolvconf/run. This should all be done
      directly in /run, there is no reason to support making any of this
      configurable with a symlink since we already have a versioned dependency
      on the version of initscripts that introduces the /run transition.
  * Clean up some merge delta, thanks to Thomas Hood for reviewing!
    - Put back debian/triggers (should have been re-added as part of fixing
      LP #1453185)
    - Drop symlink check in dhclient-enter-hooks.d/resolvconf, to avoid
      dhclient overwriting /etc/resolv.conf when resolvconf is installed.
      (LP: #1385010)
    - resolvconf/link-tail-to-original debconf question again defaults to
      false; it's rather irrelevant as we install resolvconf by default.

resolvconf (1.77) unstable; urgency=low

  * [0781847] interface-order: match br ifaces at the same
    priority as eth ifaces (see LP#1446681)
  * Remove obsolete upgrade code
  * [00ad4bf] Override immutability attrib on /etc/resolv.conf
    if dnssec-trigger is installed. See #776778 for background.

 -- Martin Pitt <email address hidden> Mon, 01 Jun 2015 08:42:43 +0200

Changed in resolvconf (Ubuntu):
status: Confirmed → Fix Released
Thomas Hood (jdthood) wrote :

Yay.

We may now get a complaint from someone who has deleted the symlink at /etc/resolv.conf but still has resolvconf installed and relies upon dhclient updating /etc/resolv.conf dynamically. Their problem: /etc/resolv.conf is no longer updated after resolvconf is upgraded to 1.77ubuntu1. Solution for this person: they should remove the (unused) resolvconf package. Or change dhclient-enter-hooks.d/resolvconf to look as it did before; or make some other custom change to their already customized system.

To post a comment you must log in.
This report contains Public information  Edit
Everyone can see this information.

Duplicates of this bug

Other bug subscribers