ISC DHCP 4.2.0a1 is now available

Shawn Routhier sar at
Sat Dec 5 02:11:30 UTC 2009

ISC DHCP 4.2.0a1 is now available for download.

This is the FIRST ALPHA of ISC DHCP 4.2.0.  It contains a number of
fixes and features.  The major feature is changing the dynamic DNS
code to process the transactions in an asynchronous fashion.

A list of the changes in this release has been appended to the end
of this message.  For a complete list of changes from any previous
release, please consult the RELNOTES file within the source
distribution, or on our website:

and click on "read more and download"

This release, and its OpenPGP-signatures are available now from:

ISC's Release Signing Key can be obtained at:

There are two known issues.

1) In our release testing the DHCPD server would sometime use large
amounts of CPU on an OpenSolaris system.  This has not been observed on
other systems.

2) When running as one of a failover pair the DHCPD server on an
OpenSolaris system would occasionally die.  The problem appears to occur
occasionally when a failover pair reconnect after becoming disconnected.

As these were found late in release testing and this is an alpha release
we have decided to continue with the release rather than restart the
release process.

The new DDNS code makes use of several BIND libraries.  The tarball
includes an appropriate version of BIND and the libraries will be
compiled as part of the standard ./configure and make process.  gmake
is required to build the BIND libraries.

                        Changes since 4.1.0 (new features)

- Failover port configuration can now be left to defaults (port 647) as
  described in the -12 revision of the Failover draft (and assigned by
  IANA).  Thanks in part to a patch from David Cantrell at Red Hat.

- If configured, dhclient may now transmit to an anycast MAC address,
  rather than using a broadcast address.  Thanks to a patch from David
  Cantrell at Red Hat.

- Added client support for setting interface MTU and metric, thanks to
  Roy "UberLord" Marples <roy at>.

- Added client -D option to specify DUID type to send.

- A new failover configuration parameter has been introduced for those
  environments where DHCP servers can be reasonably guaranteed to be
  "down" when the failover TCP socket is severed, "auto-partner-down".
  This parameter is not generally safe, and by default is disabled, so
  please carefully review the documentation of this parameter in the
  dhcpd.conf(5) manpage before determining to use it yourself.

- Added a configuration function, 'gethostname()', which calls the
  system function of the same name and presents the results as a data
  expression.  This function can be used to incorporate the system level
  hostname of the system the DHCP software is operating on in responses
  or queries (such as including a failover partner's hostname in a dhcp
  message or binding scope, or having a DHCP client send any system
  hostname in the host-name or FQDN options by default).

- The dhcp-renewal-time and dhcp-rebinding-time options may now be
  configured for DHCPv4 operation and used independently of the
  dhcp-lease-time calculations.  Invalid renew and rebinding times
  (e.g., greater than the determined lease time) are omitted.

- Processing the DHCP to DNS server transactions in an asynchronous
  fashion.  The DHCP server or client can now continue with it's
  processing while awaiting replies from the DNS server.

- The 'hardware [ethernet|etc] ...;' parameter in host records has been
  extended to attempt to match DHCPv6 clients by the last octets of a
  DUID-LL or DUID-LLT provided by the client.

                        Changes since 4.1.0 (bug fixes)

- Remove infinite loop in token_print_indent_concat().

- Validate the argument to the -p option.

- The notorious 'option <unknown> ... larger than buffer' log line,
  which is seen in some malformed DHCP client packets, was modified.
  It now logs the universe name, and does not log the length values
  (which are bogus corruption read from the packet anyway).  It also
  carries a hopefully more useful explanation.

- Suppress spurious warnings from configure about --datarootdir

- A bug was fixed that caused the server not to answer some valid
  Solicit and Request packets, if the dynamic range covering any
  requested addresses had been deleted from configuration.

- Update the code to deal with GCC 4.3.  This included two sets of
  changes.  The first is to the configuration files to include the use
  of AC_USE_SYSTEM_EXTENSIONS.  The second is to deal with return values
  that were being ignored.

- The db-time-format option was documented in manpages.

- Using reserved leases no longer results in 'lease with binding state
  free not on its queue' error messages, thanks to a patch from Frode

- Fix a build error in dhcrelay, using older versions of gcc with
  dhcpv6 disabled.

- Two uninitialized stack structures are now memset to zero, thanks to a
  patch from David Cantrell at Red Hat.

