ISC Dynamic Host Configuration Protocol
(DHCP)
DHCP Distribution: Version 4.0.0
Released:
December 19, 2007
Version 4.0.0 of the ISC DHCP Distribution is a
feature release.
This release is located at
http://ftp.isc.org/isc/dhcp/dhcp-4.0.0.tar.gz. .
The release is PGP signed, you can get
the signature here.
The DHCP server in version 4.0.x of the ISC DHCP Distribution supports
DHCPv6 in addition to DHCP for IPv4.
Several new options have been added to the dhcpd and dhclient executables,
and to the dhcpd.conf and dhclient.conf configuration files, which are
documented in their respective man pages.
There are a number of DHCPv6 limitiations and features missing in this
release, which will be addressed shortly:
- Only Linux, FreeBSD, NetBSD, OpenBSD, and Solaris are supported.
Solaris is limited to operating as a DHCPv6 server, not client; the
others can do both.
- There is no DHCPv6 Relay support.
- Only a single fixed address is supported per IA.
- IA_TA addresses are not supported.
- IA_PD prefixes are not supported.
- DHCPv6 includes human-readable text in status code messages. These
should be configurable, and probably localized via gettext() or the
like.
- The "host-identifier" option is limited to a simple token.
- Dynamically allocated leases do not respond to Confirm messages.
- The client and server can only operate DHCPv4 or DHCPv6 at any
one time, not both. To use both protocols simultaneously, two instances
of the daemons are required, one with the "-6" command line option.
For information on how to install, configure and run this software,
as well as how to find documentation and report bugs, please consult
the README file.
ISC DHCP now uses standard GNU configure for installation. Please
review the output of "./configure --help" to see what options are
available.
The system has only been tested on Linux, FreeBSD, and Solaris, and
may not work on other platforms. Please report any problems and
suggested fixes to dhcp-bugs@isc.org.
Changes since 4.0.0rc1
Changes since 4.0.0b3
- The reverse DNS name for PTR updates on IPv6 addresses has been fixed to
use ip6.arpa. rather than default to in-addr.arpa and require user
configuration.
- dhc6_lease_destroy() and dhc6_ia_destroy() now set lease and IA pointers
to NULL after freeing, to prevent subsequent accesses to freed memory.
- The DHCPv6 server would not send the preference option unless the
client requested it, via the ORO. This has been fixed, so the DHCPv6
server will always send the preference value if it is configured.
- When addresses were passed as hints to the server in an IA, they were
incorrectly handled, sometimes being treated as an error. Now the
server will treat these as hints and ignore them if it cannot supply
a requested address.
- If the client had multiple addresses, and one expired (was not renewed
by the server), the client would continue to attempt to renew the same
old address over and over. Now, the client will omit any expired
addresses from future Confirm, Renew, or Rebind messages.
- dhclient -6 will now select renew/rebind timers based upon the longest
address expiration time rather than the shortest expiration time, in
order to avoid cascading renewals in the event a server elects not to
extend one of multiple IAADDR leases.
- The server now limits clients that request multiple addresses to one
address per IA by default, which can be adjusted through the
"limit-addrs-per-ia" configuration option.
- The DHCPv6 client now issues fresh transaction IDs on Renew and Rebind
message exchanges, rather than using the most recent ID.
- The DHCPv6 server now replies to Information-Request messages.
- A bug was fixed in the dhclient-script for BSDs to correctly carry error
codes through some conditions.
- The parsing of some options in the dhclient lease file, in particular
the success DHCPv6 status-code, was fixed.
- A bug was fixed that caused the DHCPv6 ORO option to be corrupted with
seemingly random values.
- A reference overleak in DHCPv6 shared network processing was repaired.
- ./configure now autodetects local database locations rather than trying
to put dhcpd.leases and dhclient.leases in /usr/local/var/db, which no
one ever has.
- Regression fix for bug where server advertised a IPv6 address in
response to a SOLICIT but would not return the address in response
to a REQUEST.
- A bug was fixed where the DHCPv6 server puts the NoAddrsAvail status
code in the IA_NA was fixed. The status code now appears in the root
level.
Changes since 4.0.0b2
- Clarified error message when lease limit exceeded
- Relative time may now be used as a qualifier for 'allow' and 'deny' access
control lists. These directives may be used to assist in re-addressing
address pools without having to constantly reconfigure the server. Please
see 'man dhcpd.conf' for more information on allow/deny 'after time' syntax.
Thanks to a patch from Christof Chen.
- The server will now include multiple IA_NA's and multiple IAADDRs within
them, if advertised by the client. It still only seeks to allocate one
new address.
Changes since 4.0.0b1
- A number of bugs with the internal handling of lease state on the
server have been fixed. Some of these could cause server crashes.
- The peer_wants_leases() changes pulled up from 3.1.0 were corrected,
'never used' leases will no longer consistently shift between servers
on every pool rebalance run.
- sendmsg()/recvmsg() control buffers are now declared in such a way to
ensure they are correctly aligned on all (esp. 64-bit) architectures.
- The client leasing subsystem was streamlined and corrected to account
more closely for changes in client link attachment selection.
Changes since 4.0.0a3
- The DHCP server no longer requires a "ddns-update-style" statement,
and now defaults to "none", which means DNS updates are disabled.
- Log messages when failover peer names mismatch have been improved to
point out the problem.
- Bug where server advertised a IPv6 address in response to a SOLICIT
but would not return the address in response to a REQUEST. Thanks to
Dennis Kou for finding the bug.
- Fixed an error causing the server to lock up on lease expiration,
reported independently by Jothilingam Vasu and Dennis Kou.
- Fixed a ./configure bug where compile tests were failing due to
"-Werror" (unused variable) rather than the actual test failure. Lead
to inconsistent and unworkable auto-configurations.
- Compilation with DLPI and -Werror has been repaired.
- Error in decoding IA_NA option if multiple interfaces are present
fixed by Marcus Goller.
- DHCPv6 server Confirm message processing has been enhanced - it no
longer replies only to clients with host {} records, it now replies
as directed in RFC3315 section 18.2.2 - that is, to all clients
regardless of the existence of bindings.
- A core dump during expired lease cleanup has been repaired.
- DDNS updates state information are now stored in 'binding scopes' that
follow the leases through their lifecycles. This enables DDNS teardowns
on leases that are assigned and expired inbetween a server restart (the
state is recovered from dhcpd.leases). Arbitrary user-specified binding
scopes ('set var = "value";') are not yet supported.
- Additional compilation problems on HP/UX have been repaired.
Changes since 4.0.0a2
- Fix for startup where there are no IPv4 addresses on an interface.
Thanks to Marcus Goller for reporting the bug.
- Fixed file descriptor leak on listen failure. Thanks to Tom Clark.
- Bug in server configuration parser caused server to get stuck on
startup for certain bad pool declarations. Thanks to Guillaume
Knispel for the bug report and fix.
- Code cleaned to remove warnings reported by "gcc -Wall".
- DHCPv6 is now the default. You can disable DHCPv6 support using the
"--disable-dhcpv6" flag when you run the configure script.
- An internal database inconsistency bug was repaired where the server
would segfault if a client attempted to renew a lease that had been
loaded from persistent storage.
- 'request' and 'also request' syntaxes have been added to accomodate
the DHCPv6 client configuration. 'send dhcp6.oro' is no longer
necessary.
- Bug fixed where configuration file parsing did not work with
zero-length options; this made it impossible to set the
rapid-commit option.
- Bogus messages about host records with IPv4 fixed-addresses being of
non-128-bits in length were removed.
Changes since 4.0.0a1
- Bug in octal parsing fixed. Thanks to Bernd Fuhrmann for the report
and fix.
- Autoconf now supplies proper flags for Solaris DHCPv6 builds.
- Fix for parsing error on some IPv6 addresses.
- Invalid CIDR representation for IPv6 subnets or ranges now checked
for when loading configuration.
- Compilation on HP/UX has been repaired. The changes should generally
apply to any architecture that supplies SIOCGLIFCONF but does not
use 'struct lifconf' structures to pass values.
- Two new operators, ~= and ~~, have been integrated to implement
boolean matches by regular expression (such as may be used in
class matching statements). Thanks to a patch by Alexandr S.
Agranovsky, which underwent slight modification.
- Fix for icmp packets on 64-bit systems (bug introduced in 4.0).
- A bug was fixed in interface discovery wherein an error identifying
a server-configured interface with no IPv4 addresses would SEGV.
- Fixed a bug in which write_lease() might report a failure incorrectly
- Added support for DHCPv6 Release messages
- Added -x option to dhclient, which triggers dhclient processes
to exit gracefully without releasing leases first
- All binaries (client, server, relay) now change directories
to / before going into daemon mode, so as not to hold $CWD open
- Fixed a bug parsing DHCPv6 client-id's in host-identifier statements
- Fixed a bug with the 'ddns-updates' boolean server configuration
parameter, which caused the server to fail.
Changes since 4.0.0-20070413
- Old (expired) leases are now cleaned.
- IPv6 subnets now have support for arbitrary allocation ranges via
a new 'range6' configuration directive.
- An obviated option code hash lookup to find D6O_CLIENTID was removed.
- Corrected some situations where variables might be used without being
initialized.
- Silenced several other compiler warnings.
- Include the more standard sys/uio.h rather than rely upon other
header files to include it (fixes a BSD 4.2 compile failure).
- Duplicate dhclient-script updates for DHCPv6 to all provided scripts.
- DHCPv4 I/O methods that failed to sense hardware address were corrected.
- DHCPv4 is now the default (as documented) rather than DHCPv6. The default
was set to DHCPv6 to facilitate ease early development, and forgotten.
- Corrected a segmentation violation in DHCPv4 socket processing.
- dhclient will now fork() into the background once it binds to an
IPv6 address, or immediately if the -n flag is supplised.
- -q is now the default behaviour on dhclient, with -d or -v enabling
non-quiet (stderr logging) mode.
- Fix documentation of the domain-search atom (quoted, with commas).
- Document DHCPv6 options presently in the default table.
- Replaced ./configure shellscripting with GNU Autoconf.
Changes since 3.1.0 (NEW FEATURES)
- DHCPv6 Client and Server protocol support. Use '-6' to run the daemons
as v6-only. Use '-4' to run the daemons as v4-only (default. There is
no support currently for both.
- Server support for multiple IA_NA options, containing at most one
IAADDR option.
- Client support for one IA_NA option, containing any number of IAADDR
options.
- Server support for the DHCPv6 Information-request message.
- Inappropriate unicast DHCPv6 messages sent to the server are now
discarded, and this has rearchitected the IO system slightly.
- The DHCPv6 server DUID defaults to type 1, is persistently stored in
the leases database, and can be over-ridden (either completely, or by
specifying type 1 or type 2).
- The server only uses Rapid-Commit if it has been configured with the
Rapid-Commit option and the client requests it.
- DDNS support. We now update AAAA records in the same place we would
update A records, if we have an IPv6 address. We also generate IP6.ARPA
style names for PTR records if we're dealing with an IPv6 address. Both
A and AAAA updates are done using the same 'fqdn.' virtual option space
(although the DHCPv4 FQDN and DHCPv6 FQDN options are formatted
differently, they both use the same code here).
- The Linux dhclient-script attempts to set and remove assigned addresses,
and to configure /etc/resolv.conf from nameserver and domain name
configurations. It can be extended to configure other parameters.
- Initial DHCPv6 lease support.
- The IO system now tracks all local IP addresses, so that the DHCP
applications (particularly the dhcrelay) can discern between what frames
were transmitted to it, and what frames are being carried through it which
it should not intercept.
Changes since 3.1.0 (Maintenance)
- A bug was repaired where MAC Address Affinity for virgin leases always
mapped to the primary. Virgin leases now have an interleaved preference
between primary and secondary.
- A bug was repaired where MAC Address Affinity for clients with no client
identifier was sometimes mishashed to the peer. Load balancing during
runtime and pool rebalancing were opposing.
- An assertion in lease counting relating to reserved leases was repaired.
- The subnet-mask option inclusion now conforms with RFC2132 section 3.3;
it will only appear prior to the routers option if it is present on the
Parameter-Request-List. The subnet-mask option will also only be
included by default (if it is not on the PRL) in response to DISCOVER
or REQUEST messages.
- The FQDN option is only supplied if the client supplied an FQDN option or
if the FQDN option was explicitly requested on the PRL.
- Dynamic BOOTP leases are now load balanced in failover.
Changes since 3.1.0b1
- Fixed a bug that caused OMAPI clients to freeze when opening lease
objects.
- A new server config option "fqdn-reply" specifies whether the server
should send out option 81 (FQDN). Defaults to "on". If set to "off",
the FQDN option is not sent, even if the client requested it. This is
needed because some clients misbehave otherwise. Thanks to Christof Chen
at Allianz.
- Allow trace output files (-tf option) to be overwritten, rather than
crashing dhcpd if the file already exists
- A bug was fixed that caused dhcpd to segfault if a pool was declared
outside the scope of a subnet in dhcpd.conf.
- Some uninitialized values were repaired in dhcpleasequery.c that
caused the server to abort.
- A new server config option, 'do-reverse-updates', has been added
which causes the server to abstain from performing updates on PTR
records. Thanks to a patch from Christof Chen at Allianz.
- A bug was repaired in subencapsulation support, where spaces separated
by empty spaces would not get included.
Changes since 3.1.0a3
Changes since 3.1.0a2
- A bug was fixed where attempting to permit leasequeries results in a
fatal internal error, "Unable to find server option 49".
- A bug was fixed in dhclient rendering the textual output form of the
domain-search option syntax.
Changes since 3.1.0a1
- A bug in the FQDN universe that added FQDN codes to the NWIP universe's
hash table was repaired.
- The servers now try harder to transmit pending binding updates when
entering normal state.
- UPDREQ/UPDREQALL handling was optimized - it no longer dequeues and
requeues all pending updates. This should reduce the number of spurious
'xid mismatch' log messages.
- An option definition referencing leak was fixed, which resulted in early
termination of dhclient upon the renewal event.
- Some default hash table sizes were tweaked, some upwards, some downwards.
3.1.0a1's tables resulted in a reduction in default server memory use.
The new selected values provide more of a zero sum (increasing the size
of tables likely to be populated, decreasing the size of tables unlikely).
- Lease structures appear in three spearate hashes: by IP address, by UID,
and by hardware address. One type of table was used for all three, and
improvements to IP address hashing were applied to all three (so UID and
hardware addresses were treated like 4-byte integers). There are now two
types of tables, and the uid/hw hashes use functions more appropriate
to their needs.
- The max-lease-misbalance percentage no longer causes scheduled rebalance
runs to be skipped: it still governs the schedule, but every scheduled
run will attempt balance.
- A segfault bug in recursive encapsulation support has been corrected.
Changes since 3.0 (New Features)
- A workaround for certain STSN servers that send a mangled domain-name
option was introduced for dhclient. The client will now accept corrupted
server responses, if they contain a valid DHCP_MESSAGE_TYPE (OFFER, ACK,
or NAK). The server will continue to not accept corrupt client packets.
- Support for 'reserved' (psuedo-static) and BOOTP leases via failover
was introduced.
- Support for adding, removing, and managing class and subclass statements
via OMAPI.
- The failover implementation was updated to comply with revision 12 of
the protocol draft.
- 'make install' now creates the initial zero-length dhcpd.leases file if
one does not already exist on the system.
- RFC3942 compliance, site-local option spaces start at 224 now, not 128.
- The Load Balance Algorithm was misimplemented. The current implementation
matches RFC 3074.
- lcase() and ucase() configuration expressions have been added which adjust
their arguments from upper to lower and lower to upper cases respectively.
Thanks to a patch from Albert Herranz.
- The dhclient 'reject ...;' statement, which rejects leases given by named
server-identifiers, now permits address ranges to be specified in CIDR
notation. Thanks to a patch from David Boyce.
- The subnet-mask option is now supplied by default, but at lowest
priority. This helps a small minority of clients that provide parameter
request lists, but do not list the subnet-mask option because they were
designed to interoperate with a server that behaves in this manner.
- The FQDN option is similarly supplied even if it does not appear on the
parameter request list, but not to the exclusion of options that do
appear at the parameter request list. Up until now it had ultimate
priority over the client's parameter request list.
- Varying option space code and length bit widths (8/16/32) are now
supported. This is a milestone in achieving RFC 3925 "VIVSO" and
DHCPv6 support.
- A new common (server or client) option, 'db-time-format local;', has
been added which prints the local time in /var/db/dhcpd.leases rather
than UTC. Thanks to a patch from Ken Lalonde.
- Some patches to improve DHCP Server startup speed from Andrew Matheson
have been incorporated.
- Failover pairs now implement 'MAC Affinity' on leases moving from the
active to free states. Leases that belonged to the failover secondary
are moved to BACKUP state rather than FREE upon exiting EXPIRED state.
If lease rebalancing must move leases, it tries first to move leases
that belong to the peer in need.
- The server no longer sends POOLREQ messages unless the pool is severely
misbalanced in the peer's favor (see 'man dhcpd.conf' for more details).
- Pool rebalance events no longer happen upon successfully allocating a
lease. Instead, they happen on a schedule. See 'man dhcpd.conf' for the
min-balance and max-balance statements for more information.
- The DHCP Relay Agent Information Option / Link Selection Sub-Option
is now supported. (See RFC3527 for details).
- A new DDNS related server option, update-conflict-detection, has been
added. If this option is enabled, dhcpd will perform normal DHCID
conflict resolution (the default). If this option is disabled, it will
instead trust the assigned name implicitly (removing any other bindings
on that name). This option has not been made available in dhclient.
- In those cases where the DHCP software manufactures an IP header (to
transmit via bpf, lpf, etc), the IP TTL the software selects has been
increased from 16 to 128. This is intended to match Microsoft Windows
DHCP Client behaviour, to increase compatibility.
- 'ignore client-updates;' now has behaviour that is different from
'deny client-updates;'. The client's request is not truly ignored,
rather it is encouraged. Should this value be configured, the server
updates DNS as though client-updates were set to 'deny'. That is, it
enters into DNS whatever it is configured to do already, provided it is
configured to. Then it sends a response to the client that lets the
client believe it is performing client updates (which it will), probably
for a different name. In essence, this lets the client do as it will,
ignoring this aspect of their request.
- Support for compressed 'domain name list' style DHCP option contents, and
in particular the domain search option (#119) was added.
- The DHCP LEASEQUERY protocol as defined in RFC4388 is now implemented.
LEASEQUERY lets you query the DHCP server for information about a lease,
using either an IP address, MAC address, or client identifier. Thanks
to a patch from Justin Haddad.
- DHCPD is now RFC2131 section 4.1 compliant (broadcast to all-ones ip and
ethernet mac address) on the SCO platform specifically without any strange
ifconfig hacks. Many thanks go to the Kroger Co. for donating the
hardware and funding the development.
- A new common configuration executable statement, execute(), has been
added. This permits dhcpd or dhclient to execute a named external
program with command line arguments specified from other configuration
language. Thanks to a patch written by Mattias Ronnblom, gotten to us
via Robin Breathe.
- A new dhcp server option 'adaptive-lease-time-threshold' has been added
which causes the server to substantially reduce lease-times if there are
few (configured percentage) remaining leases. Thanks to a patch submitted
from Christof Chen.
- Encapsulated option spaces within encapsulated option spaces is now
formally supported.
Changes since 3.0.5rc1
- A bug was repaired in fixes to the dhclient, which saught to run the
dhclient-script with the 'EXPIRE' state should it receive a NAK in
response to a REQUEST. The client now iterates the PREINIT state
after the EXPIRE state, so that interfaces that might be configured
'down' can be brought back 'up' and initialized.
- DHCPINFORM handling for clients that properly set ciaddr and come to the
server via a relay aget has been repaired.
Changes since 3.0.4
- A warning that host statements declared within subnet or shared-network
scopes are actually global has been added.
- The default minimum lease time (if min-lease-time was not specified)
was raised from 0 to 300. 0 is not thought to be sensible, and is
known to be damaging.
- Added additional fatal error sanity checks surrounding lease binding
state count calculations (free/active counts used for failover pool
balancing).
- Some time value size fixes in 3.0.4 brought on from FreeBSD /usr/ports were
misapplied to server values rather than client values. The server no longer
advertises 8-byte lease-time options when on 64-bit platforms.
- A bug where leases not in ACTIVE state would get billed to billed classes
(classes with lease limitations) was fixed. Non-active leases OFFERed
to clients are no longer billed (but billing is checked before offering).
- The dhcpd.conf.5 manpage was updated in regard to the ddns-domainname
configuration option - the default configuration and results should be
more clear now.
- If the dhclient were to receive a DHCPNAK while it was in the RENEW
state (and consequently, had an active, 'bound' address and related
configuration options), it would fail to 'tear down' this information
before proceeding into INIT state. dhclient now iterates the dhclient-
script with the 'EXPIRE' action to cause these teardowns prior to entering
INIT state. Thanks to a patch from Chris Zimmerman.
- The omapi.1 manpage had some formatting errors repaired thanks to a patch
from Yoshihiko Sarumaru.
- A few lines of code that were failover-specific were moved within
#if defined() clauses so that compilation without failover could be
made possible.
- The log message emitted when the 'leased-address' value was not available
in dhcpd.conf "executable statements" has been updated to be more helpful.
Manpage information for this value has also been updated.
- Abandoned or dissociated (err condition) leases now remove any related
dynamic dns bindings. Thanks to a patch from Patrick Schoo.
- Attempting to write a new lease file to replace a corrupt (due to
encountering non-retryable errors during writing) lease file should
no longer result in an infinite recursion.
- Host declaration hardware addresses and client identifiers may only be
configured once. dhcpd will now fail to load config files that specify
multiple identifiers (previous versions would silently over-ride the
value with the later configured value).
Changes since 3.0.4b3
- Some manual pages were clarified pursuant to discussion on the dhcp-server
mailing list.
Changes since 3.0.4b2
- Null-termination sensing for certain clients that unfortunatley require
it in DHCPINFORM processing was repaired.
- The host-name option and a few others were moved from "X" format to "t"
format to be compatible with new NULL handling functions.
- DHCPINFORM processing is a little more careful about return addressing
its responses, or if responding via a relay. The INFORM related
messages also log the 'effective client ip address' rather than the
client's supplied ciaddr (since some clients produce null ciaddrs).
- The server was inappropriately sending leases to the RESET state in the
event that multiple active leases were found to match a singly-identified
client. This was changed to RELEASED (by accepting a different, ACTIVE
binding, the client is implicitly releasing its lease). This repairs a
bug wherein secondary servers in failover pairs detecting this condition
move leases to RESET, and primaries refuse to accept that state
transition (properly).
- The memset-after-dmalloc() changes made in 3.0.4b1 have been backed out.
Changes since 3.0.4b1
- Command line parsing in omshell was repaired - it no longer closes
STDIN after reading one line.
- The resolver library no longer closes the /etc/resolv.conf file
descriptor it opened twice.
- Changes to trailing NULL removal in 't' option-atoms has been rethought,
it now includes 'd' (domain name) types, and tries hard not to rewind an
option beyond the start of the text field it is un-terminating.
Changes since 3.0.3
- A DDNS update handling function was misusing the DNS error codes, rather
than the internal generic result enumeration. The result is a confusing
syslog line, logging the wrong condition.
- The DHCP Server was not checking pool balance in the case where it brought
a non-ACTIVE lease out of storage for a client that was returning to use
a lease it once had long ago, and had since expired.
- Failover peers no longer bother to look for free leases to allocate when
they already found the client's ACTIVE lease. DISCOVERs are load balanced
wether freely-allocated or not, unless the server doubts the peer has
leases to allocate.
- Fixed a bug in dhcrelay agent addition code that suppressed trailing
PAD options - it was suppressing only one trailng PAD option, rather
than the entire block of them.
- Fixed some unlikely overlapping-region memcpy() bugs in dhcrelay agent
option addition and stripping code. Added a few sanity checks.
- Added some sanity checks to OMAPI connection/authentication code.
- dmalloc() memset()'s the non-debug (data) portion of the allocated
memory to zero. Code that memset()'s the result returned by dmalloc() to
zero is redundant. These redundancies were removed.
- Some type declaration corrections to u_int16_t were made in common/tr.c
(Token Ring support) thanks to a patch from Jason Vas Dias at RedHat.
- A failover bug that was allowing leases that EXPIRED or were RELEASED
where tsfp and tstp are identical timestamps to languish in these
transitional states has been repaired. As a side effect, lease
databases should be kept more consistent overall, not just for these
transitional states.
- If the lease db is deleted out from under the daemon, and it moves to rewrite
the db, it will go ahead with the operation and move the new db into place
once it detects the old db does not exist.
- dhclient now ignores IRDA, SIT, and IEEE1394 network interfaces, as it
is either nonsensical or (in the case of IEEE1394) is not known to support
these interfaces. Thanks to Marius Gedminas and Andrew Pollock of Debian.
- Some previously undocumented reasons for dhclient-script invoking has
been doucmented in the dhclient-script.8 manpage.
- Failover potential expiry calculations (TSTP) have been corrected. Results
should be substantially more consistent, and proper given the constraints.
- Adjusted lease state validation checks in potential-conflict, to
account for possible clock skew similarly to normal state, and several
previously illegal transitions were made legal (ex: active->released).
- An impossible sanity check was removed from omapi/buffer.c, thanks to a
patch from 'infamous42md'.
- An OMAPI host/network byte order problem in lease time values has been
repaired.
- Several minor bugs, largely relating to treating 8-byte time values as
4-byte entities, have been repaired after careful review of the FreeBSD
ports collection's patch set. Thanks to the nameless entities who have
contributed to the FreeBSD ports.
- When writing a trace file, the file is now created with permissions 0600,
to help administrators avoid accidentally publicising sensitive config
data.
- The calculation of the maximum size of DHCP packets no longer includes
Ethernet framing overhead. The result is that the 'Maximum Message
Size' option advertised by clients, or the default value 576, is no
longer reduced by 14 bytes, and instead directly reflects the IP level
MTU (and the default, minimum allowed IP MTU of 576).
- The special status of RELEASED/EXPIRED/RESET leases when a server
is operating in partner-down was fixed. It no longer requires a
lease be twice the MCLT beyond STOS to 'reallocate', and the expiry
event to turn these into FREE leases without peer acknowledgement
(after STOS+MCLT) has been repaired.
- Compilation on older Solaris systems (lacking /usr/include/sys/int_types.h)
has been repaired.
- "append"ing a string onto the end of a "t" type option (such as the
domain-name field) that had been improperly NULL-terminated by the
DHCP server will no longer result in a truncated string containing
only the option from the server, and not the expected appended value.
Thanks to a patch from Jason Vas Dias at RedHat.
- File handlers on configuration state (config files and lease dbs) should
be treated consistently, regardless of wether TRACING is defined or not.
- The linux build environment has had some minor improvements - better
sensing of 64-bit pointer sizes (only used for establishing an icmp_id),
and corrections to #if operators regarding LINUX_MAJOR should it ever
move to 3.[01].x.
- The server now tries harder to survive the condition where it is unable
to open a new lease file to rewrite the lease state database.
Changes since 3.0.3b3
- dhclient.conf documentation for interface {} was updated to reflect recent
discussion on the dhcp-hackers mailing list.
- In response to reports that the software does not compile on GCC 4.0.0,
-Werror was removed from Makefile.conf for all platforms that used it.
We will address the true problem in a future release; this is a temporary
workaround.
Changes since 3.0.3b2
- An error in code changes introduced in 3.0.3b2 was corrected, which caused
static BOOTP clients to receive random addresses.
Changes since 3.0.3b1
- A bug was fixed in BOOTPREQUEST handling code wherein stale references to
host records would be left behind on leases that were not allocated to the
client currently booting (eg in the case where the host was denied booting).
- The dhcpd.conf.5 manpage was updated to be more clear in regards to
multiple host declarations (thanks to Vincent McIntyre). 'Interim' style
dynamic updates were also retouched.
Changes since 3.0.2
- A bug was fixed where a server might load balance a DHCP REQUEST to its
peer after already choosing not to load balance the preceeding DISCOVER.
The peer cannot allocate the originating server's lease.
- In the case where a secondary server lost its stable storage while the
primary was still in communications-interrupted, and came back online,
the lease databases would not be fully transferred to the secondary.
This was due to the secondary errantly sending an extra UPDREQ message
when the primary made its state transition to PARTNER-DOWN known.
- The package will now compile cleanly in gcc 3.3 and 3.4. As a side effect,
lease structures will be 9 bytes smaller on all platforms. Thanks to
Jason Vas Dias at Redhat.
- Interface discovery code in DISCOVER_UNCONFIGURED mode is now
properly restricted to only detecting broadcast interfaces. Thanks
to a patch from Jason Vas Dias at RedHat.
- decode_udp_ip_header was changed so that the IP address was copied out
to a variable, rather than referenced by a pointer. This enforces 4-byte
alignment of the 32-bit IP address value. Thanks to a patch from Dr.
Peter Poeml.
- An incorrect log message was corrected thanks to a patch from
Dr. Peter Poeml.
- A bug in DDNS was repaired, where if the server's first DDNS action was
a DDNS removal rather than a DDNS update, the resolver library's
retransmit timer and retry timer was set to the default, implying a
15 second timeout interval. Which is a little excessive in a synchronous,
single-threaded system. In all cases, ISC DHCP should now hold fast to
a 1-second timeout, trying only once.
- The siaddr field was being improperly set to the server-identifier when
responding to DHCP messages. RFC2131 clarified the siaddr field as
meaning the 'next server in the bootstrap process', eg a tftp server.
The siaddr field is now left zeroed unless next-server is configured.
- mockup_lease() could have returned in an error condition (or in the
condition where no fixed-address was found matching the shared
network) with stale references to a host record. This is probably not
a memory leak since host records generally never die anyway.
- A bug was repaired where failover servers would let stale client identifiers
persist on leases that were reallocated to new clients not sending an id.
- Binding scopes ("set var = value;") are now removed from leases allocated
by failover peers if the lease had expired. This should help reduce the
number of stale binding scopes on leases.
- A small memory leak was closed involving client identifiers larger than
7 bytes, and failover.
- Configuring a subnet in dhcpd.conf with a subnet mask of 32 bits might
cause an internal function to overflow heap. Thanks to Jason Vas Dias
at Redhat.
- Some inconsistencies in treating numbers that the lexer parsed as 'NUMBER'
or 'NUMBER_OR_NAME' was repaired. Hexadecimal parsing is affected, and
should work better.
- In several cases, parse warnings were being issued before the lexical
token had been advanced to the token whose value was causing an error...
causing parse warnings to claim the problem is on the wrong token.
- Host declarations matching on client identifier for dynamic leases will
no longer match fixed-address host declarations (this is now identical
to behaviour for host records matching on hardware address).