dhcpd ignores $CONFIG_FILE in /etc/default/isc-dhcp-server

Bug #1824433 reported by Norman Wilson
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
isc-dhcp (Ubuntu)
New
Undecided
Unassigned

Bug Description

Package isc-dhcp-server 4.3.3 on Ubuntu 16.04 LTS.

On earlier (pre-systemd) systems, one could point dhcpd at a configuration file in any location by setting CONFIG_FILE=/new/path/dhcpd.conf in /etc/default/isc-dhcp-server. In this version such setting is ignored; dhcpd always uses the default /etc/dhcp/dhcpd.conf.

In more formulaeic terms:

Put CONFIG_FILE=/var/dhcpconf/mydhcp.conf in /etc/default/isc-dhcp-server.
I expect that when service isc-dhcp-server is next started, it will use that configuration file.
In fact it still uses /etc/dhcp/dhcpd.conf.

The problem can be worked around by making /etc/dhcp/dhcpd.conf a symlink to the desired config file, but why have /etc/default/isc-dhcp-server at all if it doesn't work?

The offending code is in /lib/systemd/system/isc-dhcp-server.service. Here is a relevant extract:

[Service]
EnvironmentFile=/etc/default/isc-dhcp-server
RuntimeDirectory=dhcp-server
# The leases files need to be root:dhcpd even when dropping privileges
ExecStart=/bin/sh -ec '\
    CONFIG_FILE=/etc/dhcp/dhcpd.conf; \
    if [ -f /etc/ltsp/dhcpd.conf ]; then CONFIG_FILE=/etc/ltsp/dhcpd.conf; fi; \
    [ -e /var/lib/dhcp/dhcpd.leases ] || touch /var/lib/dhcp/dhcpd.leases; \
    chown root:dhcpd /var/lib/dhcp /var/lib/dhcp/dhcpd.leases; \
    chmod 775 /var/lib/dhcp ; chmod 664 /var/lib/dhcp/dhcpd.leases; \
    exec dhcpd -user dhcpd -group dhcpd -f -4 -pf /run/dhcp-server/dhcpd.pid -cf $CONFIG_FILE $INTERFACES'

/etc/default/isc-dhcp-server is correctly read as an EnvironmentFile, but the ExecStart command unconditionally sets CONFIG_FILE, discarding any value from the /etc/default file.

One fix might be to change the first few lines of the ExecStart to check whether $CONFIG_FILE has been set, and perhaps whether it is still the default value:

ExecStart=/bin/sh -ec '\
    case $CONFIG_FILE in \
    ""|/etc/dhcp/dhcpd.conf) \
        CONFIG_FILE=/etc/dhcp/dhcpd.conf; \
        if [ -f /etc/ltsp/dhcpd.conf ]; then CONFIG_FILE=/etc/ltsp/dhcpd.conf; fi; \
        ;; \
    esac

Or it might make more sense to let whatever package is in charge of ltsp configuration append CONFIG_FILE=/etc/ltsp/dhcpd.conf to /etc/defaults/isc-dhcp-server, and replace the lines above with a simple

ExecStart=/bin/sh -ec '\
    CONFIG_FILE=${CONFIG_FILE:-/etc/dhcp/dhcpd.conf}; \

Either way, a fix would be appreciated.

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

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.