- Fixed a cosmetic bug where pretty-printing valid domain-search options
  would result in an erroneous error log message ('garbage in format

- A bug in DLPI packet transmission (Solaris, HP/UX) that caused the
  server to stop receiving packets is fixed.  The same fix also means
  that the MAC address will no longer appear 'bogus' on DLPI-based

- A bug in select handling was discovered where the results of one
  select() call were discarded, causing the server to process the next
  select() call and use more system calls than required.  This has been
  repaired - the sockets will be handled after the first return from
  select(), resulting in fewer system calls.

- The update-conflict-detection feature would leave an FQDN updated
  without a DHCID (still currently implemented as a TXT RR).  This would
  cause later expiration or release events to fail to remove the domain
  name.  The feature now also inserts the client's up to date DHCID
  record, so records may safely be removed at expiration or release
  time.  Thanks to a patch submitted by Christof Chen.

- Memory leak in the load_balance_mine() function is fixed.  This would
  leak ~20-30 octets per DHCPDISCOVER packet while failover was in use
  and in normal state.

- Various compilation fixes have been included for the memory related
  DEBUG #defines in includes/site.h.

- Fixed Linux client script 'unary operator expected' errors with

- Fixed setting hostname in Linux hosts that require hostname argument
  to be double-quoted.  Also allow server-provided hostname to
  override hostnames 'localhost' and '(none)'.

- Fixed failover reconnection retry code to continue to retry to
  reconnect rather than restarting the listener.

- Compilation on Solaris with USE_SOCKETS defined in includes/site.h has
  been repaired.  Other USE_ overrides should work better.

- A check for the local flavor of IFNAMSIZ had a broken 'else'
  condition, that probably still resulted in the correct behaviour (but
  wouldn't use a larger defined value provided by the host OS).

- Fixed a bug where an OMAPI socket disconnection message would not
  result in scheduling a failover reconnection, if the link had not
  negotiated a failover connect yet (e.g.: connection refused, asynch
  socket connect() timeouts).

- A bug was fixed that caused the 'conflict-done' state to fail to be
  parsed in failover state records.

! A stack overflow vulnerability was fixed in dhclient that could allow
  remote attackers to execute arbitrary commands as root on the system,
  or simply terminate the client, by providing an over-long subnet-mask
  option.  CERT VU#410676 - CVE-2009-0692

- Fixed a bug where relay agent options would never be returned when
  processing a DHCPINFORM.

- Versions 3.0.x syntax with multiple name->code option definitions is
  now supported.  Note that, similarly to 3.0.x, for by-code lookups
  only the last option definition is used.

- Fixed a bug where a time difference of greater than 60 seconds between
  a failover pair could cause the primary to crash on contact with the
  secondary.  Thanks to a patch from Steinar Haug.

- Don't look for IPv6 interfaces on Linux when running in DHCPv4 mode.
  Thanks to patches from Matthew Newton and David Cantrell.

- Secondary servers in a failover pair will now perform ddns removals if
  they had performed ddns updates on a lease that is expiring, or was
  released through the primary.  As part of the same fix, stale binding
  scopes will now be removed if a change in identity of a lease's active
  client is detected, rather than simply if a lease is noticed to have
  expired (which it may have expired without a failover server noticing
  in some situations).

- A patch supplied by David Cantrell at RedHat was applied that detects
  invalid calling parameters given to the ns_name_ntop() function.
  Specifically, it detects if the caller passed a pointer and size pair
  that causes the pointer to integer-wrap past zero.

! Fixed a fenceposting bug when a client had two host records
  configured, one using 'uid' and the other using 'hardware ethernet'.

- Fixed the check in the dhcp_interface_signal_handler routine to verify
  the existence of the linked signal handler before calling it.

- Both host and subnet6 configuration groups are now included whether a
  fixed-address6 (DHCPv6) is in use or not.  Host scoped configuration
  takes precedence.  This fixes two bugs, one where host scoped
  configuration would not be included from a non-fixed-address6 host
  record, and the equal and opposite bug where subnet6 scoped
  configuration would not be used when over-riding values were not
  present in a matching fixed-address6 host configuration.

- ./configure now checks to ensure the intX_t and u_intX_t types are
  defined, correcting a compilation failure when using Sun's compiler.

- Modified the handling of a connection to avoid releasing the omapi io
  object for the connection while it is still in use.  One symptom from
  this error was a segfault when a failover secondary attempted to
  connect to the failover primary if their clocks were not synchronized.

- Clean up to allow compilation with gcc 2.95.4 on FreeBSD.  Remove an
  extra semi-colon from common/dns.c and moved setting a variable to
  NULL in server/dhcpv6.c to allow the compiler to decide that the
  variable was always properly set.

More information about the dhcp-workers mailing list