[Bug 537978] [NEW] Lucid dhclient can't set hostname

Valentijn Sessink valentijn at sessink.nl
Fri Mar 12 10:20:46 GMT 2010


Public bug reported:

Until recently (up to and including Karmic), there was a "set_hostname()" function in /sbin/dhclient-script, that said:
set_hostname() {
    local current_hostname=$(hostname)
    if [ -z "$current_hostname" -o "$current_hostname" = "(none)" ]; then
        hostname "$new_host_name"
    fi
}

Up to 9.04, this would work when there was no /etc/hostname. With 9.10
(Karmic), this changed: a missing /etc/hostname sets the hostname to
"localhost" and the dhclient-script will no longer set the hostname:
this bug is reported as bug #482313 and bug #523188 - see bug #482313
for the fix we have been using for years.

Now with Lucid, the whole thing goes wrong, as the set_hostname() function is missing. There's only:
    BOUND|RENEW|REBIND|REBOOT)
        if [ -n "$old_host_name" -a -n "$host_name" -a \
             "$host_name" != "$old_host_name" ]; then
            hostname "$new_host_name"
        fi

This is plain wrong for two reasons:
1) as far as I can see, the $host_name variable does not exist at all; there's only an "old_host_name" and a "new_host_name", but "host_name" does not exist - which means the test will never be true.
2) if the test would be true at all, it would still only change the hostname if there is a change in the *dhcp-server supplied hostname*, i.e. if the hostname used to be "foo" and suddenly, the dhcp-server sends a hostname "bar", then the hostname will change.

This is also against the dhclient documentation, see "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.

This is no longer true: under Lucid, the hostname will not be set at
all, no matter what you try to do.

** Affects: dhcp3 (Ubuntu)
     Importance: Undecided
         Status: New

** Description changed:

  Until recently (up to and including Karmic), there was a "set_hostname()" function in /sbin/dhclient-script, that said:
  set_hostname() {
-     local current_hostname=$(hostname)
-     if [ -z "$current_hostname" -o "$current_hostname" = "(none)" ]; then
-         hostname "$new_host_name"
-     fi
+     local current_hostname=$(hostname)
+     if [ -z "$current_hostname" -o "$current_hostname" = "(none)" ]; then
+         hostname "$new_host_name"
+     fi
  }
  
  Up to 9.04, this would work when there was no /etc/hostname. With 9.10
  (Karmic), this changed: a missing /etc/hostname sets the hostname to
  "localhost" and the dhclient-script will no longer set the hostname:
- this bug is reported as bug #482313 and #523188 - see #482313 for the
- fix we have been using for years.
+ this bug is reported as bug #482313 and bug #523188 - see bug #482313
+ for the fix we have been using for years.
  
  Now with Lucid, the whole thing goes wrong, as the set_hostname() function is missing. There's only:
-     BOUND|RENEW|REBIND|REBOOT)
-         if [ -n "$old_host_name" -a -n "$host_name" -a \
-              "$host_name" != "$old_host_name" ]; then
-             hostname "$new_host_name"
-         fi
+     BOUND|RENEW|REBIND|REBOOT)
+         if [ -n "$old_host_name" -a -n "$host_name" -a \
+              "$host_name" != "$old_host_name" ]; then
+             hostname "$new_host_name"
+         fi
  
  This is plain wrong for two reasons:
  1) as far as I can see, the $host_name variable does not exist at all; there's only an "old_host_name" and a "new_host_name", but "host_name" does not exist - which means the test will never be true.
  2) if the test would be true at all, it would still only change the hostname if there is a change in the *dhcp-server supplied hostname*, i.e. if the hostname used to be "foo" and suddenly, the dhcp-server sends a hostname "bar", then the hostname will change.
  
  This is also against the dhclient documentation, see "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.
+           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.
  
  This is no longer true: under Lucid, the hostname will not be set at
  all, no matter what you try to do.

-- 
Lucid dhclient can't set hostname
https://bugs.launchpad.net/bugs/537978
You received this bug notification because you are a member of Ubuntu
Server Team, which is subscribed to dhcp3 in ubuntu.



More information about the Ubuntu-server-bugs mailing list