[pkg-dhcp-devel] Bug#667647: isc-dhcp-client: man dhcp-options is wrong about the client behaviour on option host-name

Helmut Grohne helmut at subdivi.de
Thu Apr 5 16:14:10 UTC 2012


Package: isc-dhcp-client
Version: 4.2.2.dfsg.1-4
Severity: normal

The following is a quote from man dhcp-options.

| option host-name string;
|
| This option specifies the name of the client.  The name may or may not
| be qualified with the local domain name (it is preferable to use the
| domain-name option to specify the domain name).  See RFC 1035 for
| character set restrictions.  This option is only honored by
| dhclient-script(8) if the hostname for the client machine is not set.  

Unfortunately the last sentence is subtly wrong. To see why we need to
look at /sbin/dhclient-script.

| set_hostname() {
|     local current_hostname
|
|     if [ -n "$new_host_name" ]; then
|         current_hostname=$(hostname)
| 
|         # current host name is empty, '(none)' or 'localhost' or differs from new one from DHCP
|         if [ -z "$current_hostname" ] ||
|            [ "$current_hostname" = '(none)' ] ||
|            [ "$current_hostname" = 'localhost' ] ||
|            [ "$current_hostname" = "$old_host_name" ]; then
|            if [ "$new_host_name" != "$old_host_name" ]; then
|                hostname "$new_host_name"
|            fi
|         fi
|     fi
| }

So old_host_name and new_host_name are controlled by the atta^Wdhcp
server. To reproduce set up a client machine running isc-dhcp-client
named foo and a server running isc-dhcp-server. The server configuration
should contain the following lines.

| host foo {
| 	hardware ethernet 11:22:33:44:55:66; # replace with foo's mac address
| 	option host-name "foo";
| }

Now machine foo runs dhclient and obtains a lease. It then releases the
lease. Now change the option host-name to "bar". The client machine now
runs dhclient again. In this second run old_host_name matches
current_hostname, so it really updates the system hostname. And this is
where the documentation is wrong.

I suggest extending the last sentence to the following sentence.

| This option is only honored by dhclient-script(8) if the hostname for
| the client machine is not set or the dhcp server has previously sent
| the hostname of the client machine and now sends a different name.

If on the other hand the current behaviour is not desired, I suggest
changing the dhclient-script to remove the || [ "$current_hostname" =
"$old_host_name" ] check to match the description of the documentation.

Thanks

Helmut





More information about the pkg-dhcp-devel mailing list