Annotation of embedaddon/dhcp/RELNOTES, revision 1.1

1.1     ! misho       1:              Internet Systems Consortium DHCP Distribution
        !             2:                           Version 4.1-ESV-R4
        !             3:                            29 November 2011
        !             4: 
        !             5:                              Release Notes
        !             6: 
        !             7:                              NEW FEATURES
        !             8: 
        !             9: Version 4.1-ESV-R4 is an extended support version (ESV) release.
        !            10: ESVs are intended for users who have longer upgrade constraints.
        !            11: Please see our web page http://www.isc.org/downloads/extended-support for
        !            12: more information on ESVs.
        !            13: 
        !            14: ISC DHCP 4.1.x includes several new DHCPv6 features that were not included
        !            15: in DHCP 4.0.x.  These include:
        !            16: 
        !            17: - Support for the rapid-commit option on the client side
        !            18: 
        !            19: - Prefix Delegation support
        !            20: 
        !            21: - IA_TA address support
        !            22: 
        !            23: - A basic DHCPv6 relay agent
        !            24: 
        !            25: - Basic and partial DHCPv6 leasequery support
        !            26: 
        !            27: There are a number of DHCPv6 limitations and features missing in this
        !            28: release, which will be addressed in the future:
        !            29: 
        !            30: - Only Solaris, Linux, FreeBSD, NetBSD, and OpenBSD are supported.
        !            31: 
        !            32: - Only a single address is supported per IA.
        !            33: 
        !            34: - DHCPv6 includes human-readable text in status code messages. These
        !            35:   should be configurable, and probably localized via gettext() or the
        !            36:   like.
        !            37: 
        !            38: - The "host-identifier" option is limited to a simple token.
        !            39: 
        !            40: - The client and server can only operate DHCPv4 or DHCPv6 at a time,
        !            41:   not both.  To use both protocols simultaneously, two instances of the
        !            42:   relevant daemon are required, one with the '-6' command line option.
        !            43: 
        !            44: For information on how to install, configure and run this software, as
        !            45: well as how to find documentation and report bugs, please consult the
        !            46: README file.
        !            47: 
        !            48: ISC DHCP uses standard GNU configure for installation. Please review the
        !            49: output of "./configure --help" to see what options are available.
        !            50: 
        !            51: The system has only been tested on Linux, FreeBSD, and Solaris, and may not
        !            52: work on other platforms. Please report any problems and suggested fixes to
        !            53: <dhcp-users@isc.org>.
        !            54: 
        !            55:                        Changes since 4.1-ESV-R3
        !            56: 
        !            57: - Add AM_MAINTAINER_MODE to configure.ac to avoid rebuilding
        !            58:   configuration files.  [ISC-Bugs #24107]
        !            59:  
        !            60: ! Add a check for a null pointer before calling the regexec function.
        !            61:   Without out this check we could, under some circumstances, pass
        !            62:   a null pointer to the regexec function causing it to segfault.
        !            63:   Thanks to a report from BlueCat Networks.
        !            64:   [ISC-Bugs #26704].
        !            65:   CVE: CVE-2011-4539
        !            66: 
        !            67:                        Changes since 4.1-ESV-R3b1
        !            68: 
        !            69: - Compilation fix for gcc 4.5 or newer in server/ddns.c
        !            70:   [ISC-Bugs #24973]
        !            71: 
        !            72: - Strict checks for content of domain-name DHCPv4 option can now be 
        !            73:   configured during compilation time. Even though RFC2132 does not allow 
        !            74:   to store more than one domain in domain-name option, such behavior is 
        !            75:   now enabled by default, but this may change some time in the future.
        !            76:   See ACCEPT_LIST_IN_DOMAIN_NAME define in includes/site.h.
        !            77:   [ISC-Bugs #24167]
        !            78: 
        !            79: ! Two packets were found that cause a server to halt.  The code
        !            80:   has been updated to properly process or reject the packets as
        !            81:   appropriate.  Thanks to David Zych at University of Illinois
        !            82:   for reporting this issue.  [ISC-Bugs #24960]
        !            83:   One CVE number for each class of packet.
        !            84:   CVE-2011-2748
        !            85:   CVE-2011-2749
        !            86: 
        !            87:                        Changes since 4.1-ESV-R2
        !            88: 
        !            89: - DHCPv6 server now responds properly if client asks for a prefix that
        !            90:   is already assigned to a different client. [ISC-Bugs #23948]
        !            91: 
        !            92: - Fix the handling of connection requests on the failover port.
        !            93:   This was a security issue in 4.2.0 but is not in  4.1.x.
        !            94:   [ISC-Bugs #22679]
        !            95: 
        !            96: - When processing the format flags for a given option consume the
        !            97:   flag indicating an optional value correctly.  A symptom of this
        !            98:   bug was an infinite loop when trying to parse the slp-service-scope
        !            99:   option.  Thanks to a patch from Marius Tomaschewski.
        !           100:   [ISC-Bugs #22055]
        !           101: 
        !           102: - Modify the dlpi code to accept getmsg() returning a positive value.
        !           103:   [ISC-Bugs #22824]
        !           104: 
        !           105: - Removed the restriction on using IPv6 addresses in IPv4 mode.  This
        !           106:   allows IPv4 options which contain IPv6 addresses to be specified.  For
        !           107:   example the 6rd option can be specified and used like this:
        !           108:   [ISC-Bugs #23039]
        !           109: 
        !           110:        option 6rd code 212 = { integer 8, integer 8,
        !           111:                                ip6-address, array of ip-address };
        !           112:        option 6rd 16 10 2001:: 1.2.3.4, 5.6.7.8;
        !           113: 
        !           114: - Add the option "--no-pid" to the client, relay and server code,
        !           115:   to disable writing a pid file.  Add the option "-pf pidfile"
        !           116:   to the relay to allow the user to supply the pidfile name at
        !           117:   runtime.  Add the "with-relay6-pid-file" option to configure
        !           118:   to allow the user to supply the pidfile name for the relay
        !           119:   in v6 mode at configure time.
        !           120:   [ISC-Bugs #23351] [ISC-Bugs #17541]
        !           121: 
        !           122: - 'dhclient' no longer waits a random interval after first starting up to
        !           123:   begin in the INIT state.  This conforms to RFC 2131, but elects not to
        !           124:   implement a 'SHOULD' direction in section 4.1. [ISC-Bugs #19660]
        !           125:   
        !           126: - Added 'initial-delay' parameter that specifies maximum amount of time 
        !           127:   before client goes to the INIT state. The default value is 0. In previous 
        !           128:   versions of the code client could wait up to 5 seconds. The old behavior 
        !           129:   may be restored by using 'initial-delay 5;' in the client config file.
        !           130:   [ISC-Bugs #19660]
        !           131: 
        !           132: - ICMP ping-check should now sit closer to precisely the number of seconds
        !           133:   configured (or default 1), due to making use of the new microsecond
        !           134:   scale timer internally to dhcpd.  This corrects a bug where the server
        !           135:   may immediately timeout an ICMP ping-check if it was made late in the
        !           136:   current second. [ISC-Bugs #19660]
        !           137: 
        !           138: - The DHCP client will schedule renewal and rebinding events in
        !           139:   microseconds if the DHCP server provided a lease-time that would result
        !           140:   in sub-1-second timers.  This corrects a bug where a 2-second or lower
        !           141:   lease-time would cause the DHCP client to enter an infinite loop by
        !           142:   scheduling renewal at zero seconds. [ISC-Bugs #19660]
        !           143: 
        !           144: - Client lease records are recorded at most once every 15 seconds.  This
        !           145:   keeps the client from filling the lease database disk quickly on very small
        !           146:   lease times. [ISC-Bugs #19660]
        !           147: 
        !           148: - To defend against RFC 2131 non-compliant DHCP servers which fail to
        !           149:   advertise a lease-time (either mangled, or zero in value) the DHCP
        !           150:   client now adds the server to the reject list ACL and returns to INIT
        !           151:   state to hopefully find an RFC 2131 compliant server (or retry in INIT
        !           152:   forever). [ISC-Bugs #19660]
        !           153: 
        !           154: - Parameters configured to evaluate from user defined function calls can
        !           155:   now be correctly written to dhcpd.leases (as on 'on events' or dynamic
        !           156:   host records inserted via OMAPI).  [ISC-Bugs #22266]
        !           157: 
        !           158: - If a 'next-server' parameter is configured in a dynamic host record via
        !           159:   OMAPI as a domain name, the syntax written to disk is now correctly parsed
        !           160:   upon restart.  [ISC-Bugs #22266]
        !           161: 
        !           162: - The DHCP server now responds to DHCPLEASEQUERY messages from agents using
        !           163:   IP addresses not covered by a subnet in configuration.  Whether or not to
        !           164:   respond to such an agent is still governed by the 'allow leasequery;'
        !           165:   configuration parameter, in the case of an agent not covered by a configured
        !           166:   subnet the root configuration area is examined. Server now also returns
        !           167:   vendor-class-id option, if client sent it. [ISC-Bugs #21094]
        !           168: 
        !           169: - Documentation fixes
        !           170:   [ISC-Bugs #17959] add text to AIX section describing how to have it send
        !           171:   responses to the all-ones address.
        !           172:   [ISC-Bugs #19615] update the includes in dhcpctl/dhcpctl.3 to be more correct
        !           173:   [ISC-Bugs #20676] update dhcpd.conf.5 to include the RFC numbers for DDNS
        !           174: 
        !           175: - Relay no longer crashes, when DHCP packet is received over interface without
        !           176:   any IPv4 address assigned. [ISC-Bugs #22409]
        !           177: 
        !           178: - Linux Packet Filter interface improvement. sockaddr_pkt structure is used,
        !           179:   rather than sockaddr. Packet etherType is now forced to ETH_P_IP.
        !           180:   [ISC-Bugs #18975]
        !           181: 
        !           182: - Minor code cleanups - but note port change for #23196
        !           183:   [ISC-Bugs #23470] - Modify when an ignore return macro is defined to
        !           184:   handle unsed error return warnings for more versions of gcc.
        !           185:   [ISC-Bugs #23196] - Modify the reply handling in the server code to
        !           186:   send to a specified port rather than to the source port for the incoming
        !           187:   message.  Sending to the source port was test code that should have
        !           188:   been removed.  The previous functionality may be restored by defining
        !           189:   REPLY_TO_SOURCE_PORT in the includes/site.h file.  We suggest you don't
        !           190:   enable this except for testing purposes.
        !           191:   [ISC-Bugs #22695] - Close a file descriptor in an error path.
        !           192:   [ISC-Bugs #19368] - Tidy up variable types in validate_port.
        !           193: 
        !           194: - Code cleanup
        !           195:   [ISC-Bugs #13151] remove obsolete PROTO, KandR, INLINE and ANSI_DECL macros
        !           196: 
        !           197: - Compilation problem with gcc4.5 and omshell.c resolved. [ISC-Bugs #23831]
        !           198: 
        !           199: - Client Script fixes
        !           200:   [ISC-Bugs #23045] Typos in client/scripts/openbsd
        !           201:   [ISC-Bugs #23565] In the client scripts add a zone id (interface id) if
        !           202:   the domain search address is link local.
        !           203:   [ISC-Bugs #1277] In some of the client scripts add code to handle the
        !           204:   case of the default router information being changed without the address
        !           205:   being changed.
        !           206: 
        !           207: - Enlarge the buffer size used by the Omshell code and some of the
        !           208:   print routines to allow for greater than 60 characters or, when
        !           209:   printing as hex strings, 20 characters.  [ISC-Bugs #22743]
        !           210: 
        !           211: - In Solaris 11 switch to using sockets instead of DLPI, thanks
        !           212:   to a patch form Oracle.  [ISC-Bugs #24634].
        !           213: 
        !           214:                        Changes since 4.1-ESV-R1
        !           215: 
        !           216: ! In dhclient check the data for some string options for
        !           217:   reasonableness before passing it along to the script that
        !           218:   interfaces with the OS.
        !           219:   [ISC-Bugs #23722]
        !           220:   CVE: CVE-2011-0997
        !           221: 
        !           222:                        Changes since 4.1-ESV
        !           223: 
        !           224: ! When processing a request in the DHCPv6 server code that specifies
        !           225:   an address that is tagged as abandoned (meaning we received a
        !           226:   decline request for it previously) don't attempt to move it from
        !           227:   the inactive to active pool as doing so can result in the server
        !           228:   crshing on an assert failure.  Also retag the lease as active
        !           229:   and reset its timeout value.
        !           230:   [ISC-Bugs #21921]
        !           231: 
        !           232:                        Changes since 4.1.2
        !           233: 
        !           234: - ./configure on longer searches for -lcrypto to explicitly link against.
        !           235:   This fixes a bug where 'dhclient' would have shared library dependencies
        !           236:   on '/usr/lib'.  [ISC-Bugs #21967]
        !           237: 
        !           238: - Restore printing of values in omshell to the style pre 21585.  For
        !           239:   21585 we changed the print routines to always display time values
        !           240:   as a hex list.  This had a side effect of printing all data strings
        !           241:   as a hex list.  We shall investigate other ways of displaying time
        !           242:   values more usefully.  [ISC-Bugs #22626]
        !           243: 
        !           244:                        Changes since 4.1.2rc1
        !           245: 
        !           246: ! Handle a relay forward message with an unspecified address in the
        !           247:   link address field.  Previously such a message would cause the
        !           248:   server to crash.  Thanks to a report from John Gibbons.  [ISC-Bugs #21992]
        !           249:   CERT: VU#102047 CVE: CVE-2010-3611
        !           250: 
        !           251:                        Changes since 4.1.2b1
        !           252: 
        !           253: - Update the code to parse dhcpv6 lease files to accept a semi-colon at
        !           254:   the end of the max-life and preferred-life clauses.  In order to be
        !           255:   backwards compatible with older lease files not finding a semi-colon
        !           256:   is also accepted.  [ISC-Bugs #22303].
        !           257: 
        !           258:                         Changes since 4.1.1
        !           259: 
        !           260: - Cleaned up some compiler warnings
        !           261: 
        !           262: - Prohibit including lease time information in a response to a DHCP INFORM
        !           263:   Bug ticket 21092.
        !           264: 
        !           265: ! Accept a client id of length 0 while hashing.  Previously the server would
        !           266:   exit if it attempted to hash a zero length client id, providing attackers
        !           267:   with a simple denial of service attack.  Bug ticket 21253.
        !           268:   CERT: VU#541921 - CVE: CVE-2010-2156
        !           269: 
        !           270: - A bug was fixed that could cause the DHCPv6 server to advertise/assign a
        !           271:   previously allocated (active) lease to a client that has changed subnets,
        !           272:   despite being on different shared networks.  Dynamic prefixes specifically
        !           273:   allocated in shared networks also now are not offered if the client has
        !           274:   moved.  [ISC-Bugs #21152]
        !           275: 
        !           276: - Add declaration for variable in debug code in alloc.c.  [ISC-Bugs #21472]
        !           277: 
        !           278: - Documentation cleanup covering multiple tickets
        !           279:   [ISC-Bugs #20265] [ISC-Bugs #20259] [ISC-Bugs #19536] minor cleanup
        !           280:   [ISC-Bugs #20263] add text describing some default values
        !           281:   [ISC-Bugs #20193] single quotes at the start of a line indicate a control
        !           282:   line to nroff, escape them if we actually want a quote.
        !           283:   [ISC-Bugs #18916] sync the pointer to web pages amongst the different docs
        !           284:   [ISC-Bugs #20107] clarify description of ia-pd and ia-prefix.
        !           285:   [ISC-Bugs #20245] clarify editing the failover state in a lease file to put
        !           286:   a server into the PARTNER-DOWN state.
        !           287:  
        !           288: - 'get-host-names true;' now also works even if 'use-host-decl-names true;'
        !           289:   was also configured.  The nature of this repair also fixes another
        !           290:   error; the host-name supplied by a client is no longer overridden by a
        !           291:   reverse lookup of the lease address.  Thanks to a patch from Wilco Baan
        !           292:   Hofman supplied to us by the Debian package maintenance team.
        !           293:   [ISC-Bugs #21691] {Debian Bug#509445}
        !           294: 
        !           295: - The .TH tag for the dhcp-options manpage was typo repaired
        !           296:   thanks to a report from jidanni and the Debian package maintenance
        !           297:   team.  [ISC-Bugs #21676] {Debian Bug#563613}
        !           298:  
        !           299: - More documentation changes - primarily to put the options in the dhclient
        !           300:   and dhcpd man pages into the standard form.  Thanks in part to a patch
        !           301:   from David Cantrell at Red Hat.
        !           302:   [ISC-Bugs #20264] and parts of [ISC-Bugs #17744] dhclient.8 changes
        !           303: 
        !           304: - Minor compilation errors - type mismatches, extra semi-colons after macros
        !           305:   [ISC-Bugs #20884] [ISC-Bugs #20953] [ISC-Bugs #20955]
        !           306: 
        !           307: - Add code to clear the pointer to an object in an OMAPI handle when the
        !           308:   object is freed due to a dereference.  [ISC-Bugs #21306]
        !           309: 
        !           310: - Fixed a bug that leaks host record references onto lease structures,
        !           311:   causing the server to apply configuration intended for one host to any
        !           312:   other innocent clients that come along later.  [ISC-Bugs #22018]
        !           313: 
        !           314: - Minor code fixes
        !           315:   [ISC-Bugs #19566] When trying to find the zone for a name for ddns allow
        !           316:   the name to be at the apex of the zone.
        !           317:   [ISC-Bugs #19617] Restrict length of interface name read from command line
        !           318:   in dhcpd - based on a patch from David Cantrell at Red Hat.
        !           319:   [ISC-Bugs #20039] Correct some error messages in dhcpd.c
        !           320:   [ISC-Bugs #20070] Better range check on values when creating a DHCID.
        !           321:   [ISC-Bugs #20198] Avoid writing past the end of the field when adding 
        !           322:   overly long file or server names to a packet and add a log message
        !           323:   if the configuration supplied overly long names for these fields.
        !           324:   Thanks to Martin Pala.
        !           325:   [ISC-Bugs #21497] Add a little more randomness to rng seed in client
        !           326:   thanks to a patch from Jeremiah Jinno.
        !           327: 
        !           328: - Correct error handling in DLPI [ISC-Bugs #20378]
        !           329: 
        !           330: - Remove __sun__ and __hpux__ typedefs in osdep.h as they are now being
        !           331:   checked in configure.  [ISC-Bugs #20443]
        !           332: 
        !           333: - Modify how the cmsg header is allocated the v6 send and received routines
        !           334:   to compile on more compilers.  [ISC-Bugs #20524]
        !           335: 
        !           336: - When parsing a domain name free the memory for the name after we are
        !           337:   done with it.  [ISC-Bugs #20824]
        !           338: 
        !           339: - Add an elapsed time option to the release message and refactor the
        !           340:   code to move most of the common code to a single routine.
        !           341:   [ISC-Bugs #21171].
        !           342: 
        !           343: - Parse date strings more properly - the code now handles semi-colons in
        !           344:   date strings correctly.  Thanks to a patch from Jiri Popelka at Red Hat.
        !           345:   [ISC-Bugs #21501, #20598]
        !           346: 
        !           347: - Fixes to lease input and output.
        !           348:   [ISC-Bugs #20418] - Some systems don't support the "%s" argument to
        !           349:   strftime, paste together the same string using mktime instead.
        !           350:   [ISC-Bugs #19596] - When parsing iaid values accept printable
        !           351:   characters.
        !           352:   [ISC-Bugs #21585] - Always print time values in omshell as hex
        !           353:   instead of ascii if the values happen to be printable characters.
        !           354: 
        !           355: - Minor changes for scripts, configure.ac and Makefiles
        !           356:   [ISC-Bugs #19147] Use domain-search instead of domain-name in manual and
        !           357:                     example conf file.  Thanks to a patch from David Cantrell
        !           358:                     at Red Hat.
        !           359:   [ISC-Bugs #19761] Restore address when doing a rebind in DHCPv6
        !           360:   [ISC-Bugs #19945] Properly close the quote on some arguments.
        !           361:   [ISC-Bugs #20952] Add 64 bit types to configure.ac
        !           362:   [ISC-Bugs #21308] Add "PATH=" to CLIENT_PATH envrionment variable
        !           363: 
        !           364: ! Handle pipe failures more gracefully.  Some OSes pass a SIGPIPE
        !           365:   signal to a process and will kill the process if the signal isn't
        !           366:   caught.  This patch adds code to turn off the SIGPIPE signal via
        !           367:   a setsockopt() call and to ignore the SIGPIPE signal in case the
        !           368:   OS doesn't support the necessary setsockopt() option.  This problem
        !           369:   was found during internal testing when the two servers in a failover
        !           370:   pair were repeatedly unable to communicate for longer than the
        !           371:   max-response-delay value.  Eventually one of the pair attempted a
        !           372:   write() call at just the same time as the other server killed the
        !           373:   connection and caused an uncaught SIGPIPE signal which caused the
        !           374:   OS to kill the server.
        !           375:   This is a minor security issue.  It is a security issue as it can 
        !           376:   cause a server to stop.  It is minor as the attacker would need to
        !           377:   be able to interrupt traffic between the partners in a failover 
        !           378:   pair for max-response-delay seconds at will - in which case the 
        !           379:   defender has bigger problems than the DHCP server being killed.
        !           380:   Using the NIST CVSS security vulnerability rating system this
        !           381:   issue scored 1.2, meaning it is not a major risk for users.
        !           382:   [ISC-Bugs #22269]
        !           383: 
        !           384:                         Changes since 4.1.1rc1
        !           385: 
        !           386: - When using 'ignore client-updates;', the FQDN returned to the client
        !           387:   is no longer truncated to one octet.
        !           388: 
        !           389:                         Changes since 4.1.1b3
        !           390: 
        !           391: - None.
        !           392: 
        !           393:                        Changes since 4.1.1b2
        !           394: 
        !           395: - Fix test in dhcp_interface_signal_handler to check that the inner handler
        !           396:   has a signal_handler before calling it.
        !           397: 
        !           398: - Both host and subnet6 configuration groups are now included whether a
        !           399:   fixed-address6 (DHCPv6) is in use or not.  Host scoped configuration takes
        !           400:   precedence.  This fixes two bugs, one where host scoped configuration
        !           401:   would not be included from a non-fixed-address6 host record, and the equal
        !           402:   and opposite bug where subnet6 scoped configuration would not be used when
        !           403:   over-riding values were not present in a matching fixed-address6 host
        !           404:   configuration.
        !           405: 
        !           406: - ./configure now checks to ensure the intX_t and u_intX_t types are defined,
        !           407:   correcting a compilation failure when using Sun's compiler.
        !           408: 
        !           409: - Modified the handling of a connection to avoid releasing the omapi io
        !           410:   object for the connection while it is still in use.  One symptom from
        !           411:   this error was a segfault when a failover secondary attempted to connect
        !           412:   to the failover primary if their clocks were not synchronized.
        !           413: 
        !           414:                        Changes since 4.1.1b1
        !           415: 
        !           416: - Remove infinite loop in token_print_indent_concat().
        !           417: 
        !           418: - Memory leak in the load_balance_mine() function is fixed.  This would
        !           419:   leak ~20-30 octets per DHCPDISCOVER packet while failover was in use
        !           420:   and in normal state.
        !           421: 
        !           422: - Various compilation fixes have been included for the memory related
        !           423:   DEBUG #defines in includes/site.h.
        !           424: 
        !           425: - Fixed Linux client script 'unary operator expected' errors with DHCPv6.
        !           426: 
        !           427: - Fixed setting hostname in Linux hosts that require hostname argument
        !           428:   to be double-quoted.  Also allow server-provided hostname to
        !           429:   override hostnames 'localhost' and '(none)'.
        !           430: 
        !           431: - Added client support for setting interface MTU and metric, thanks to
        !           432:   Roy "UberLord" Marples <roy@marples.name>.
        !           433: 
        !           434: - Fixed failover reconnection retry code to continue to retry to reconnect
        !           435:   rather than restarting the listener.
        !           436: 
        !           437: - Compilation on Solaris with USE_SOCKETS defined in includes/site.h has
        !           438:   been repaired.  Other USE_ overrides should work better.
        !           439: 
        !           440: - A check for the local flavor of IFNAMSIZ had a broken 'else' condition,
        !           441:   that probably still resulted in the correct behaviour (but wouldn't use
        !           442:   a larger defined value provided by the host OS).
        !           443: 
        !           444: - Fixed a bug where an OMAPI socket disconnection message would not result
        !           445:   in scheduling a failover reconnection, if the link had not negotiated a
        !           446:   failover connect yet (e.g.: connection refused, asynch socket connect()
        !           447:   timeouts).
        !           448: 
        !           449: - A bug was fixed that caused the 'conflict-done' state to fail to be parsed
        !           450:   in failover state records.
        !           451: 
        !           452: ! A stack overflow vulnerability was fixed in dhclient that could allow
        !           453:   remote attackers to execute arbitrary commands as root on the system,
        !           454:   or simply terminate the client, by providing an over-long subnet-mask
        !           455:   option.  CERT VU#410676 - CVE-2009-0692
        !           456: 
        !           457: - Versions 3.0.x syntax with multiple name->code option definitions is now
        !           458:   supported.  Note that, similarly to 3.0.x, for by-code lookups only the
        !           459:   last option definition is used.
        !           460: 
        !           461: - Fixed a bug where a time difference of greater than 60 seconds between a
        !           462:   failover pair could cause the primary to crash on contact with the
        !           463:   secondary.  Thanks to a patch from Steinar Haug.
        !           464: 
        !           465: - Don't look for IPv6 interfaces on Linux when running in DHCPv4 mode.
        !           466:   Thanks to patches from Matthew Newton and David Cantrell.
        !           467: 
        !           468: - Secondary servers in a failover pair will now perform ddns removals if
        !           469:   they had performed ddns updates on a lease that is expiring, or was
        !           470:   released through the primary.  As part of the same fix, stale binding scopes
        !           471:   will now be removed if a change in identity of a lease's active client is
        !           472:   detected, rather than simply if a lease is noticed to have expired (which it
        !           473:   may have expired without a failover server noticing in some situations).
        !           474: 
        !           475: - A patch supplied by David Cantrell at RedHat was applied that detects
        !           476:   invalid calling parameters given to the ns_name_ntop() function.
        !           477:   Specifically, it detects if the caller passed a pointer and size pair
        !           478:   that causes the pointer to integer-wrap past zero.
        !           479: 
        !           480: ! Fixed a fenceposting bug when a client had two host records configured,
        !           481:   one using 'uid' and the other using 'hardware ethernet'.  CVE-2009-1892
        !           482: 
        !           483:                        Changes since 4.1.0
        !           484: 
        !           485: - Validate the argument to the -p option.
        !           486: 
        !           487: - The notorious 'option <unknown> ... larger than buffer' log line,
        !           488:   which is seen in some malformed DHCP client packets, was modified.
        !           489:   It now logs the universe name, and does not log the length values
        !           490:   (which are bogus corruption read from the packet anyway).  It also
        !           491:   carries a hopefully more useful explanation.
        !           492: 
        !           493: - A bug was fixed that caused the server not to answer some valid Solicit
        !           494:   and Request packets, if the dynamic range covering any requested addresses
        !           495:   had been deleted from configuration.
        !           496: 
        !           497: - Suppress spurious warnings from configure about --datarootdir
        !           498: 
        !           499: - Update the code to deal with GCC 4.3.  This included two sets of changes.
        !           500:   The first is to the configuration files to include the use of
        !           501:   AC_USE_SYSTEM_EXTENSIONS.  The second is to deal with return values that
        !           502:   were being ignored.
        !           503: 
        !           504: - The db-time-format option was documented in manpages.
        !           505: 
        !           506: - Using reserved leases no longer results in 'lease with binding state
        !           507:   free not on its queue' error messages, thanks to a patch from Frode
        !           508:   Nordahl.
        !           509: 
        !           510: - DDNS removal routines were updated so that the DHCID is not removed until
        !           511:   the client has been deprived of all A and AAAA records (not only the last
        !           512:   one of either of those).  This resolves a bug where dual stack clients
        !           513:   would not be able to regain their names after either expiration event.
        !           514: 
        !           515: - Fix a build error in dhcrelay, using older versions of gcc with
        !           516:   dhcpv6 disabled.
        !           517: 
        !           518: - Two uninitialized stack structures are now memset to zero, thanks to
        !           519:   patch from David Cantrell at Red Hat.
        !           520: 
        !           521: - Fixed a cosmetic bug where pretty-printing valid domain-search options would
        !           522:   result in an erroneous error log message ('garbage in format string').
        !           523: 
        !           524: - A bug in DLPI packet transmission (Solaris, HP/UX) that caused the server
        !           525:   to stop receiving packets is fixed.  The same fix also means that the MAC
        !           526:   address will no longer appear 'bogus' on DLPI-based systems.
        !           527: 
        !           528: - A bug in select handling was discovered where the results of one select()
        !           529:   call were discarded, causing the server to process the next select() call
        !           530:   and use more system calls than required.  This has been repaired - the
        !           531:   sockets will be handled after the first return from select(), resulting in
        !           532:   fewer system calls.
        !           533: 
        !           534: - The update-conflict-detection feature would leave an FQDN updated without
        !           535:   a DHCID (still currently implemented as a TXT RR).  This would cause later
        !           536:   expiration or release events to fail to remove the domain name.  The feature
        !           537:   now also inserts the client's up to date DHCID record, so records may safely
        !           538:   be removed at expiration or release time.  Thanks to a patch submitted by
        !           539:   Christof Chen.
        !           540: 
        !           541:                         Changes since 4.1.0b1
        !           542: 
        !           543: - A missing "else" in dhcrelay.c could have caused an interface not to
        !           544:   be recognized.
        !           545: 
        !           546:                        Changes since 4.1.0a2
        !           547: 
        !           548: - A cosmetic bug in DHCPDECLINE processing was fixed which caused all
        !           549:   successful DHCPDECLINEs to be logged as "not found" rather than
        !           550:   "abandoned".
        !           551: 
        !           552: - Added configuration file examples for DHCPv6.
        !           553: 
        !           554: - Some failover debugging #defines have been better defined and some
        !           555:   high frequency messages moved to a deeper debugging symbol.
        !           556: 
        !           557: - The CLTT parameter in failover is now only updated by client activity,
        !           558:   and not by failover binding updates (taking on the peer's CLTT).
        !           559: 
        !           560: - Failover BNDUPD messages are now discarded if they conflict with an
        !           561:   update that has been transmitted, but not acknowledged.
        !           562: 
        !           563: - A bug cleaning up unknown-xxx temporary option definitions was fixed.
        !           564: 
        !           565: - Delayed-ack is now a compile-time option, compiled out by default.
        !           566:   This feature is simply too experimental for right now, and causes
        !           567:   some problems to some failover installations.  We will revisit this
        !           568:   in future releases.
        !           569: 
        !           570: - The !inet_pton() call in res_mkupdrec was adjusted to '<= 0' as
        !           571:   inet_pton returns either 1, 0, or -1.
        !           572: 
        !           573: - A dhclient-script for MacOS X has been included, which enables
        !           574:   'dhclient -6' support.
        !           575: 
        !           576:                        Changes since 4.1.0a1
        !           577: 
        !           578: - Corrected list of failover state values in dhcpd man page.
        !           579: 
        !           580: - Fixed a bug that caused some request types to be logged incorrectly.
        !           581: 
        !           582: - Clients that sent a parameter request list containing the
        !           583:   routers option before the subnet mask option were receiving
        !           584:   only the latter.  Fixed.
        !           585: 
        !           586: - The server wasn't always sending the FQDN option when it should.
        !           587: 
        !           588: - A partner-down failover server no longer emits 'peer holds all free leases'
        !           589:   if it is able to newly-allocate one of the peer's leases.
        !           590: 
        !           591: - Fixed a coredump when adding a class via OMAPI.
        !           592: 
        !           593: - Check whether files are zero length before trying to parse them.
        !           594: 
        !           595: - Ari Edelkind's PARANOIA patch has been included and may be compiled in
        !           596:   via two ./configure parameters, --enable-paranoia and
        !           597:   --enable-early-chroot.
        !           598: 
        !           599: - ./configure was extended to cover many optional build features, such
        !           600:   as failover, server tracing, debugging, and the execute() command.
        !           601: 
        !           602: - There is now a default 1/4 of a second scheduled delay between delayed
        !           603:   fsync()'s, it can be configured by the max-ack-delay configuration
        !           604:   parameter.
        !           605: 
        !           606: - A bug was fixed where the length of a hostname was miscalculated, so that
        !           607:   hosts were given odd-looking domain names ("foo.bar.ba.example.com").
        !           608: 
        !           609: - Shared network selection should be done from the innermost relay
        !           610:   valid link-address field, rather than the outermost.
        !           611: 
        !           612: - Prefix pools are attached to shared network scopes.
        !           613: 
        !           614: - Merged IA_XX related structures.
        !           615: 
        !           616: - Add DHCPv6 files in configure.
        !           617: 
        !           618: - A memory leak when using omapi has been fixed.
        !           619: 
        !           620: - DHCPv6 vendor-class options (VSIO) are now only sent when they appear
        !           621:   on the DHCPv6 ORO.  This resolves a bug where VSIO options were placed
        !           622:   in IA_NA encapsulated options fields.
        !           623: 
        !           624: - Integrated client with stateless, temporary address and prefix delegation
        !           625:   support.
        !           626: 
        !           627: - A double-dereference in dhclient transmission of DHCPDECLINEs was
        !           628:   repaired.
        !           629: 
        !           630: - Fix handling of format code 'Z'.
        !           631: 
        !           632: - Support "-1" argument in DHCPv6.
        !           633: 
        !           634: - Merge DHCPv6-only "dhcrelay6" into general-purpose "dhcrelay" (use
        !           635:   "-6" option to select DHCPv6 mode).
        !           636: 
        !           637: - Fix handling of -A and -a flags in dhcrelay; it was failing to expand
        !           638:   packet size as needed to add relay agent options.
        !           639: 
        !           640: - A bug in subnet6 parsing where options contained in subnet6 clauses would
        !           641:   not be applied to clients addressed within that network was repaired.
        !           642: 
        !           643: - When configuring a "subnet {}" or "subnet6 {}" without an explicit
        !           644:   shared-network enclosing it, the DHCP software would synthesize a
        !           645:   shared-network to contain the subnet.  However, all configuration
        !           646:   parameters within the subnet more intuitively belong "to any client
        !           647:   on that interface", or rather the synthesized shared-network.  So,
        !           648:   when a shared-network is synthesized, it is used to contain the
        !           649:   configuration present inside the subnet {} clause.  This means that
        !           650:   the configuration will be valid for all clients on that network, not
        !           651:   just those addressed out of the stated subnet.  If you intended the
        !           652:   opposite, the workaround is to explicitly configure an empty
        !           653:   shared-network.
        !           654: 
        !           655: - A bug was fixed where Information-Request processing was not sourcing
        !           656:   configured option values.
        !           657: 
        !           658: - A warning was added since the DHCPv6 processing software does not yet
        !           659:   support class statements.
        !           660: 
        !           661: - Compliation warnings on GCC 4.3 relating to bootp source address
        !           662:   selection were repaired.
        !           663: 
        !           664: - The v6 BSD socket method was updated to use a single UDP BSD socket
        !           665:   no matter how many interfaces are involved, differentiating the
        !           666:   interfaces the packets were received on by the interface index supplied
        !           667:   by the OS.
        !           668: 
        !           669: - The relay agent no longer listens to the All DHCP Servers Multicast
        !           670:   address.
        !           671: 
        !           672: - A bug was fixed in data_string_sprintfa() where va_start was only called
        !           673:   once for two invocations of vsprintf() variants.
        !           674: 
        !           675: - ERO (RFC 4994) server support.
        !           676: 
        !           677: - Basic and partial DHCPv6 leasequery support.
        !           678: 
        !           679: - Reliable DHCPv6 release (previous behavior, send release and exit, is
        !           680:   still available with dhclient -6 -1 -r).
        !           681: 
        !           682:                        Changes since 4.0.0 (new features)
        !           683: 
        !           684: - Added DHCPv6 rapid commit support.
        !           685: 
        !           686: - Added explicit parser support for zero-length DHCP options, such as
        !           687:   rapid-commit, via format code 'Z'.
        !           688: 
        !           689: - It's now possible to update the "ends" field of a lease with OMAPI.
        !           690:   This is useful if you want not only to release a lease, but also make
        !           691:   it available for reuse right away.  Hat tip to Christof Chen.
        !           692: 
        !           693: - Fixed definition of the iaaddr hash functions to use the correct 
        !           694:   functions when referencing and dereferencing memory.
        !           695: 
        !           696: - Some definitions not in phase with the IANA registry were updated.
        !           697: 
        !           698: - Allocated interface IDs are better controlled ('u' bit set to zero,
        !           699:   reserved IDs avoided).
        !           700: 
        !           701: - Unicast options are taken into account only for RENEWs.
        !           702: 
        !           703: - NoAddrsAvail answers to SOLICITs are always ADVERTISEs even when a SOLICIT
        !           704:   carries a rapid-commit option.
        !           705: 
        !           706: - Return in place of raise an impossible condition when one tries to release
        !           707:   an empty active lease.
        !           708: 
        !           709: - Timer granularity is now 1/100s in the DHCPv6 client.
        !           710: 
        !           711: - The dhclient-script was updated to create a host route for the default
        !           712:   gateway if the supplied subnet mask for an IPv4 address was a /32.  This
        !           713:   allows the client to work in 'captive' network environments, where the
        !           714:   operator does not want clients to crosstalk directly.
        !           715: 
        !           716: - MINUS tokens should be parseable again.
        !           717: 
        !           718: - Multiple (up to "delayed-ack x;" maximum) DHCPv4 packets are now queued and
        !           719:   released in bursts after single fsync() events when the upper limit is
        !           720:   reached or if the receiving sockets go dry.  The practical upshot is
        !           721:   that fsync-coupled server performance is now multiplicitively increased.
        !           722:   The default delayed ack limit is 28.  Thanks entirely to a patch from
        !           723:   Christof Chen.
        !           724: 
        !           725:                        Changes since 4.0.0 (bug fixes)
        !           726: 
        !           727: - DHCP now builds on AIX.
        !           728: 
        !           729: - Exit with warning when DHCPv6-specific statements are used in the
        !           730:   config file but -6 is not specified.
        !           731: 
        !           732: - Fixed "--version" flag in dhcrelay
        !           733: 
        !           734: - The 'min-secs' configuration parameter's log message has been updated to
        !           735:   be more helpful.
        !           736: 
        !           737: - The warning logged when an address range doesn't fit in the subnets
        !           738:   they were declared has been updated to be more helpful and identify the
        !           739:   typo in configuration that created the spanning addresses.
        !           740: 
        !           741: - A bug in failover pool rebalancing that caused POOLREQ message ping-pongs
        !           742:   was repaired.
        !           743: 
        !           744: - A flaw in failover pool rebalancing that could cause POOLREQ messages to
        !           745:   be sent outside of the min-balance/max-balance scheduled intervals has
        !           746:   been repaired.
        !           747: 
        !           748: - A cosmetic bug during potential-conflict recovery that caused the peer's
        !           749:   'conflict-done' state message to be logged as 'unknown-state' has been
        !           750:   repaired.  It is now logged correctly.
        !           751: 
        !           752: - A bug was fixed where the 'giaddr' may be used to find the client's subnet
        !           753:   rather than its own 'ciaddr'.
        !           754: 
        !           755: - A log message was introduced to clarify the situation where a failover
        !           756:   'address' parameter (the server's local address) did not resolve to an
        !           757:   IPv4 address.
        !           758: 
        !           759: - The minimum site code value was set to 224 in 3.1.0 to track RFC3942.  This
        !           760:   broke a lot of legacy site local configurations.  The new code in place will
        !           761:   track site local space minimum option codes and logs a warning to encourage
        !           762:   updates and exploration of site local code migration problems.  Option
        !           763:   codes less than 128 in site local spaces remain inaccessible.
        !           764: 
        !           765: - A possible relay agent option bug was repaired where random server
        !           766:   initialization state may have been used to signal the relay agent
        !           767:   information options sub-option code for the 'END' of the option space.
        !           768: 
        !           769: - Fixes to allow code to compile and run on Solaris 9.
        !           770: 
        !           771: - Fixes to allow code to compile on Mac OS X Leopard (10.5).
        !           772: 
        !           773: - When server is configured with options that it overrides, a warning is
        !           774:   issued when the configuration file is read, rather than at the time the
        !           775:   option is overridden. This was important, because the warning was given
        !           776:   every time the option was overridden, which could create a lot of 
        !           777:   unnecessary logging.
        !           778: 
        !           779: - Fixed a compilation problems on platforms that define a value for FDDI,
        !           780:   which conflicts with a dhcp configuration syntax token by the same name.
        !           781: 
        !           782: - When a failover server suspects it has encountered a peer running a
        !           783:   version 3.0.x failover server, a warning that the failover wire protocol
        !           784:   is incompatible is printed.
        !           785: 
        !           786: - The failover server no longer issues a floating point error if it encounters
        !           787:   a previously undefined option code.
        !           788: 
        !           789: - Fix startup error messages to report a missing "subnet6 declaration", rather
        !           790:   than a missing "subnet declaration", when running as a DHCPv6 server.
        !           791: 
        !           792: - DHCPv6 client timestamp in DUID was based on the year 1970 rather 
        !           793:   than the year 2000.
        !           794: 
        !           795: - Warn when attempting to use a hardware parameter in DHCPv6.
        !           796: 
        !           797: - DHCPv6 released resources are now marked as released by the client.
        !           798: 
        !           799: - 'Soft' bindings have no more side-effects.
        !           800: 
        !           801:                        Changes since 4.0.0b3
        !           802: 
        !           803: - The reverse dns name for PTR updates on IPv6 addresses has been fixed to
        !           804:   use ip6.arpa. rather than default to in-addr.arpa and require user
        !           805:   configuration.
        !           806: 
        !           807: - dhc6_lease_destroy() and dhc6_ia_destroy() now set lease and IA pointers
        !           808:   to NULL after freeing, to prevent subsequent accesses to freed memory.
        !           809: 
        !           810: - The DHCPv6 server would not send the preference option unless the 
        !           811:   client requested it, via the ORO. This has been fixed, so the DHCPv6
        !           812:   server will always send the preference value if it is configured.
        !           813: 
        !           814: - When addresses were passed as hints to the server in an IA, they were 
        !           815:   incorrectly handled, sometimes being treated as an error. Now the 
        !           816:   server will treat these as hints and ignore them if it cannot supply
        !           817:   a requested address.
        !           818: 
        !           819: - If the client had multiple addresses, and one expired (was not renewed
        !           820:   by the server), the client would continue to attempt to renew the same
        !           821:   old address over and over.  Now, the client will omit any expired
        !           822:   addresses from future Confirm, Renew, or Rebind messages.
        !           823: 
        !           824: - dhclient -6 will now select renew/rebind timers based upon the longest
        !           825:   address expiration time rather than the shortest expiration time, in
        !           826:   order to avoid cascading renewals in the event a server elects not to
        !           827:   extend one of multiple IAADDR leases.
        !           828: 
        !           829: - The server now limits clients that request multiple addresses to one
        !           830:   address per IA by default, which can be adjusted through the
        !           831:   "limit-addrs-per-ia" configuration option.
        !           832: 
        !           833: - The DHCPv6 client now issues fresh transaction IDs on Renew and Rebind
        !           834:   message exchanges, rather than using the most recent ID.
        !           835: 
        !           836: - The DHCPv6 server now replies to Information-Request messages.
        !           837: 
        !           838: - A bug was fixed in the dhclient-script for BSDs to correctly carry error
        !           839:   codes through some conditions.
        !           840: 
        !           841: - The parsing of some options in the dhclient lease file, in particular
        !           842:   the success DHCPv6 status-code, was fixed.
        !           843: 
        !           844: - A bug was fixed that caused the DHCPv6 ORO option to be corrupted with
        !           845:   seemingly random values.
        !           846: 
        !           847: - A reference overleak in DHCPv6 shared network processing was repaired.
        !           848: 
        !           849: - ./configure now autodetects local database locations rather than trying
        !           850:   to put dhcpd.leases and dhclient.leases in /usr/local/var/db, which no
        !           851:   one ever has.
        !           852: 
        !           853: - Regression fix for bug where server advertised a IPv6 address in 
        !           854:   response to a SOLICIT but would not return the address in response 
        !           855:   to a REQUEST.
        !           856: 
        !           857: - A bug was fixed where the DHCPv6 server puts the NoAddrsAvail status
        !           858:   code in the IA_NA was fixed.  The status code now appears in the root
        !           859:   level.
        !           860: 
        !           861:                        Changes since 4.0.0b2
        !           862: 
        !           863: - Clarified error message when lease limit exceeded
        !           864: 
        !           865: - Relative time may now be used as a qualifier for 'allow' and 'deny' access
        !           866:   control lists.  These directives may be used to assist in re-addressing
        !           867:   address pools without having to constantly reconfigure the server.  Please
        !           868:   see 'man dhcpd.conf' for more information on allow/deny 'after time' syntax.
        !           869:   Thanks to a patch from Christof Chen.
        !           870: 
        !           871: - The server will now include multiple IA_NA's and multiple IAADDRs within
        !           872:   them, if advertised by the client.  It still only seeks to allocate one
        !           873:   new address.
        !           874: 
        !           875:                        Changes since 4.0.0b1
        !           876: 
        !           877: - Use different paths for PID and lease files when running in DHCPv4
        !           878:   or DHCPv6 mode, so that servers for both protcols can be run
        !           879:   simultaneously on a single interface.
        !           880: 
        !           881: - Fixed a buffer overflow error which could have allowed a denial
        !           882:   of service under unusual server configurations
        !           883: 
        !           884: - Eliminated a spurious error message from the client
        !           885: 
        !           886: - A number of bugs with the internal handling of lease state on the 
        !           887:   server have been fixed. Some of these could cause server crashes.
        !           888: 
        !           889: - The peer_wants_leases() changes pulled up from 3.1.0 were corrected,
        !           890:   'never used' leases will no longer consistently shift between servers
        !           891:   on every pool rebalance run.
        !           892: 
        !           893: - sendmsg()/recvmsg() control buffers are now declared in such a way to
        !           894:   ensure they are correctly aligned on all (esp. 64-bit) architectures.
        !           895: 
        !           896: - The client leasing subsystem was streamlined and corrected to account
        !           897:   more closely for changes in client link attachment selection.
        !           898: 
        !           899:                        Changes since 4.0.0a3
        !           900: 
        !           901: - The DHCP server no longer requires a "ddns-update-style" statement, 
        !           902:   and now defaults to "none", which means DNS updates are disabled.
        !           903: 
        !           904: - Log messages when failover peer names mismatch have been improved to
        !           905:   point out the problem.
        !           906: 
        !           907: - Bug where server advertised a IPv6 address in response to a SOLICIT 
        !           908:   but would not return the address in response to a REQUEST. Thanks to
        !           909:   Dennis Kou for finding the bug.
        !           910: 
        !           911: - Fixed an error causing the server to lock up on lease expiration,
        !           912:   reported independently by Jothilingam Vasu and Dennis Kou.
        !           913: 
        !           914: - Fixed a ./configure bug where compile tests were failing due to
        !           915:   "-Werror" (unused variable) rather than the actual test failure.  Lead
        !           916:   to inconsistent and unworkable auto-configurations.
        !           917: 
        !           918: - Compilation with DLPI and -Werror has been repaired.
        !           919: 
        !           920: - Error in decoding IA_NA option if multiple interfaces are present 
        !           921:   fixed by Marcus Goller.
        !           922: 
        !           923: - DHCPv6 server Confirm message processing has been enhanced - it no
        !           924:   longer replies only to clients with host {} records, it now replies
        !           925:   as directed in RFC3315 section 18.2.2 - that is, to all clients
        !           926:   regardless of the existence of bindings.
        !           927: 
        !           928: - A core dump during expired lease cleanup has been repaired.
        !           929: 
        !           930: - DDNS updates state information are now stored in 'binding scopes' that
        !           931:   follow the leases through their lifecycles.  This enables DDNS teardowns
        !           932:   on leases that are assigned and expired inbetween a server restart (the
        !           933:   state is recovered from dhcpd.leases).  Arbitrary user-specified binding
        !           934:   scopes ('set var = "value";') are not yet supported.
        !           935: 
        !           936: - Additional compilation problems on HP/UX have been repaired.
        !           937: 
        !           938:                        Changes since 4.0.0a2
        !           939: 
        !           940: - Fix for startup where there are no IPv4 addresses on an interface.
        !           941:   Thanks to Marcus Goller for reporting the bug.
        !           942: 
        !           943: - Fixed file descriptor leak on listen failure. Thanks to Tom Clark.
        !           944: 
        !           945: - Bug in server configuration parser caused server to get stuck on
        !           946:   startup for certain bad pool declarations. Thanks to Guillaume 
        !           947:   Knispel for the bug report and fix.
        !           948: 
        !           949: - Code cleaned to remove warnings reported by "gcc -Wall".
        !           950: 
        !           951: - DHCPv6 is now the default. You can disable DHCPv6 support using the
        !           952:   "--disable-dhcpv6" flag when you run the configure script.
        !           953: 
        !           954: - An internal database inconsistency bug was repaired where the server
        !           955:   would segfault if a client attempted to renew a lease that had been
        !           956:   loaded from persistent storage.
        !           957: 
        !           958: - 'request' and 'also request' syntaxes have been added to accommodate
        !           959:   the DHCPv6 client configuration.  'send dhcp6.oro' is no longer
        !           960:   necessary.
        !           961: 
        !           962: - Bug fixed where configuration file parsing did not work with 
        !           963:   zero-length options; this made it impossible to set the 
        !           964:   rapid-commit option.
        !           965: 
        !           966: - Bogus messages about host records with IPv4 fixed-addresses being of
        !           967:   non-128-bits in length were removed.
        !           968: 
        !           969:                        Changes since 4.0.0a1
        !           970: 
        !           971: - Bug in octal parsing fixed. Thanks to Bernd Fuhrmann for the report
        !           972:   and fix.
        !           973: 
        !           974: - Autoconf now supplies proper flags for Solaris DHCPv6 builds.
        !           975: 
        !           976: - Fix for parsing error on some IPv6 addresses.
        !           977: 
        !           978: - Invalid CIDR representation for IPv6 subnets or ranges now checked
        !           979:   for when loading configuration.
        !           980: 
        !           981: - Compilation on HP/UX has been repaired.  The changes should generally
        !           982:   apply to any architecture that supplies SIOCGLIFCONF but does not
        !           983:   use 'struct lifconf' structures to pass values.
        !           984: 
        !           985: - Two new operators, ~= and ~~, have been integrated to implement
        !           986:   boolean matches by regular expression (such as may be used in
        !           987:   class matching statements).  Thanks to a patch by Alexandr S.
        !           988:   Agranovsky, which underwent slight modification.
        !           989: 
        !           990: - Fix for icmp packets on 64-bit systems (bug introduced in 4.0).
        !           991: 
        !           992: - A bug was fixed in interface discovery wherein an error identifying
        !           993:   a server-configured interface with no IPv4 addresses would SEGV.
        !           994: 
        !           995: - Fixed a bug in which write_lease() might report a failure incorrectly
        !           996: 
        !           997: - Added support for DHCPv6 Release messages
        !           998: 
        !           999: - Added -x option to dhclient, which triggers dhclient processes
        !          1000:   to exit gracefully without releasing leases first
        !          1001: 
        !          1002: - All binaries (client, server, relay) now change directories
        !          1003:   to / before going into daemon mode, so as not to hold $CWD open
        !          1004: 
        !          1005: - Fixed a bug parsing DHCPv6 client-id's in host-identifier statements
        !          1006: 
        !          1007: - Fixed a bug with the 'ddns-updates' boolean server configuration
        !          1008:   parameter, which caused the server to fail.
        !          1009: 
        !          1010:                        Changes since 4.0.0-20070413
        !          1011: 
        !          1012: - Old (expired) leases are now cleaned.
        !          1013: 
        !          1014: - IPv6 subnets now have support for arbitrary allocation ranges via
        !          1015:   a new 'range6' configuration directive.
        !          1016: 
        !          1017: - An obviated option code hash lookup to find D6O_CLIENTID was removed.
        !          1018: 
        !          1019: - Corrected some situations where variables might be used without being
        !          1020:   initialized.
        !          1021: 
        !          1022: - Silenced several other compiler warnings.
        !          1023: 
        !          1024: - Include the more standard sys/uio.h rather than rely upon other
        !          1025:   header files to include it (fixes a BSD 4.2 compile failure).
        !          1026: 
        !          1027: - Duplicate dhclient-script updates for DHCPv6 to all provided scripts.
        !          1028: 
        !          1029: - DHCPv4 I/O methods that failed to sense hardware address were corrected.
        !          1030: 
        !          1031: - DHCPv4 is now the default (as documented) rather than DHCPv6.  The default
        !          1032:   was set to DHCPv6 to facilitate ease early development, and forgotten.
        !          1033: 
        !          1034: - Corrected a segmentation violation in DHCPv4 socket processing.
        !          1035: 
        !          1036: - dhclient will now fork() into the background once it binds to an
        !          1037:   IPv6 address, or immediately if the -n flag is supplied.
        !          1038: 
        !          1039: - -q is now the default behaviour on dhclient, with -d or -v enabling
        !          1040:   non-quiet (stderr logging) mode.
        !          1041: 
        !          1042: - Fix documentation of the domain-search atom (quoted, with commas).
        !          1043: 
        !          1044: - Document DHCPv6 options presently in the default table.
        !          1045: 
        !          1046: - Replaced ./configure shellscripting with GNU Autoconf.
        !          1047: 
        !          1048:                     Changes since 3.1.0 (NEW FEATURES)
        !          1049: 
        !          1050: - DHCPv6 Client and Server protocol support.  Use '-6' to run the daemons
        !          1051:   as v6-only.  Use '-4' to run the daemons as v4-only (default.  There is
        !          1052:   no support currently for both.
        !          1053: 
        !          1054: - Server support for multiple IA_NA options, containing at most one
        !          1055:   IAADDR option.
        !          1056: 
        !          1057: - Client support for one IA_NA option, containing any number of IAADDR
        !          1058:   options.
        !          1059: 
        !          1060: - Server support for the DHCPv6 Information-request message.
        !          1061: 
        !          1062: - Inappropriate unicast DHCPv6 messages sent to the server are now
        !          1063:   discarded, and this has rearchitected the IO system slightly.
        !          1064: 
        !          1065: - The DHCPv6 server DUID defaults to type 1, is persistently stored in
        !          1066:   the leases database, and can be over-ridden (either completely, or by
        !          1067:   specifying type 1 or type 2).
        !          1068: 
        !          1069: - The server only uses Rapid-Commit if it has been configured with the
        !          1070:   Rapid-Commit option and the client requests it.
        !          1071: 
        !          1072: - DDNS support. We now update AAAA records in the same place we would
        !          1073:   update A records, if we have an IPv6 address. We also generate IP6.ARPA
        !          1074:   style names for PTR records if we're dealing with an IPv6 address.  Both
        !          1075:   A and AAAA updates are done using the same 'fqdn.' virtual option space
        !          1076:   (although the DHCPv4 FQDN and DHCPv6 FQDN options are formatted
        !          1077:   differently, they both use the same code here).
        !          1078: 
        !          1079: - The Linux dhclient-script attempts to set and remove assigned addresses,
        !          1080:   and to configure /etc/resolv.conf from nameserver and domain name
        !          1081:   configurations.  It can be extended to configure other parameters.
        !          1082: 
        !          1083: - Initial DHCPv6 lease support.
        !          1084: 
        !          1085: - The IO system now tracks all local IP addresses, so that the DHCP
        !          1086:   applications (particularly the dhcrelay) can discern between what frames
        !          1087:   were transmitted to it, and what frames are being carried through it which
        !          1088:   it should not intercept.
        !          1089: 
        !          1090:                        Changes since 3.1.0 (Maintenance)
        !          1091: 
        !          1092: - A bug was repaired where MAC Address Affinity for virgin leases always
        !          1093:   mapped to the primary.  Virgin leases now have an interleaved preference
        !          1094:   between primary and secondary.
        !          1095: 
        !          1096: - A bug was repaired where MAC Address Affinity for clients with no client
        !          1097:   identifier was sometimes mishashed to the peer.  Load balancing during
        !          1098:   runtime and pool rebalancing were opposing.
        !          1099: 
        !          1100: - An assertion in lease counting relating to reserved leases was repaired.
        !          1101: 
        !          1102: - The subnet-mask option inclusion now conforms with RFC2132 section 3.3;
        !          1103:   it will only appear prior to the routers option if it is present on the
        !          1104:   Parameter-Request-List.  The subnet-mask option will also only be
        !          1105:   included by default (if it is not on the PRL) in response to DISCOVER
        !          1106:   or REQUEST messages.
        !          1107: 
        !          1108: - The FQDN option is only supplied if the client supplied an FQDN option or
        !          1109:   if the FQDN option was explicitly requested on the PRL.
        !          1110: 
        !          1111: - Dynamic BOOTP leases are now load balanced in failover.
        !          1112: 
        !          1113:                        Changes since 3.1.0rc1
        !          1114: 
        !          1115: - The parse warning that 'deny dyanmic bootp;' must be configured for
        !          1116:   failover protected subnets was removed.
        !          1117: 
        !          1118:                        Changes since 3.1.0b2
        !          1119: 
        !          1120: - Failover rebalance events no longer play ping pong with round errors
        !          1121:   (moving leases between free and back to backup where there are an
        !          1122:   odd number of leases).
        !          1123: 
        !          1124: - The 'pool' log line has been split into two messages, one before the
        !          1125:   rebalance run, and one after.
        !          1126: 
        !          1127: - Any queued BNDACKs are transmitted before transmitting new BNDUPDs.
        !          1128:   This enforces the correct sequence of events for the remote server
        !          1129:   processing these messages.
        !          1130: 
        !          1131:                        Changes since 3.1.0b1
        !          1132: 
        !          1133: - Fixed a bug that caused OMAPI clients to freeze when opening lease
        !          1134:   objects.
        !          1135: 
        !          1136: - A new server config option "fqdn-reply" specifies whether the server
        !          1137:   should send out option 81 (FQDN).  Defaults to "on".  If set to "off",
        !          1138:   the FQDN option is not sent, even if the client requested it.  This is
        !          1139:   needed because some clients misbehave otherwise.  Thanks to Christof Chen
        !          1140:   at Allianz.
        !          1141: 
        !          1142: - Allow trace output files (-tf option) to be overwritten, rather than
        !          1143:   crashing dhcpd if the file already exists
        !          1144: 
        !          1145: - A bug was fixed that caused dhcpd to segfault if a pool was declared
        !          1146:   outside the scope of a subnet in dhcpd.conf.
        !          1147: 
        !          1148: - Some uninitialized values were repaired in dhcpleasequery.c that
        !          1149:   caused the server to abort.
        !          1150: 
        !          1151: - A new server config option, 'do-reverse-updates', has been added
        !          1152:   which causes the server to abstain from performing updates on PTR
        !          1153:   records.  Thanks to a patch from Christof Chen at Allianz.
        !          1154: 
        !          1155: - A bug was repaired in subencapsulation support, where spaces separated
        !          1156:   by empty spaces would not get included.
        !          1157: 
        !          1158: - A bug in dhclient was repaired which caused it to send parameter request
        !          1159:   lists of 55 bytes in length no matter how long the declared PRL was.
        !          1160: 
        !          1161: - 'dhcp.c(3953): non-null pointer' has been repaired.  This fixes a flaw
        !          1162:   wherein the DHCPv4 server may ignore a configured server-identifier.
        !          1163: 
        !          1164: - A flaw in failover startup sequences was repaired that sometimes left
        !          1165:   the primary DHCP server's pool rebalance schedules unscheduled.
        !          1166: 
        !          1167: - Corrected a flaw that broke encapsulated spaces included due to presence
        !          1168:   on the parameter request list.
        !          1169: 
        !          1170:                        Changes since 3.1.0a3
        !          1171: 
        !          1172: - Some spelling fixes.
        !          1173: 
        !          1174:                        Changes since 3.1.0a2
        !          1175: 
        !          1176: - A bug was fixed where attempting to permit leasequeries results in a
        !          1177:   fatal internal error, "Unable to find server option 49".
        !          1178: 
        !          1179: - A bug was fixed in dhclient rendering the textual output form of the
        !          1180:   domain-search option syntax.
        !          1181: 
        !          1182:                        Changes since 3.1.0a1
        !          1183: 
        !          1184: - A bug in the FQDN universe that added FQDN codes to the NWIP universe's
        !          1185:   hash table was repaired.
        !          1186: 
        !          1187: - The servers now try harder to transmit pending binding updates when
        !          1188:   entering normal state.
        !          1189: 
        !          1190: - UPDREQ/UPDREQALL handling was optimized - it no longer dequeues and
        !          1191:   requeues all pending updates.  This should reduce the number of spurious
        !          1192:   'xid mismatch' log messages.
        !          1193: 
        !          1194: - An option definition referencing leak was fixed, which resulted in early
        !          1195:   termination of dhclient upon the renewal event.
        !          1196: 
        !          1197: - Some default hash table sizes were tweaked, some upwards, some downwards.
        !          1198:   3.1.0a1's tables resulted in a reduction in default server memory use.
        !          1199:   The new selected values provide more of a zero sum (increasing the size
        !          1200:   of tables likely to be populated, decreasing the size of tables unlikely).
        !          1201: 
        !          1202: - Lease structures appear in three separate hashes: by IP address, by UID,
        !          1203:   and by hardware address.  One type of table was used for all three, and
        !          1204:   improvements to IP address hashing were applied to all three (so UID and
        !          1205:   hardware addresses were treated like 4-byte integers).  There are now two
        !          1206:   types of tables, and the uid/hw hashes use functions more appropriate
        !          1207:   to their needs.
        !          1208: 
        !          1209: - The max-lease-misbalance percentage no longer causes scheduled rebalance
        !          1210:   runs to be skipped: it still governs the schedule, but every scheduled
        !          1211:   run will attempt balance.
        !          1212: 
        !          1213: - A segfault bug in recursive encapsulation support has been corrected.
        !          1214: 
        !          1215:                        Changes since 3.0 (New Features)
        !          1216: 
        !          1217: - A workaround for certain STSN servers that send a mangled domain-name
        !          1218:   option was introduced for dhclient.  The client will now accept corrupted
        !          1219:   server responses, if they contain a valid DHCP_MESSAGE_TYPE (OFFER, ACK,
        !          1220:   or NAK).  The server will continue to not accept corrupt client packets.
        !          1221: 
        !          1222: - Support for 'reserved' (pseudo-static) and BOOTP leases via failover
        !          1223:   was introduced.
        !          1224: 
        !          1225: - Support for adding, removing, and managing class and subclass statements
        !          1226:   via OMAPI.
        !          1227: 
        !          1228: - The failover implementation was updated to comply with revision 12 of
        !          1229:   the protocol draft.
        !          1230: 
        !          1231: - 'make install' now creates the initial zero-length dhcpd.leases file if
        !          1232:   one does not already exist on the system.
        !          1233: 
        !          1234: - RFC3942 compliance, site-local option spaces start at 224 now, not 128.
        !          1235: 
        !          1236: - The Load Balance Algorithm was misimplemented.  The current implementation
        !          1237:   matches RFC 3074.
        !          1238: 
        !          1239: - lcase() and ucase() configuration expressions have been added which adjust
        !          1240:   their arguments from upper to lower and lower to upper cases respectively.
        !          1241:   Thanks to a patch from Albert Herranz.
        !          1242: 
        !          1243: - The dhclient 'reject ...;' statement, which rejects leases given by named
        !          1244:   server-identifiers, now permits address ranges to be specified in CIDR
        !          1245:   notation.  Thanks to a patch from David Boyce.
        !          1246: 
        !          1247: - The subnet-mask option is now supplied by default, but at lowest
        !          1248:   priority.  This helps a small minority of clients that provide parameter
        !          1249:   request lists, but do not list the subnet-mask option because they were
        !          1250:   designed to interoperate with a server that behaves in this manner.
        !          1251: 
        !          1252: - The FQDN option is similarly supplied even if it does not appear on the
        !          1253:   parameter request list, but not to the exclusion of options that do
        !          1254:   appear at the parameter request list.  Up until now it had ultimate
        !          1255:   priority over the client's parameter request list.
        !          1256: 
        !          1257: - Varying option space code and length bit widths (8/16/32) are now
        !          1258:   supported.  This is a milestone in achieving RFC 3925 "VIVSO" and
        !          1259:   DHCPv6 support.
        !          1260: 
        !          1261: - A new common (server or client) option, 'db-time-format local;', has
        !          1262:   been added which prints the local time in /var/db/dhcpd.leases rather
        !          1263:   than UTC.  Thanks to a patch from Ken Lalonde.
        !          1264: 
        !          1265: - Some patches to improve DHCP Server startup speed from Andrew Matheson
        !          1266:   have been incorporated.
        !          1267: 
        !          1268: - Failover pairs now implement 'MAC Affinity' on leases moving from the
        !          1269:   active to free states.  Leases that belonged to the failover secondary
        !          1270:   are moved to BACKUP state rather than FREE upon exiting EXPIRED state.
        !          1271:   If lease rebalancing must move leases, it tries first to move leases
        !          1272:   that belong to the peer in need.
        !          1273: 
        !          1274: - The server no longer sends POOLREQ messages unless the pool is severely
        !          1275:   misbalanced in the peer's favor (see 'man dhcpd.conf' for more details).
        !          1276: 
        !          1277: - Pool rebalance events no longer happen upon successfully allocating a
        !          1278:   lease.  Instead, they happen on a schedule.  See 'man dhcpd.conf' for the
        !          1279:   min-balance and max-balance statements for more information.
        !          1280: 
        !          1281: - The DHCP Relay Agent Information Option / Link Selection Sub-Option
        !          1282:   is now supported.  (See RFC3527 for details).
        !          1283: 
        !          1284: - A new DDNS related server option, update-conflict-detection, has been
        !          1285:   added.  If this option is enabled, dhcpd will perform normal DHCID
        !          1286:   conflict resolution (the default).  If this option is disabled, it will
        !          1287:   instead trust the assigned name implicitly (removing any other bindings
        !          1288:   on that name).  This option has not been made available in dhclient.
        !          1289: 
        !          1290: - In those cases where the DHCP software manufactures an IP header (to
        !          1291:   transmit via bpf, lpf, etc), the IP TTL the software selects has been
        !          1292:   increased from 16 to 128.  This is intended to match Microsoft Windows
        !          1293:   DHCP Client behaviour, to increase compatibility.
        !          1294: 
        !          1295: - 'ignore client-updates;' now has behaviour that is different from
        !          1296:   'deny client-updates;'.  The client's request is not truly ignored,
        !          1297:   rather it is encouraged.  Should this value be configured, the server
        !          1298:   updates DNS as though client-updates were set to 'deny'.  That is, it
        !          1299:   enters into DNS whatever it is configured to do already, provided it is
        !          1300:   configured to.  Then it sends a response to the client that lets the
        !          1301:   client believe it is performing client updates (which it will), probably
        !          1302:   for a different name.  In essence, this lets the client do as it will,
        !          1303:   ignoring this aspect of their request.
        !          1304: 
        !          1305: - Support for compressed 'domain name list' style DHCP option contents, and
        !          1306:   in particular the domain search option (#119) was added.
        !          1307: 
        !          1308: - The DHCP LEASEQUERY protocol as defined in RFC4388 is now implemented.
        !          1309:   LEASEQUERY lets you query the DHCP server for information about a lease,
        !          1310:   using either an IP address, MAC address, or client identifier.  Thanks
        !          1311:   to a patch from Justin Haddad.
        !          1312: 
        !          1313: - DHCPD is now RFC2131 section 4.1 compliant (broadcast to all-ones ip and
        !          1314:   ethernet mac address) on the SCO platform specifically without any strange
        !          1315:   ifconfig hacks.  Many thanks go to the Kroger Co. for donating the
        !          1316:   hardware and funding the development.
        !          1317: 
        !          1318: - A new common configuration executable statement, execute(), has been
        !          1319:   added.  This permits dhcpd or dhclient to execute a named external
        !          1320:   program with command line arguments specified from other configuration
        !          1321:   language.  Thanks to a patch written by Mattias Ronnblom, gotten to us
        !          1322:   via Robin Breathe.
        !          1323: 
        !          1324: - A new dhcp server option 'adaptive-lease-time-threshold' has been added
        !          1325:   which causes the server to substantially reduce lease-times if there are
        !          1326:   few (configured percentage) remaining leases.  Thanks to a patch submitted
        !          1327:   from Christof Chen.
        !          1328: 
        !          1329: - Encapsulated option spaces within encapsulated option spaces is now
        !          1330:   formally supported.
        !          1331: 
        !          1332:                        Changes since 3.0.6rc1
        !          1333: 
        !          1334: - supersede_lease() now requeues leases in their respective hardware
        !          1335:   address hash bucket.  This mirrors client identifier behaviour.
        !          1336: 
        !          1337:                        Changes since 3.0.5
        !          1338: 
        !          1339: - Assorted fixes for broken network devices:  Packet length is now
        !          1340:   determined from the IP header length field to finally calculate the
        !          1341:   UDP payload length, because some NIC drivers return more data than
        !          1342:   they actually received.
        !          1343: 
        !          1344: - UDP packets are now stored in aligned data structures.
        !          1345: 
        !          1346: - A logic error in omapi interface code was repaired that might result in
        !          1347:   incorrectly indicating 'up' state when any flags were set, rather than
        !          1348:   specifically the INTERFACE_REQUESTED flag.  Thanks to a patch from
        !          1349:   Jochen Voss which got to us via Andrew Pollock at Debian.
        !          1350: 
        !          1351: - A reference leak on binding scopes set by ddns updates was repaired.
        !          1352: 
        !          1353: - A memory leak in the minires_nsendsigned() function call was repaired.
        !          1354:   Effectively, this leaked ~176 bytes per DDNS update.
        !          1355: 
        !          1356: - In the case where an "L2" DHCP Relay Agent (one that does not set giaddr)
        !          1357:   was directly attached to the same broadcast domain as the DHCP server,
        !          1358:   the RFC3046 relay agent information option was not being returned to the
        !          1359:   relay in the server's replies.  This was fixed; the dhcp server no longer
        !          1360:   requires the giaddr to reply with relay agent information.  Note that
        !          1361:   this also improves compatibility with L2 devices that "intercept" DHCP
        !          1362:   packets and expect relay agent information even in unicast (renewal)
        !          1363:   replies.  Thanks to a patch from Pekka Silvonen.
        !          1364: 
        !          1365: - A bug was fixed where the BOOTP header 'sname' field had a value, the
        !          1366:   copy written to persistent storage was actually the contents of the
        !          1367:   'file' field.
        !          1368: 
        !          1369: - A bug was fixed where the nwip virtual option space was referencing
        !          1370:   the fqdn option's virtual option space's option cache.
        !          1371: 
        !          1372: - Timestamp parsing errors that indicated missing "minutes" fields rather
        !          1373:   than the actually missing "seconds" fields have been repaired thanks to
        !          1374:   a patch from Kevin Steves.
        !          1375: 
        !          1376: - A grammar error in the dhclient.8 manpage was repaired thanks to a patch
        !          1377:   from Chris Wagner.
        !          1378: 
        !          1379: - Several spelling typos were repaired, and some cross-references to other
        !          1380:   relevant documents were included in the manpages, thanks to a patch
        !          1381:   by Andrew Pollock which got to us via Tomas Pospisek.
        !          1382: 
        !          1383: - Some bugs were fixed in the 'emergency relay agent options hologram'
        !          1384:   which is used to retain relay agent option contents from when the
        !          1385:   client was in INIT or REBIND states.  This should solve problems where
        !          1386:   relay agent options were not echoed from the server, even when giaddr
        !          1387:   was set.
        !          1388: 
        !          1389: - dhclient now closes its descriptor to dhclient.leases prior to executing
        !          1390:   dhclient-script.  Thanks to a patch from Tomas Pospisek.
        !          1391: 
        !          1392: - The server's "by client-id" and "by hardware address" hash table lists
        !          1393:   are now sorted according to the preference to re-allocate that lease to
        !          1394:   returning clients.  This should eliminate pool starvation problems
        !          1395:   arising when "INIT" clients were given new leases rather than presently
        !          1396:   active ones.
        !          1397: 
        !          1398:                        Changes since 3.0.5rc1
        !          1399: 
        !          1400: - A bug was repaired in fixes to the dhclient, which sought to run the
        !          1401:   dhclient-script with the 'EXPIRE' state should it receive a NAK in
        !          1402:   response to a REQUEST.  The client now iterates the PREINIT state
        !          1403:   after the EXPIRE state, so that interfaces that might be configured
        !          1404:   'down' can be brought back 'up' and initialized.
        !          1405: 
        !          1406: - DHCPINFORM handling for clients that properly set ciaddr and come to the
        !          1407:   server via a relay aget has been repaired.
        !          1408: 
        !          1409:                        Changes since 3.0.4
        !          1410: 
        !          1411: - A warning that host statements declared within subnet or shared-network
        !          1412:   scopes are actually global has been added.
        !          1413: 
        !          1414: - The default minimum lease time (if min-lease-time was not specified)
        !          1415:   was raised from 0 to 300.  0 is not thought to be sensible, and is
        !          1416:   known to be damaging.
        !          1417: 
        !          1418: - Added additional fatal error sanity checks surrounding lease binding
        !          1419:   state count calculations (free/active counts used for failover pool
        !          1420:   balancing).
        !          1421: 
        !          1422: - Some time value size fixes in 3.0.4 brought on from FreeBSD /usr/ports were
        !          1423:   misapplied to server values rather than client values.  The server no longer
        !          1424:   advertises 8-byte lease-time options when on 64-bit platforms.
        !          1425: 
        !          1426: - A bug where leases not in ACTIVE state would get billed to billed classes
        !          1427:   (classes with lease limitations) was fixed.  Non-active leases OFFERed
        !          1428:   to clients are no longer billed (but billing is checked before offering).
        !          1429: 
        !          1430: - The dhcpd.conf.5 manpage was updated in regard to the ddns-domainname
        !          1431:   configuration option - the default configuration and results should be
        !          1432:   more clear now.
        !          1433: 
        !          1434: - If the dhclient were to receive a DHCPNAK while it was in the RENEW
        !          1435:   state (and consequently, had an active, 'bound' address and related
        !          1436:   configuration options), it would fail to 'tear down' this information
        !          1437:   before proceeding into INIT state.  dhclient now iterates the dhclient-
        !          1438:   script with the 'EXPIRE' action to cause these teardowns prior to entering
        !          1439:   INIT state.  Thanks to a patch from Chris Zimmerman.
        !          1440: 
        !          1441: - The omapi.1 manpage had some formatting errors repaired thanks to a patch
        !          1442:   from Yoshihiko Sarumaru.
        !          1443: 
        !          1444: - A few lines of code that were failover-specific were moved within
        !          1445:   #if defined() clauses so that compilation without failover could be
        !          1446:   made possible.
        !          1447: 
        !          1448: - The log message emitted when the 'leased-address' value was not available
        !          1449:   in dhcpd.conf "executable statements" has been updated to be more helpful.
        !          1450:   Manpage information for this value has also been updated.
        !          1451: 
        !          1452: - Abandoned or dissociated (err condition) leases now remove any related
        !          1453:   dynamic dns bindings.  Thanks to a patch from Patrick Schoo.
        !          1454: 
        !          1455: - Attempting to write a new lease file to replace a corrupt (due to
        !          1456:   encountering non-retryable errors during writing) lease file should
        !          1457:   no longer result in an infinite recursion.
        !          1458: 
        !          1459: - Host declaration hardware addresses and client identifiers may only be
        !          1460:   configured once.  dhcpd will now fail to load config files that specify
        !          1461:   multiple identifiers (previous versions would silently over-ride the
        !          1462:   value with the later configured value).
        !          1463: 
        !          1464: - Several option codes that have been allocated since our last release
        !          1465:   have been named and documented.
        !          1466: 
        !          1467: - Option names of the form "unknown-123" have been removed from the in-
        !          1468:   memory hash tables.  In order to support options of these names that
        !          1469:   may appear in dhclient.leases or similar in previous versions, the
        !          1470:   parser will now find the new option code definition, or mock up a
        !          1471:   generic option code definition.  This should result in a smooth
        !          1472:   transition from one name to the other, as the new name is used to
        !          1473:   write new output.
        !          1474: 
        !          1475:                        Changes since 3.0.4rc1
        !          1476: 
        !          1477: - The dhcp-options.5 manpage was updated to correct indentation errors
        !          1478:   thanks to a patch from Jean Delvare.
        !          1479: 
        !          1480:                        Changes since 3.0.4b3
        !          1481: 
        !          1482: - Some manual pages were clarified pursuant to discussion on the dhcp-server
        !          1483:   mailing list.
        !          1484: 
        !          1485:                        Changes since 3.0.4b2
        !          1486: 
        !          1487: - Null-termination sensing for certain clients that unfortunately require
        !          1488:   it in DHCPINFORM processing was repaired.
        !          1489: 
        !          1490: - The host-name option and a few others were moved from "X" format to "t"
        !          1491:   format to be compatible with new NULL handling functions.
        !          1492: 
        !          1493: - DHCPINFORM processing is a little more careful about return addressing
        !          1494:   its responses, or if responding via a relay.  The INFORM related
        !          1495:   messages also log the 'effective client ip address' rather than the
        !          1496:   client's supplied ciaddr (since some clients produce null ciaddrs).
        !          1497: 
        !          1498: - The server was inappropriately sending leases to the RESET state in the
        !          1499:   event that multiple active leases were found to match a singly-identified
        !          1500:   client.  This was changed to RELEASED (by accepting a different, ACTIVE
        !          1501:   binding, the client is implicitly releasing its lease).  This repairs a
        !          1502:   bug wherein secondary servers in failover pairs detecting this condition
        !          1503:   move leases to RESET, and primaries refuse to accept that state
        !          1504:   transition (properly).
        !          1505: 
        !          1506: - The memset-after-dmalloc() changes made in 3.0.4b1 have been backed out.
        !          1507: 
        !          1508:                        Changes since 3.0.4b1
        !          1509: 
        !          1510: - Command line parsing in omshell was repaired - it no longer closes
        !          1511:   STDIN after reading one line.
        !          1512: 
        !          1513: - The resolver library no longer closes the /etc/resolv.conf file
        !          1514:   descriptor it opened twice.
        !          1515: 
        !          1516: - Changes to trailing NULL removal in 't' option-atoms has been rethought,
        !          1517:   it now includes 'd' (domain name) types, and tries hard not to rewind an
        !          1518:   option beyond the start of the text field it is un-terminating.
        !          1519: 
        !          1520:                        Changes since 3.0.3
        !          1521: 
        !          1522: - A DDNS update handling function was misusing the DNS error codes, rather
        !          1523:   than the internal generic result enumeration.  The result is a confusing
        !          1524:   syslog line, logging the wrong condition.
        !          1525: 
        !          1526: - The DHCP Server was not checking pool balance in the case where it brought
        !          1527:   a non-ACTIVE lease out of storage for a client that was returning to use
        !          1528:   a lease it once had long ago, and had since expired.
        !          1529: 
        !          1530: - Failover peers no longer bother to look for free leases to allocate when
        !          1531:   they already found the client's ACTIVE lease.  DISCOVERs are load balanced
        !          1532:   whether freely-allocated or not, unless the server doubts the peer has
        !          1533:   leases to allocate.
        !          1534: 
        !          1535: - Fixed a bug in dhcrelay agent addition code that suppressed trailing
        !          1536:   PAD options - it was suppressing only one trailing PAD option, rather
        !          1537:   than the entire block of them.
        !          1538: 
        !          1539: ! Fixed some unlikely overlapping-region memcpy() bugs in dhcrelay agent
        !          1540:   option addition and stripping code.  Added a few sanity checks.  Although
        !          1541:   highly improbable, due to requiring the reception of a DHCP datagram well
        !          1542:   in excess of all known to be used physical MTU limitations, it is possible
        !          1543:   this may have been used in a stack overflow security vulnerability.  Thanks
        !          1544:   to a patch from infamous42md.
        !          1545: 
        !          1546: ! Added some sanity checks to OMAPI connection/authentication code.
        !          1547:   Although highly improbable, due to having to deliver in excess of 2^32
        !          1548:   bytes of data via the OMAPI channel, not to mention requiring dhcpd to
        !          1549:   be able to malloc() a memory region 2^32 bytes in size, it was possible
        !          1550:   this might have resulted in a heap overflow security vulnerability.
        !          1551:   Thanks to a patch from infamous42md.
        !          1552: 
        !          1553: - dmalloc() memset()'s the non-debug (data) portion of the allocated
        !          1554:   memory to zero.  Code that memset()'s the result returned by dmalloc() to
        !          1555:   zero is redundant.  These redundancies were removed.
        !          1556: 
        !          1557: - Some type declaration corrections to u_int16_t were made in common/tr.c
        !          1558:   (Token Ring support) thanks to a patch from Jason Vas Dias at Red Hat.
        !          1559: 
        !          1560: - A failover bug that was allowing leases that EXPIRED or were RELEASED
        !          1561:   where tsfp and tstp are identical timestamps to languish in these
        !          1562:   transitional states has been repaired.  As a side effect, lease
        !          1563:   databases should be kept more consistent overall, not just for these
        !          1564:   transitional states.
        !          1565: 
        !          1566: - If the lease db is deleted out from under the daemon, and it moves to rewrite
        !          1567:   the db, it will go ahead with the operation and move the new db into place
        !          1568:   once it detects the old db does not exist.
        !          1569: 
        !          1570: - dhclient now ignores IRDA, SIT, and IEEE1394 network interfaces, as it
        !          1571:   is either nonsensical or (in the case of IEEE1394) is not known to support
        !          1572:   these interfaces.  Thanks to Marius Gedminas and Andrew Pollock of Debian.
        !          1573: 
        !          1574: - Some previously undocumented reasons for dhclient-script invoking has
        !          1575:   been documented in the dhclient-script.8 manpage.
        !          1576: 
        !          1577: - Failover potential expiry calculations (TSTP) have been corrected.  Results
        !          1578:   should be substantially more consistent, and proper given the constraints.
        !          1579: 
        !          1580: - Adjusted lease state validation checks in potential-conflict, to
        !          1581:   account for possible clock skew similarly to normal state, and several
        !          1582:   previously illegal transitions were made legal (ex: active->released).
        !          1583: 
        !          1584: - An impossible sanity check was removed from omapi/buffer.c, thanks to a
        !          1585:   patch from 'infamous42md'.
        !          1586: 
        !          1587: - An OMAPI host/network byte order problem in lease time values has been
        !          1588:   repaired.
        !          1589: 
        !          1590: - Several minor bugs, largely relating to treating 8-byte time values as
        !          1591:   4-byte entities, have been repaired after careful review of the FreeBSD
        !          1592:   ports collection's patch set.  Thanks to the nameless entities who have
        !          1593:   contributed to the FreeBSD ports.
        !          1594: 
        !          1595: - When writing a trace file, the file is now created with permissions 0600,
        !          1596:   to help administrators avoid accidentally publicising sensitive config
        !          1597:   data.
        !          1598: 
        !          1599: - The calculation of the maximum size of DHCP packets no longer includes
        !          1600:   Ethernet framing overhead.  The result is that the 'Maximum Message
        !          1601:   Size' option advertised by clients, or the default value 576, is no
        !          1602:   longer reduced by 14 bytes, and instead directly reflects the IP level
        !          1603:   MTU (and the default, minimum allowed IP MTU of 576).
        !          1604: 
        !          1605: - The special status of RELEASED/EXPIRED/RESET leases when a server
        !          1606:   is operating in partner-down was fixed.  It no longer requires a
        !          1607:   lease be twice the MCLT beyond STOS to 'reallocate', and the expiry
        !          1608:   event to turn these into FREE leases without peer acknowledgement
        !          1609:   (after STOS+MCLT) has been repaired.
        !          1610: 
        !          1611: - Compilation on older Solaris systems (lacking /usr/include/sys/int_types.h)
        !          1612:   has been repaired.
        !          1613: 
        !          1614: - "append"ing a string onto the end of a "t" type option (such as the
        !          1615:   domain-name field) that had been improperly NULL-terminated by the
        !          1616:   DHCP server will no longer result in a truncated string containing
        !          1617:   only the option from the server, and not the expected appended value.
        !          1618:   Thanks to a patch from Jason Vas Dias at Red Hat.
        !          1619: 
        !          1620: - File handlers on configuration state (config files and lease dbs) should
        !          1621:   be treated consistently, regardless of whether TRACING is defined or not.
        !          1622: 
        !          1623: - The Linux build environment has had some minor improvements - better
        !          1624:   sensing of 64-bit pointer sizes (only used for establishing an icmp_id),
        !          1625:   and corrections to #if operators regarding LINUX_MAJOR should it ever
        !          1626:   move to 3.[01].x.
        !          1627: 
        !          1628: - The server now tries harder to survive the condition where it is unable
        !          1629:   to open a new lease file to rewrite the lease state database.
        !          1630: 
        !          1631:                        Changes since 3.0.3b3
        !          1632: 
        !          1633: - dhclient.conf documentation for interface {} was updated to reflect recent
        !          1634:   discussion on the dhcp-hackers mailing list.
        !          1635: 
        !          1636: - In response to reports that the software does not compile on GCC 4.0.0,
        !          1637:   -Werror was removed from Makefile.conf for all platforms that used it.
        !          1638:   We will address the true problem in a future release; this is a temporary
        !          1639:   workaround.
        !          1640: 
        !          1641:                        Changes since 3.0.3b2
        !          1642: 
        !          1643: - An error in code changes introduced in 3.0.3b2 was corrected, which caused
        !          1644:   static BOOTP clients to receive random addresses.
        !          1645: 
        !          1646:                        Changes since 3.0.3b1
        !          1647: 
        !          1648: - A bug was fixed in BOOTPREQUEST handling code wherein stale references to
        !          1649:   host records would be left behind on leases that were not allocated to the
        !          1650:   client currently booting (eg in the case where the host was denied booting).
        !          1651: 
        !          1652: - The dhcpd.conf.5 manpage was updated to be more clear in regards to
        !          1653:   multiple host declarations (thanks to Vincent McIntyre).  'Interim' style
        !          1654:   dynamic updates were also retouched.
        !          1655: 
        !          1656:                        Changes since 3.0.2
        !          1657: 
        !          1658: - A bug was fixed where a server might load balance a DHCP REQUEST to its
        !          1659:   peer after already choosing not to load balance the preceding DISCOVER.
        !          1660:   The peer cannot allocate the originating server's lease.
        !          1661: 
        !          1662: - In the case where a secondary server lost its stable storage while the
        !          1663:   primary was still in communications-interrupted, and came back online,
        !          1664:   the lease databases would not be fully transferred to the secondary.
        !          1665:   This was due to the secondary errantly sending an extra UPDREQ message
        !          1666:   when the primary made its state transition to PARTNER-DOWN known.
        !          1667: 
        !          1668: - The package will now compile cleanly in gcc 3.3 and 3.4.  As a side effect,
        !          1669:   lease structures will be 9 bytes smaller on all platforms.  Thanks to
        !          1670:   Jason Vas Dias at Red Hat.
        !          1671: 
        !          1672: - Interface discovery code in DISCOVER_UNCONFIGURED mode is now
        !          1673:   properly restricted to only detecting broadcast interfaces.  Thanks
        !          1674:   to a patch from Jason Vas Dias at Red Hat.
        !          1675: 
        !          1676: - decode_udp_ip_header was changed so that the IP address was copied out
        !          1677:   to a variable, rather than referenced by a pointer.  This enforces 4-byte
        !          1678:   alignment of the 32-bit IP address value.  Thanks to a patch from Dr.
        !          1679:   Peter Poeml.
        !          1680: 
        !          1681: - An incorrect log message was corrected thanks to a patch from
        !          1682:   Dr. Peter Poeml.
        !          1683: 
        !          1684: - A bug in DDNS was repaired, where if the server's first DDNS action was
        !          1685:   a DDNS removal rather than a DDNS update, the resolver library's
        !          1686:   retransmit timer and retry timer was set to the default, implying a
        !          1687:   15 second timeout interval.  Which is a little excessive in a synchronous,
        !          1688:   single-threaded system.  In all cases, ISC DHCP should now hold fast to
        !          1689:   a 1-second timeout, trying only once.
        !          1690: 
        !          1691: - The siaddr field was being improperly set to the server-identifier when
        !          1692:   responding to DHCP messages.  RFC2131 clarified the siaddr field as
        !          1693:   meaning the 'next server in the bootstrap process', eg a tftp server.
        !          1694:   The siaddr field is now left zeroed unless next-server is configured.
        !          1695: 
        !          1696: - mockup_lease() could have returned in an error condition (or in the
        !          1697:   condition where no fixed-address was found matching the shared
        !          1698:   network) with stale references to a host record.  This is probably not
        !          1699:   a memory leak since host records generally never die anyway.
        !          1700: 
        !          1701: - A bug was repaired where failover servers would let stale client identifiers
        !          1702:   persist on leases that were reallocated to new clients not sending an id.
        !          1703: 
        !          1704: - Binding scopes ("set var = value;") are now removed from leases allocated
        !          1705:   by failover peers if the lease had expired.  This should help reduce the
        !          1706:   number of stale binding scopes on leases.
        !          1707: 
        !          1708: - A small memory leak was closed involving client identifiers larger than
        !          1709:   7 bytes, and failover.
        !          1710: 
        !          1711: - Configuring a subnet in dhcpd.conf with a subnet mask of 32 bits might
        !          1712:   cause an internal function to overflow heap.  Thanks to Jason Vas Dias
        !          1713:   at Red Hat.
        !          1714: 
        !          1715: - Some inconsistencies in treating numbers that the lexer parsed as 'NUMBER'
        !          1716:   or 'NUMBER_OR_NAME' was repaired.  Hexadecimal parsing is affected, and
        !          1717:   should work better.
        !          1718: 
        !          1719: - In several cases, parse warnings were being issued before the lexical
        !          1720:   token had been advanced to the token whose value was causing an error...
        !          1721:   causing parse warnings to claim the problem is on the wrong token.
        !          1722: 
        !          1723: - Host declarations matching on client identifier for dynamic leases will
        !          1724:   no longer match fixed-address host declarations (this is now identical
        !          1725:   to behaviour for host records matching on hardware address).
        !          1726: 
        !          1727:                        Changes since 3.0.2rc3
        !          1728: 
        !          1729: - A previously undocumented configuration directive, 'local-address',
        !          1730:   was documented in the dhcpd.conf manpage.
        !          1731: 
        !          1732:                        Changes since 3.0.2rc2
        !          1733: 
        !          1734: - Two variables introduced in 3.0.2b1 were used without being initialized
        !          1735:   in the case where neither the FILE nor SNAME fields were available for
        !          1736:   overloading.  This was repaired.
        !          1737: 
        !          1738: - A heretofore believed to be impossible corner case of the option
        !          1739:   overloading implementation turned out to be possible ("Unable to sort
        !          1740:   overloaded options after 10 tries.").  The implementation was reworked
        !          1741:   to consider the case of an option so large it would require more than
        !          1742:   three chunks to fit.
        !          1743: 
        !          1744: - Many other instances of variables being used without being initialized
        !          1745:   were repaired.
        !          1746: 
        !          1747: - An uninitialized variable in omapi_io_destroy() led to the discovery
        !          1748:   that this function may result in orphaned pointers (and hence, a memory
        !          1749:   leak).
        !          1750: 
        !          1751:                        Changes since 3.0.2rc1
        !          1752: 
        !          1753: - allocate_lease() was rewritten to repair a bug in which the server would
        !          1754:   try to allocate an ABANDONED lease when FREE leases were available.
        !          1755: 
        !          1756:                        Changes since 3.0.2b1
        !          1757: 
        !          1758: - Some dhcp-eval.5 manpage formatting was repaired.
        !          1759: 
        !          1760:                        Changes since 3.0.1
        !          1761: 
        !          1762: - A bug was fixed in the server's 'option overloading' implementation,
        !          1763:   where options loaded into the 'file' and 'sname' packet fields were
        !          1764:   not aligned precisely as rfc2131 dictates.
        !          1765: 
        !          1766: - The FreeBSD client script was changed to support the case where a domain
        !          1767:   name was not provided by the server.
        !          1768: 
        !          1769: - A memory leak in 'omshell' per each command line parsed was
        !          1770:   repaired, thanks to a patch from Jarkko Torppa.
        !          1771: 
        !          1772: - Log functions writing to stderr were adjusted to use the STDERR_FILENO
        !          1773:   system definition rather than '2'.  This is a no-op for 90% of platforms.
        !          1774: 
        !          1775: - One call to trace_write_packet_iov() counted the number of io vectors
        !          1776:   incorrectly, causing inconsistent tracefiles.  This was fixed.
        !          1777: 
        !          1778: - Some expression parse failure memory leaks were closed.
        !          1779: 
        !          1780: - A host byte order problem in tracefiles was repaired.
        !          1781: 
        !          1782: - Pools configured in DHCPD for failover possessing permission lists that
        !          1783:   previously were assumed to not include dyanmic bootp clients are now
        !          1784:   a little more pessimistic.  The result is, dhcpd will nag you about just
        !          1785:   about most pools that possess a 'allow' statement with no 'deny' that
        !          1786:   would definitely match a dynamic bootp client.
        !          1787: 
        !          1788: - The 'ddns-update-style' configuration warning bit now insists that
        !          1789:   the configuration be globally scoped.
        !          1790: 
        !          1791: - Two memory leaks in dhclient were closed thanks to a patch from Felix
        !          1792:   Farkas.
        !          1793: 
        !          1794: - Some minor but excellently pedantic documentation errors were fixed
        !          1795:   thanks to a patch from Thomas Klausner.
        !          1796: 
        !          1797: - Bugs in operator precedence in executable statements have been repaired
        !          1798:   once again.  More legal syntaxes should be parsed legally.
        !          1799: 
        !          1800: - Failing to initialize a tracefile for any reason if a tracefile was
        !          1801:   specified is now a fatal error.  Thanks to a patch from Albert Herranz.
        !          1802: 
        !          1803: - Corrected a bug in which the number of leases transferred as calculated
        !          1804:   by the failover primary and sent to peers in POOLRESP responses may be
        !          1805:   incorrect.  This value is not believed to be used by other failover
        !          1806:   implementations, excepting perhaps as logged information.
        !          1807: 
        !          1808: - Corrected a bug in which 'dhcp_failover_send_poolresp()' was in fact
        !          1809:   sending POOLREQ messages instead of POOLRESP mesasges.  This message
        !          1810:   was essentially ignored since failover secondaries effectively do not
        !          1811:   respond to POOLREQ messages.
        !          1812: 
        !          1813: - Type definitions for various bitwidths of integers in the sunos5-5
        !          1814:   build of ISC DHCP have been fixed.  It should compile and run more
        !          1815:   easily when built in 64-bit for this platform.
        !          1816: 
        !          1817: - "allow known-clients;" is now a legal syntax, to avoid confusion.
        !          1818: 
        !          1819: - If one dhcp server chooses to 'load balance' a request to its failover
        !          1820:   peer, it first checks to see if it believes said peer has a free
        !          1821:   lease to allocate before ignoring the DISCOVER.
        !          1822: 
        !          1823: - log() was logging a work buffer, rather than the value returned by
        !          1824:   executing the statements configured by the user.  In some cases,
        !          1825:   the work buffer and the intended results were the same.  In some other
        !          1826:   cases, they were not.  This was fixed thanks to a patch from Gunnar
        !          1827:   Fjone and directconnect.no.
        !          1828: 
        !          1829: - Compiler warnings for some string type conversions was fixed, thanks
        !          1830:   to Andreas Gustafsson.
        !          1831: 
        !          1832: - The netbsd build environments were simplified to one, in which
        !          1833:   -Wconversion is not used, thanks to Andreas Gustafsson.
        !          1834: 
        !          1835: - How randomness in the backoff-cutoff dhclient configuration variable
        !          1836:   is implemented was better documented in the manpage, and the behaviour
        !          1837:   of dhclient in REQUEST timeout handling was changed to match that of
        !          1838:   DISCOVER timeout handling.
        !          1839: 
        !          1840: - Omapi was hardened against clients that pass in null values, thanks
        !          1841:   to a patch from Mark Jason Dominus.
        !          1842: 
        !          1843: - A bug was fixed in dhclient that kept it from doing client-side
        !          1844:   ddns updates.  Thanks to a patch from Andreas Gustafsson, which
        !          1845:   underwent some modification after review by Jason Vas Dias.
        !          1846: 
        !          1847: - Failover implementations disconnected due to the network between
        !          1848:   them (rather than one of the two shutting down) will now try to
        !          1849:   re-establish the failover connection every 5 seconds, rather than
        !          1850:   to simply try once and give up until one of them is restarted.
        !          1851:   Thanks to a patch from Ulf Ekberg from Infoblox, and field testing
        !          1852:   by Greger V. Teigre which led to an enhancement to it.
        !          1853: 
        !          1854: - A problem that kept DHCP Failover secondaries from tearing down
        !          1855:   ddns records was repaired.  Thanks to a patch from Ulf Ekberg from
        !          1856:   Infoblox.
        !          1857: 
        !          1858: - 64bit pointer sizes are detected properly on FreeBSD now.
        !          1859: 
        !          1860: - A bug was repaired where the DHCP server would leave stale references
        !          1861:   to host records on leases it once thought about offering to certain
        !          1862:   clients.  The result would be to apply host and 'known' scopes to the
        !          1863:   wrong clients (possibly denying booting).  NOTE:  The 'mis-host' patch
        !          1864:   that was being circulated as a workaround is not the way this bug was
        !          1865:   fixed.  If you were a victim of this bug in 3.0.1, you are cautioned
        !          1866:   to proceed carefully and see if it fixes your problem.
        !          1867: 
        !          1868: - A bug was repaired in the server's DHCPINFORM handling, where it
        !          1869:   tried to divine the client's address from the source packet and
        !          1870:   would get it wrong.  Thanks to Anshuman Singh Rawat.
        !          1871: 
        !          1872: - A log message was introduced to help illuminate the case where the
        !          1873:   server was unable to find a lease to assign to any BOOTP client.
        !          1874:   Thanks to Daniel Baker.
        !          1875: 
        !          1876: - A minor dhcpd.conf.5 manpage error was fixed.
        !          1877: 
        !          1878:                        Changes since 3.0.1rc14
        !          1879: 
        !          1880: - The global variable 'cur_time' was centralized and is now uniformly of a
        !          1881:   type #defined in system-dependent headers.  It had previously been defined
        !          1882:   in one of many places as a 32-bit value, and this causes mayhem on 64-bit
        !          1883:   big endian systems.  It probably wasn't too healthy on little endian
        !          1884:   systems either.
        !          1885: 
        !          1886: - A printf format string error introduced in rc14 was repaired.
        !          1887: 
        !          1888: - AIX system-dependent header file was altered to only define NO_SNPRINTF
        !          1889:   if the condition used to #ifdef in vsnprintf in AIX' header files
        !          1890:   is false.
        !          1891: 
        !          1892: - The Alpha/OSF system-dependent header file was altered to define
        !          1893:   NO_SNPRINTF on OS revisions older than 4.0G.
        !          1894: 
        !          1895: - omapip/test.c had string.h added to its includes.
        !          1896: 
        !          1897:                        Changes since 3.0.1rc13
        !          1898: 
        !          1899: ! CAN-2004-0460 - CERT VU#317350: Five stack overflow exploits were closed
        !          1900:   in logging messages with excessively long hostnames provided by the
        !          1901:   clients.  It is highly probable that these could have been used by
        !          1902:   attackers to gain arbitrary root access on systems using ISC DHCP 3.0.1
        !          1903:   release candidates 12 or 13.  Special thanks to Gregory Duchemin for
        !          1904:   both finding and solving the problem.
        !          1905: 
        !          1906: ! CAN-2004-0461 - CERT VU#654390: Once the above was closed, an opening
        !          1907:   in log_*() functions was evidenced, on some specific platforms where
        !          1908:   vsnprintf() was not believed to be available and calls were wrapped to
        !          1909:   sprintf() instead.  Again, credit goes to Gregory Duchemin for finding
        !          1910:   the problem.  Calls to snprintf() are now linked to a distribution-local
        !          1911:   snprintf implementation, only in those cases where the architecture is
        !          1912:   not known to provide one (see includes/cf/[arch].h).  If you experience
        !          1913:   linking problems with snprintf/vsnprintf or 'isc_print_' functions, this
        !          1914:   is where to look.  This vulnerability did not exist in any previously
        !          1915:   published version of ISC DHCP.
        !          1916: 
        !          1917: - Compilation on hpux 11.11 was repaired.
        !          1918: 
        !          1919: - 'The cross-compile bug fix' was backed out.
        !          1920: 
        !          1921:                        Changes since 3.0.1rc12
        !          1922: 
        !          1923: - Fixed a bug in omapi lease lookup function, to form the hardware
        !          1924:   address for the hash lookup correctly, thanks to a patch from
        !          1925:   Richard Hirst.
        !          1926: 
        !          1927: - Fixed a bug where dhcrelay was sending relayed responses back to the
        !          1928:   broadcast address, but with the source's unicast mac address.  Should
        !          1929:   now conform to rfc2131 section 4.1.
        !          1930: 
        !          1931: - Cross-compile bug fix; use $(AR) instead of ar.  Thanks to Morten Brorup.
        !          1932: 
        !          1933: - Fixed a crash bug in dhclient where dhcpd servers that do not provide
        !          1934:   renewal times results in an FPE.  As a side effect, dhclient can now
        !          1935:   properly handle 0xFFFFFFFF (-1) expiry times supplied by servers.  Thanks
        !          1936:   to a patch from Burt Silverman.
        !          1937: 
        !          1938: - The 'ping timeout' debugs from rc12 were removed to -DDEBUG only,
        !          1939:   and reformatted to correct a compilation error on Solaris platforms.
        !          1940: 
        !          1941: - A patch was applied which fixes a case where leases read from the
        !          1942:   leases database do not properly over-ride previously read leases.
        !          1943: 
        !          1944: - dhcpctl.3 manpage was tweaked.
        !          1945: 
        !          1946:                        Changes since 3.0.1rc11
        !          1947: 
        !          1948: - A patch from Steve Campbell was applied with minor modifications to
        !          1949:   permit reverse dns PTR record updates with values containing spaces.
        !          1950: 
        !          1951: - A patch from Florian Lohoff was applied with some modifications to
        !          1952:   dhcrelay.  It now discards packets whose hop count exceeds 10 by default,
        !          1953:   and a command-line option (-c) can be used to set this threshold.
        !          1954: 
        !          1955: - A failover bug relating to identifying peers by name length instead of
        !          1956:   by name was fixed.
        !          1957: 
        !          1958: - Declaring failover configs within shared-network statements should no
        !          1959:   longer result in error.
        !          1960: 
        !          1961: - The -nw command line option to dhclient now works.
        !          1962: 
        !          1963: - Thanks to a patch from Michael Richardson:
        !          1964:        - Some problems with long option processing have been fixed.
        !          1965:        - Some fixes to minires so that updates of KEY records will work.
        !          1966: 
        !          1967: - contrib/ms2isc was updated by Shu-Min Chang of the Intel Corporation.
        !          1968:   see contrib/ms2isc/readme.txt for revision notes.
        !          1969: 
        !          1970: - Dhclient no longer uses shell commands to kill another instance of
        !          1971:   itself, it sends the signal directly.  Thanks to a patch from Martin
        !          1972:   Blapp.
        !          1973: 
        !          1974: - The FreeBSD dhclient-script was changed so that a failure to write to
        !          1975:   /etc/resolv.conf does not prematurely end the script.  This keeps dhclient
        !          1976:   from looping infinitely when this is the case.  Thanks to a patch from
        !          1977:   Martin Blapp.
        !          1978: 
        !          1979: - A patch from Bill Stephens was applied which resolves a problem with lease
        !          1980:   expiry times in failover configurations.
        !          1981: 
        !          1982: - A memory leak in configuration parsing was closed thanks to a patch from
        !          1983:   Steve G.
        !          1984: 
        !          1985: - The function which discovers interfaces will now skip non-broadcast or
        !          1986:   point-to-point interfaces, thanks to a patch from David Brownlee.
        !          1987: 
        !          1988: - Options not yet known by the dhcpd or dhclient have had their names
        !          1989:   changed such that they do not contain # symbols, in case they should ever
        !          1990:   appear in a lease file.  An option that might have been named "#144" is
        !          1991:   now "unknown-144".
        !          1992: 
        !          1993: - Another patch from Bill Stephens which allows the ping-check timeout to
        !          1994:   be configured as 'ping-timeout'.  Defaults to 1.
        !          1995: 
        !          1996:                        Changes since 3.0.1rc10
        !          1997: 
        !          1998: - Potential buffer overflows in minires repaired.
        !          1999: 
        !          2000: - A change to the linux client script to use /bin/bash, since /bin/sh may
        !          2001:   not be bash.
        !          2002: 
        !          2003: - Some missing va_end cleanups thanks to a patch from Thomas Klausner.
        !          2004: 
        !          2005: - A correction of boolean parsing syntax validation - some illegal syntaxes
        !          2006:   that worked before are now detected and produce errs, some legal syntaxes
        !          2007:   that errored before will now work properly.
        !          2008: 
        !          2009: - Some search-and-replace errors that caused some options to change their
        !          2010:   names was repaired.
        !          2011: 
        !          2012: - Shu-min Chang of the Intel corporation has contributed a perl script and
        !          2013:   module that converts the MS NT4 DHCP configuration to a ISC DHCP3
        !          2014:   configuration file.
        !          2015: 
        !          2016: - Applied the remainder of the dhcpctl memory leak patch provided by Bill
        !          2017:   Squier at ReefEdge, Inc.  (groo@reefedge.com).
        !          2018: 
        !          2019: - Missing non-optional failover peer configurations will now result in a soft
        !          2020:   error rather than a null dereference.
        !          2021: 
        !          2022:                        Changes since 3.0.1rc9
        !          2023: 
        !          2024: - A format string was corrected to fix compiler warnings.
        !          2025: 
        !          2026: - A number of spelling corrections were made in the man pages.
        !          2027: 
        !          2028: - The dhclient.conf.5 man page was changed to refer to do-forward-updates
        !          2029:   rather than a configuration option that doesn't exist.
        !          2030: 
        !          2031: - A FreeBSD-specific bug in the interface removal handling was fixed.
        !          2032: 
        !          2033: - A Linux-specific Token Ring detection problem was fixed.
        !          2034: 
        !          2035: - Hashes removed from as-yet-unknown agent options, having those options
        !          2036:   appear in reality before we know about them will no longer produce
        !          2037:   self-corrupting lease databases.
        !          2038: 
        !          2039: - dhclient will use the proper port numbers now when using the -g option.
        !          2040: 
        !          2041: - A order-of-operations bug with 2 match clauses in 1 class statement is
        !          2042:   fixed thanks to a patch from Andrew Matheson.
        !          2043: 
        !          2044: - Compilation problems on Solaris were fixed.
        !          2045: 
        !          2046: - Compilation problems when built with DEBUG or DEBUG_PACKET were repaired.
        !          2047: 
        !          2048: - A fix to the dhcp ack process which makes certain group options will be
        !          2049:   included in the first DHCPOFFER message was made thanks to a patch from
        !          2050:   Ling Gou.
        !          2051: 
        !          2052: - A few memory leaks were repaired thanks to patches from Bill Squier at
        !          2053:   ReefEdge, Inc.  (groo@reefedge.com).
        !          2054: 
        !          2055: - A fix for shared-networks that sometimes give clients options for the
        !          2056:   wrong subnets (in particular, 'option routers') was applied, thanks to
        !          2057:   Ted Lemon for the patch.
        !          2058: 
        !          2059: - Omshell's handling of dotted octets as values was changed such that dots
        !          2060:   one after the other produce zero values in the integer string.
        !          2061: 
        !          2062:                        Changes since 3.0.1rc8
        !          2063: 
        !          2064: - Fix a format string vulnerability in the server that could lead to a
        !          2065:   remote root compromise (discovered by NGSEC Research Team, www.ngsec.com).
        !          2066: 
        !          2067: - Add additional support for NetBSD/sparc64.
        !          2068: 
        !          2069: - Fix a bug in the command-line parsing of the client.  Also, resolve
        !          2070:   a memory leak.
        !          2071: 
        !          2072: - Add better support for shells other than bash in the Linux client
        !          2073:   script.
        !          2074: 
        !          2075: - Various build fixes for modern versions of FreeBSD and Linux.
        !          2076: 
        !          2077: - Fix a bad bounds check when printing binding state names.
        !          2078: 
        !          2079: - Clarify documentation about fixed-address and multiple addresses.
        !          2080: 
        !          2081: - Fix a typo in the authoritative error message.
        !          2082: 
        !          2083: - Make a log entry when we can't write a billing class.
        !          2084: 
        !          2085: - Use conversion targets that are the right size on all architectures.
        !          2086: 
        !          2087: - Increment the hop count when relaying.
        !          2088: 
        !          2089: - Log a message when lease state is changed through OMAPI.
        !          2090: 
        !          2091: - Don't rerun the shared_network when evaluating the pool.
        !          2092: 
        !          2093: - Fix a reversed test in the parser.
        !          2094: 
        !          2095: - Change the type of rbuf_max.
        !          2096: 
        !          2097: - Make FTS_LAST a manifest constant to quiet warnings.
        !          2098: 
        !          2099:                        Changes since 3.0.1rc7
        !          2100: 
        !          2101: - Fix two compiler warnings that are generated when compiling on Solaris
        !          2102:   with gcc.   These stop the build, even though they weren't actually
        !          2103:   errors, because we prefer that our builds generate no warnings.
        !          2104: 
        !          2105:                        Changes since 3.0.1rc6
        !          2106: 
        !          2107: - Don't allow a lease that's in the EXPIRED, RELEASED or RESET state
        !          2108:   to be renewed.
        !          2109: 
        !          2110: - Implement lease stealing for cases where the primary has fewer leases
        !          2111:   than the secondary, as called for by the standard.
        !          2112: 
        !          2113: - Add a fudge factor to the lease expiry acceptance code, (suggested
        !          2114:   by Kevin Miller of CMU).
        !          2115: 
        !          2116: - Fix a bug in permit_list_match that made it much too willing to say
        !          2117:   that two permit lists matched.
        !          2118: 
        !          2119: - Unless DEBUG_DNS_UPDATES is defined, print more user-friendly (and
        !          2120:   also more compact) messages about DNS updates.
        !          2121: 
        !          2122: - Fix a bug in generating wire-format domain names for the FQDN option.
        !          2123: 
        !          2124: - Fix a bug where the FQDN option would not be returned if the client
        !          2125:   requested it, contrary to the standard.
        !          2126: 
        !          2127: - On Darwin, use the FreeBSD DHCP client script.
        !          2128: 
        !          2129: - On NetBSD/sparc, don't check for casting warnings.
        !          2130: 
        !          2131: - Add a flag in the DHCP client to disable updating the client's A
        !          2132:   record when sending an FQDN option indicating that the client is
        !          2133:   going to update its A record.
        !          2134: 
        !          2135: - In the client, don't attempt a DNS update until one second after
        !          2136:   configuring the new IP address, and if the update times out, keep
        !          2137:   trying until a response, positive or negative, is received from the
        !          2138:   DNS server.
        !          2139: 
        !          2140: - Fix an uninitialized memory bug in the DHCP client.
        !          2141: 
        !          2142: - Apply some FreeBSD-specific bug fixes suggested by Murray Stokely.
        !          2143: 
        !          2144: - Fix a bug in ns_parserr(), where it was returning the wrong sort
        !          2145:   of result code in some cases (suggested by Ben Harris of the
        !          2146:   NetBSD project).
        !          2147: 
        !          2148: - Fix a bug in is_identifier(), where it was checking against EOF
        !          2149:   instead of the END_OF_FILE token (also suggested by Ben Harris).
        !          2150: 
        !          2151: - Fix a bug where if an option universe contained no options, the
        !          2152:   DHCP server could dump core (Walter Steiner).
        !          2153: 
        !          2154: - Fix a bug in the handling of encapsulated options.
        !          2155: 
        !          2156: - Fix a bug that prevented NWIP suboptions from being processed.
        !          2157: 
        !          2158: - Delete the FTS_BOOTP and FTS_RESERVED states and implement them
        !          2159:   as modifier flags to the FTS_ACTIVE state, as called for in the
        !          2160:   failover protocol standard.
        !          2161: 
        !          2162: - Fix bugs in the pool merging code that resulted in references and
        !          2163:   dereferences of null pointers.   This bug had no impact unless the
        !          2164:   POINTER_DEBUG flag was defined.
        !          2165: 
        !          2166: - In the server, added a do-forward-updates flag that can be used to
        !          2167:   disable forward updates in all cases, so that sites that want the
        !          2168:   clients to take sole responsibility for updating their A record can
        !          2169:   do so.
        !          2170: 
        !          2171: - Make it possible to disable optimization of PTR record updates.
        !          2172: 
        !          2173:                        Changes since 3.0.1rc5
        !          2174: 
        !          2175: - Include some new documentation and changes provided by Karl Auer.
        !          2176: 
        !          2177: - Add a workaround for some Lexmark printers that send a double-NUL-
        !          2178:   terminated host-name option, which would break DNS updates.
        !          2179: 
        !          2180: - Fix an off-by-one error in the MAC-address checking code for
        !          2181:   DHCPRELEASE that was added in 3.0.1rc5.
        !          2182: 
        !          2183: - Fix a bug where client-specific information was not being discarded
        !          2184:   from the lease when it expired or was released, resulting in
        !          2185:   problems if the lease was reallocated to a different client.
        !          2186: 
        !          2187: - If more than one allocation pool is specified that has the same set
        !          2188:   of constraints as another allocation pool on the same shared
        !          2189:   network, merge the two pools.
        !          2190: 
        !          2191: - Don't print an error in fallback_discard, since this just causes
        !          2192:   confusion and does not appear to be helping to encourage anyone to
        !          2193:   fix this bug.
        !          2194: 
        !          2195:                        Changes since 3.0.1rc4
        !          2196: 
        !          2197: - Fix a bug that would cause the DHCP server to spin if asked to parse
        !          2198:   a certain kind of incorrect statement.
        !          2199: 
        !          2200: - Fix a related bug that would prevent an error from being reported in
        !          2201:   the same case.
        !          2202: 
        !          2203: - Additional documentation.
        !          2204: 
        !          2205: - Make sure that the hardware address matches the lease when
        !          2206:   processing a DHCPRELEASE message.
        !          2207: 
        !          2208:                        Changes since 3.0.1rc3
        !          2209: 
        !          2210: - A minor bug fix in the arguments to a logging function call.
        !          2211: - Documentation update for dhcpd.conf.
        !          2212: 
        !          2213:                        Changes since 3.0.1rc2
        !          2214: 
        !          2215: - Allow the primary to send a POOLREQ message.   This isn't what the current
        !          2216:   failover draft says to do, so we may have to back it out if I can't get the
        !          2217:   authors to relent, but the scheme for balancing that's specified in the
        !          2218:   current draft seems needlessly hairy, so I'm floating a trial balloon.
        !          2219:   The rc1 code did not implement the method described in the draft either.
        !          2220: 
        !          2221:                        Changes since 3.0.1rc1
        !          2222: 
        !          2223: - Treat NXDOMAIN and NXRRSET as success when we are trying to delete a
        !          2224:   domain or RRSET.   This allows the DHCP server to forget about a name
        !          2225:   it added to the DNS once it's been removed, even if the DHCP server
        !          2226:   wasn't the one that removed it.
        !          2227: 
        !          2228: - Install defaults for failover maximum outstanding updates and maximum
        !          2229:   silent time.   This prevents problems that might occur if these values
        !          2230:   were not configured.
        !          2231: 
        !          2232: - Don't do DDNS deletes if ddns-update-style is none.
        !          2233: 
        !          2234: - Return relay agent information options in DHCPNAK.   This prevents DHCPNAK
        !          2235:   messages from being dropped when the relay agent information option contains
        !          2236:   routing information.
        !          2237: 
        !          2238: - Fix a problem where coming up in recover wouldn't result in an update
        !          2239:   request being sent.
        !          2240: 
        !          2241: - Add some more chatty messages when we start a recovery update and when it's
        !          2242:   done.
        !          2243: 
        !          2244: - Fix a possible problem where some state might have been left around
        !          2245:   after the peer lost contact and regained contact about how many updates
        !          2246:   were pending.
        !          2247: 
        !          2248: - Don't nix a lease update because of a lease conflict.   This test has
        !          2249:   never (as far as I know) prevented a mistake, and it appears to cause
        !          2250:   problems with failover.
        !          2251: 
        !          2252: - Add support in rc history code for keeping a selective history, rather
        !          2253:   than a history of all references and dereferences.   This code is only used
        !          2254:   when extensive additional debugging is enabled.
        !          2255: 
        !          2256:                           Changes since 3.0
        !          2257: 
        !          2258: - Make allocators for hash tables.   As a side effect, this fixes a memory
        !          2259:   smash in the subclass allocation code.
        !          2260: 
        !          2261: - Fix a small bug in omshell where if you try to close an object when
        !          2262:   no object is open, it dumps core.
        !          2263: 
        !          2264: - Fix an obscure coredump that could occur on shutdown.
        !          2265: 
        !          2266: - Fix a bug in the recording of host declaration rubouts in the lease file.
        !          2267: 
        !          2268: - Fix two potential spins in the host deletion code.
        !          2269: 
        !          2270: - Fix a core dump that would happen if an application tried to update
        !          2271:   a host object attribute with a null value.
        !          2272: 
        !          2273:                Changes since 3.0 Release Candidate 12
        !          2274: 
        !          2275: - Fix a memory leak in the evaluation code.
        !          2276: 
        !          2277: - Fix an obscure core dump.
        !          2278: 
        !          2279: - Print a couple of new warnings when parsing the configuration file
        !          2280:   when crucial information is left out.
        !          2281: 
        !          2282: - Log "no free leases" as an error.
        !          2283: 
        !          2284: - Documentation updates.
        !          2285: 
        !          2286:                Changes since 3.0 Release Candidate 11
        !          2287: 
        !          2288: - Always return a subnet selection option if one is sent.
        !          2289: 
        !          2290: - Fix a warning that was being printed because an automatic data
        !          2291:   structure wasn't zeroed.
        !          2292: 
        !          2293: - Fix some failover state transitions that were being handled
        !          2294:   incorrectly.
        !          2295: 
        !          2296: - When supersede_lease is called on a lease whose end time has already
        !          2297:   expired, but for which a state transition has not yet been done, do
        !          2298:   a state transition.   This fixes the case where if the secondary
        !          2299:   allocated a lease to a client and the lease "expired" while the
        !          2300:   secondary was in partner-down, no expiry event would actually
        !          2301:   happen, so the lease would remain active until the primary was
        !          2302:   restarted.
        !          2303: 
        !          2304:                Changes since 3.0 Release Candidate 10
        !          2305: 
        !          2306: - Fix a bug that was preventing released leases from changing state
        !          2307:   in failover-enabled pools.
        !          2308: 
        !          2309: - Fix a core dump in the client identifier finder code (for host
        !          2310:   declarations).
        !          2311: 
        !          2312: - Finish fixing a bug where bogus data would sometimes get logged to
        !          2313:   the dhclient.leases file because it was opened as descriptor 2.
        !          2314: 
        !          2315: - Fix the Linux dhclient-script according to suggestions made by
        !          2316:   several people on the dhcp-client mailing list.
        !          2317: 
        !          2318: - Log successful DNS updates at LOG_INFO, not LOG_ERROR.
        !          2319: 
        !          2320: - Print an error message and refuse to run if a failover peer is
        !          2321:   defined but not referenced by any pools.
        !          2322: 
        !          2323: - Correct a confusing error message in failover.
        !          2324: 
        !          2325:                Changes since 3.0 Release Candidate 9
        !          2326: 
        !          2327: - Fix a bug in lease allocation for Dynamic BOOTP clients.
        !          2328: 
        !          2329:          Changes since 3.0 Release Candidate 8 Patchlevel 2
        !          2330: 
        !          2331: - Fix a bug that prevented update-static-leases from working.
        !          2332: 
        !          2333: - Document failover-state OMAPI object.
        !          2334: 
        !          2335: - Fix a compilation error on SunOS 4.
        !          2336: 
        !          2337:          Changes since 3.0 Release Candidate 8 Patchlevel 1
        !          2338: 
        !          2339: - Fix a parsing bug that broke dns updates (both interim and ad-hoc).
        !          2340:   This was introduced in rc8pl1 as an unintended result of the memory
        !          2341:   leakage fixes that were in pl1.
        !          2342: 
        !          2343: - Fix a long-standing bug where the server would record that an update
        !          2344:   had been done for a client with no name, even though no update had
        !          2345:   been done, and then when the client's lease expired the deletion of
        !          2346:   that nonexistant record would time out because the name was the null
        !          2347:   string. 
        !          2348: 
        !          2349: - Clean up the omshell, dhcpctl and omapi man pages a bit.
        !          2350: 
        !          2351:                Changes since 3.0 Release Candidate 8
        !          2352: 
        !          2353: - Fix a bug that could cause the DHCP server to spin if
        !          2354:   one-lease-per-client was enabled.
        !          2355: 
        !          2356: - Fix a bug that was causing core dumps on BSD/os in the presence of
        !          2357:   malformed packets.
        !          2358: 
        !          2359: - In partner-down state, don't restrict lease lengths to MCLT.
        !          2360: 
        !          2361: - On the failover secondary, record the MCLT received from the primary
        !          2362:   so that if we come up without a connection to the primary we don't
        !          2363:   wind up giving out zero-length leases.
        !          2364: 
        !          2365: - Fix some compilation problems on BSD/os.
        !          2366: 
        !          2367: - Fix a bunch of memory leaks.
        !          2368: 
        !          2369: - Fix a couple of bugs in the option printer.
        !          2370: 
        !          2371: - Fix an obscure error reporting bug in the dns update code, and also
        !          2372:   make the message clearer when a key algorithm isn't supported.
        !          2373: 
        !          2374: - Fix a bug in the tracing code that prevented trace runs that used
        !          2375:   tcp connections from being played back.
        !          2376: 
        !          2377: - Add some additional debugging capability for catching memory leaks
        !          2378:   on exit.
        !          2379: 
        !          2380: - Make the client release the lease correctly on shutdown.
        !          2381: 
        !          2382: - Add some configurability to the build system.
        !          2383: 
        !          2384: - Install omshell manual page in man1, not man8.
        !          2385: 
        !          2386: - Craig Gwydir sent in a patch that fixes a long-standing bug in the
        !          2387:   DHCP client that could cause core dumps, but that for some reason
        !          2388:   hadn't been noticed until now.
        !          2389: 
        !          2390:                Changes since 3.0 Release Candidate 7
        !          2391: 
        !          2392: - Fix a bug in failover where we weren't sending updates after a
        !          2393:   transition from communications-interrupted to normal.
        !          2394: 
        !          2395: - Handle expired/released/reset -> free transition according to the
        !          2396:   protocol specification (this works - the other way not only wasn't
        !          2397:   conformant, but also didn't work).
        !          2398: 
        !          2399: - Add a control object in both client and server that allows either
        !          2400:   daemon to be shut down cleanly.
        !          2401: 
        !          2402: - When writing a lease, if we run out of disk space, shut down the
        !          2403:   output file and insist on writing a new one before proceeding.
        !          2404: 
        !          2405: - In the server, if the OMAPI listener port is occupied, keep trying
        !          2406:   to get it, rather than simply giving up and exiting.
        !          2407: 
        !          2408: - Support fetching variables from leases and also updating and adding
        !          2409:   variables to leases via OMAPI.
        !          2410: 
        !          2411: - If two failover peers have wildly different clocks, refuse to start
        !          2412:   doing failover.
        !          2413: 
        !          2414: - Fix a bug in the DNS update code that could cause core dumps when
        !          2415:   running on alpha processors.
        !          2416: 
        !          2417: - Fixed a bug in ddns updates for static lease entries, thanks to a
        !          2418:   patch from Andrey M Linkevitch.
        !          2419: 
        !          2420: - Add support for Darwin/MacOS X
        !          2421: 
        !          2422: - Install omshell (including new documentation).
        !          2423: 
        !          2424: - Support DNS updates in the client (this is a very obscure feature
        !          2425:   that most DHCP client users probably will not be able to use).
        !          2426: 
        !          2427: - Somewhat cleaner status logging in the client.
        !          2428: 
        !          2429: - Make OMAPI key naming syntax compatible with the way keys are
        !          2430:   actually named (key names are domain names).
        !          2431: 
        !          2432: - Fix a bug in the lease file writer.
        !          2433: 
        !          2434: - Install DHCP ISC headers in a different place than BIND 9 ISC
        !          2435:   headers, to avoid causing trouble in BIND 9 builds.
        !          2436: 
        !          2437: - Don't send updates for attributes on an object when the attributes
        !          2438:   haven't changed.   Support deleting attributes on remote objects.
        !          2439: 
        !          2440: - Fix a number of bugs in omshell, and add the unset and refresh
        !          2441:   statements.
        !          2442: 
        !          2443: - Handle disconnects in OMAPI a little bit more intelligently (so that
        !          2444:   the caller gets ECONNRESET instead of EINVAL).
        !          2445: 
        !          2446: - Fix a bunch of bugs in the handling of clients that have existing
        !          2447:   leases when the try to renew their leases while failover is
        !          2448:   operating.
        !          2449: 
        !          2450:                Changes since 3.0 Release Candidate 6
        !          2451: 
        !          2452: - Fix a core dump that could happen when processing a DHCPREQUEST from
        !          2453:   a client that had a host declaration that contained both a
        !          2454:   fixed-address declaration and a dhcp-client-identifier option
        !          2455:   declaration, if the client identifier was longer than nine bytes.
        !          2456: 
        !          2457: - Fix a memory leak that could happen in certain obscure cases when
        !          2458:   using omapi to manipulate leases.
        !          2459: 
        !          2460: - Fix some bugs and omissions in omshell.
        !          2461: 
        !          2462:                Changes since 3.0 Release Candidate 5
        !          2463: 
        !          2464: - Fix a bug in omapi_object_dereference that prevented objects in
        !          2465:   chains from having their reference counts decreased on dereference.
        !          2466: 
        !          2467: - Fix a bug in omapi_object_dereference that would prevent object
        !          2468:   chains from being freed upon removal of the last reference external
        !          2469:   to the chain.
        !          2470: 
        !          2471: - Fix a number of other memory leaks in the OMAPI protocol subsystem.
        !          2472: 
        !          2473: - Add code in the OMAPI protocol handler to trace memory leakage.
        !          2474: 
        !          2475: - Clean up the memory allocation/reference history printer.
        !          2476: 
        !          2477: - Support input of dotted quads and colon-separated hex lists as
        !          2478:   attribute values in omshell.
        !          2479: 
        !          2480: - Fix a typo in the Linux interface discovery code.
        !          2481: 
        !          2482: - Conditionalize a piece of trace code that wasn't conditional.
        !          2483: 
        !          2484:                Changes since 3.0 Release Candidate 4
        !          2485: 
        !          2486: - Fix a bug that would prevent leases from being abandoned properly on
        !          2487:   DHCPDECLINE.
        !          2488: 
        !          2489: - Fix failover peer OMAPI support.
        !          2490: 
        !          2491: - In failover, correctly handle expiration of leases.   Previously,
        !          2492:   leases would never be reclaimed because they couldn't make the
        !          2493:   transition from EXPIRED to FREE.
        !          2494: 
        !          2495: - Fix some broken failover state transitions.
        !          2496: 
        !          2497: - Documentation fixes.
        !          2498: 
        !          2499: - Take out an unnecessary check in DHCP relay agent information option
        !          2500:   stashing code that was preventing REBINDING clients from rebinding.
        !          2501: 
        !          2502: - Prevent failover peers from allocating leases in DHCPREQUEST
        !          2503:   processing if the lease belongs to the other server.
        !          2504: 
        !          2505: - Record server version in lease file introductory comment.
        !          2506: 
        !          2507: - Correctly report connection errors in OMAPI and failover.
        !          2508: 
        !          2509: - Make authentication signature algorithm name comparisons in OMAPI
        !          2510:   case-insensitive.
        !          2511: 
        !          2512: - Fix compile problem on SunOS 4.x
        !          2513: 
        !          2514: - If a signature algorithm is not terminated with '.', terminate it so
        !          2515:   that comparisons between fully-qualified names will work
        !          2516:   consistently.
        !          2517: 
        !          2518: - Different SIOCGIFCONF probe code, may "fix" problem on some Linux
        !          2519:   systems with the probe not working correctly.
        !          2520: 
        !          2521: - Don't allow user to type omapi key on command line of omshell.
        !          2522: 
        !          2523:                Changes since 3.0 Release Candidate 3
        !          2524: 
        !          2525: - Do lease billing on startup in a way that I *think* will finally do
        !          2526:   the billing correctly - the previous method could overbill as a
        !          2527:   result of duplicate leases.
        !          2528: 
        !          2529: - Document OMAPI server objects.
        !          2530: 
        !          2531:          Changes since 3.0 Release Candidate 2 Patchlevel 1
        !          2532: 
        !          2533: - Fix some problems in the DDNS update code.   Thanks to Albert
        !          2534:   Herranz for figuring out the main problem.
        !          2535: 
        !          2536: - Fix some reference counting errors on host entries that were causing
        !          2537:   core dumps.
        !          2538: 
        !          2539: - Fix a byte-swap bug in the token ring code, thanks to Jochen
        !          2540:   Friedrich.
        !          2541: 
        !          2542: - Fix a bug in lease billing, thanks to Jonas Bulow.
        !          2543: 
        !          2544:                Changes since 3.0 Release Candidate 2
        !          2545: 
        !          2546: - Change the conditions under which a DHCPRELEASE is actually
        !          2547:   committed to be consistent with lease binding states rather than
        !          2548:   using the lease end time.   This may fix some problems with the
        !          2549:   billing class code.
        !          2550: 
        !          2551: - Fix a bug where lease updates would fail on Digital Unix (and maybe
        !          2552:   others) because malloc was called with a size of zero.
        !          2553: 
        !          2554: - Fix a core dump that happens when the DHCP server can't create its
        !          2555:   trace file.
        !          2556: 
        !          2557:          Changes since 3.0 Release Candidate 1 Patchlevel 1
        !          2558: 
        !          2559: - Fix the dhcp_failover_put_message to not attempt to allocate a
        !          2560:   zero-length buffer.   Some versions of malloc() fail if you try to
        !          2561:   allocate a zero-length buffer, and this was causing problems on,
        !          2562:   e.g., Digital Unix.
        !          2563: 
        !          2564: - Fix a case where the failover code was printing an error message
        !          2565:   when no error had occurred.
        !          2566: 
        !          2567: - Fix a problem where when a server went down and back up again, the
        !          2568:   peer would not see a state transition and so would stay in the
        !          2569:   non-communicating state.
        !          2570: 
        !          2571: - Be smart about going into recover_wait.
        !          2572: 
        !          2573: - Fix a problem in the failover implementation where peers would fail
        !          2574:   to come into sync if interrupted in the RECOVER state.   This could
        !          2575:   have been the cause of some problems people have reported recently.
        !          2576: 
        !          2577: - Fix a problem with billing classes where they would not be unbilled
        !          2578:   when the client lease expired.
        !          2579: 
        !          2580: - If select fails, figure out which descriptor is bad, and cut it out
        !          2581:   of the I/O loop.   This prevents a potentially nasty spin.  I
        !          2582:   haven't heard any report it in a while, but it came up consistently
        !          2583:   in testing.
        !          2584: 
        !          2585: - Fix a bug in the relay agent where if you specified interfaces on
        !          2586:   the command line, it would fail.
        !          2587: 
        !          2588: - Fix a couple of small bugs in the omapi connection object (no known
        !          2589:   user impact).
        !          2590: 
        !          2591: - Add the missing 3.0 Beta 1 lease conversion script.
        !          2592: 
        !          2593: - Read dhcp client script hooks if they exist, rather than only if
        !          2594:   they're executable.
        !          2595: 
        !          2596:                Changes since 3.0 Release Candidate 1
        !          2597: 
        !          2598: - Fix a memory smash that happens when fixed-address leases are used.
        !          2599:   ANY SITE AT WHICH FIXED-ADDRESS STATEMENTS ARE BEING USED SHOULD
        !          2600:   UPGRADE IMMEDIATELY.   This has been a long-standing bug - thanks to
        !          2601:   Alvise Nobile for discovering it and helping me to find it!
        !          2602: 
        !          2603: - Fix a small bug in binary-to-ascii, thanks to H. Peter Anvin of
        !          2604:   Transmeta.
        !          2605: 
        !          2606: - There is a known problem with the DHCP server doing failover on
        !          2607:   Compaq Alpha systems.   This patchlevel is not a release candidate
        !          2608:   because of this bug.   The bug should be straightforward to fix, so
        !          2609:   a new release candidate is expected shortly.
        !          2610: 
        !          2611: - There is a known problem in the DDNS update code that is probably a
        !          2612:   bug, and is not, as far as we know, fixed in this patchlevel.
        !          2613: 
        !          2614:                Changes since 3.0 Beta 2 Patchlevel 24
        !          2615: 
        !          2616: - Went over problematic failover state transitions and made them all
        !          2617:   work, so that failover should now much less fragile.
        !          2618: 
        !          2619: - Add some dhcpctl and omapi documentation
        !          2620: 
        !          2621: - Fix compile errors when compiling with unusual predefines.
        !          2622: 
        !          2623: - Make Token Ring work on Linux 2.4
        !          2624: 
        !          2625: - Fix the Digital Unix BPF_WORDALIGN bug.
        !          2626: 
        !          2627: - Fix some dhcp client documentation errors.
        !          2628: 
        !          2629: - Update some parts of the README file.
        !          2630: 
        !          2631: - Support GCC on SCO.
        !          2632: 
        !          2633:                Changes since 3.0 Beta 2 Patchlevel 23
        !          2634: 
        !          2635: - Fix a bug in the DNS update code where a status code was not being
        !          2636:   checked.   This may have been causing core dumps.
        !          2637: 
        !          2638: - When parsing the lease file, if a lease declaration includes a
        !          2639:   billing class statement, and the lease already has a billing class,
        !          2640:   unbill the old class.
        !          2641: 
        !          2642: - When processing failover transactions, where acks will be deferred,
        !          2643:   process the state transition immediately.
        !          2644: 
        !          2645: -  Don't try to use the new SIOCGIFCONF buffer size detection code on
        !          2646:    Linux 2.0, which doesn't provide this functionality.
        !          2647: 
        !          2648: - Apply a patch suggested by Tuan Uong for a problem in dlpi.c.
        !          2649: 
        !          2650: - Fix a problem in using the which command in the configure script.
        !          2651: 
        !          2652: - Fix a parse error in the client when setting up an omapi listener.
        !          2653: 
        !          2654: - Document the -n and -g flags to the client.
        !          2655: 
        !          2656: - Make sure there is always a stdin and stdout on startup.   This
        !          2657:   prevents shell scripts from accidentally writing error messages into
        !          2658:   configuration files that happen to be opened as stderr.
        !          2659: 
        !          2660: - If an interface is removed, the client will now notice that it is
        !          2661:   gone rather than spinning.   This has only been tested on NetBSD.
        !          2662: 
        !          2663: - The client will attempt to get an address even if it can't create a
        !          2664:   lease file.
        !          2665: 
        !          2666: - Don't overwrite tracefiles.
        !          2667: 
        !          2668: - Fix some memory allocation bugs in failover.
        !          2669: 
        !          2670:                Changes since 3.0 Beta 2 Patchlevel 22
        !          2671: 
        !          2672: - Apply some patches suggested by Cyrille Lefevre, who is maintaining
        !          2673:   the FreeBSD ISC DHCP Distribution port.
        !          2674: 
        !          2675: - Fix a core dump in DHCPRELEASE.
        !          2676: 
        !          2677:                Changes since 3.0 Beta 2 Patchlevel 21
        !          2678: 
        !          2679: - This time for sure: fix the spin described in the changes for pl20.
        !          2680: 
        !          2681:                Changes since 3.0 Beta 2 Patchlevel 20
        !          2682: 
        !          2683: - Fix a problem with Linux detecting large numbers of interfaces (Ben)
        !          2684: 
        !          2685: - Fix a memory smash in the quotify code, which was introduced in
        !          2686:   pl19.
        !          2687: 
        !          2688: - Actually fix the spin described in the changes for pl20.   The
        !          2689:   previous fix only partially fixed the problem - enough to get it
        !          2690:   past the regression test.
        !          2691: 
        !          2692:                Changes since 3.0 Beta 2 Patchlevel 19
        !          2693: 
        !          2694: - Fix a bug that could cause the server to abort if compiled with
        !          2695:   POINTER_DEBUG enabled.
        !          2696: 
        !          2697: - Fix a bug that could cause the server to spin when responding to a
        !          2698:   DHCPREQUEST.
        !          2699: 
        !          2700: - Apply Joost Mulders' suggested patches for DLPI on x86.
        !          2701: 
        !          2702: - Support NUL characters in quoted strings.
        !          2703: 
        !          2704: - Install unformatted man pages on SunOS.
        !          2705: 
        !          2706:                Changes since 3.0 Beta 2 Patchlevel 18
        !          2707: 
        !          2708: - Allow the server to be placed in partner-down state using OMAPI.
        !          2709:   (Damien Neil)
        !          2710: 
        !          2711: - Implement omshell, which can be used to do arbitrary things to the
        !          2712:   server (in theory). (Damien Neil)
        !          2713: 
        !          2714: - Fix a case where if a client had two different leases the server could
        !          2715:   actually dereference the second one when it hadn't been referenced,
        !          2716:   leading to memory corruption and a core dump. (James Brister)
        !          2717: 
        !          2718: - Fix a case where a client could request the address of another client's
        !          2719:   lease, but find_lease wouldn't detect that the other client had it, and
        !          2720:   would attempt to allocate it to the client, resulting in a lease conflict
        !          2721:   message.
        !          2722: 
        !          2723: - Fix a case where a client with more than one client identifier could be
        !          2724:   given a lease where the hardware address was correct but the client
        !          2725:   identifier was not, resulting in a lease conflict message.
        !          2726: 
        !          2727: - Fix a problem where the server could write out a colon-separated
        !          2728:   hex list as a value for a variable, which would then not parse.
        !          2729:   The fix is to always write strings as quoted strings, with any
        !          2730:   non-printable characters quoted as octal escape sequences.   So
        !          2731:   a file written the old way still won't work, but new files written
        !          2732:   this way will work.
        !          2733: 
        !          2734: - Fix documentation for sending non-standard options.
        !          2735: 
        !          2736: - Use unparsable names for unknown options.    WARNING: this will
        !          2737:   break any configuration files that use the option-nnn convention.
        !          2738:   If you want to continue to use this convention for some options,
        !          2739:   please be sure to write a definition, like this:
        !          2740: 
        !          2741:   option option-nnn code nnn = string;
        !          2742: 
        !          2743:   You can use a descriptive name instead of option-nnn if you like.
        !          2744: 
        !          2745: - Fix a problem where we would see a DHCPDISCOVER/DHCPOFFER/
        !          2746:   DHCPREQUEST/DHCPACK/DHCPREQUEST/DHCPNAK sequence.   This was the
        !          2747:   result of a deceptively silly bug in supersede_lease.
        !          2748: 
        !          2749: - Fix client script exit status check, according to a fix supplied by
        !          2750:   Hermann Lauer.
        !          2751: 
        !          2752: - Fix an endianness bug in the tracefile support, regarding ICMP
        !          2753:   messages.
        !          2754: 
        !          2755: - Fix a bug in the client where the medium would not work correctly if
        !          2756:   it contained quoted strings.
        !          2757: 
        !          2758:                       ** there was no pl17 **
        !          2759: 
        !          2760:                Changes since 3.0 Beta 2 Patchlevel 16
        !          2761: 
        !          2762: - Add support for transaction tracing.   This allows the state of the
        !          2763:   DHCP server on startup, and all the subsequent transactions, to be
        !          2764:   recorded in a file which can then be played back to reproduce the
        !          2765:   behaviour of the DHCP server.   This can be used to quickly
        !          2766:   reproduce bugs that cause core dumps or corruption, and also for
        !          2767:   tracking down memory leaks.
        !          2768: 
        !          2769: - Incorporate some bug fixes provided by Joost Mulders for the DLPI
        !          2770:   package which should clear up problems people have been seeing on
        !          2771:   Solaris.
        !          2772: 
        !          2773: - Fix bugs in the handling of options stored as linked lists (agent
        !          2774:   options, fqdn options and nwip options) that could cause memory
        !          2775:   corruption and core dumps.
        !          2776: 
        !          2777: - Fix a bug in DHCPREQUEST handling that resulted in DHCPNAK messages
        !          2778:   not being send in some cases when they were needed.
        !          2779: 
        !          2780: - Make the lease structure somewhat more compact.
        !          2781: 
        !          2782: - Make initial failover startup *much* faster.   This was researched
        !          2783:   and implemented by Damien Neil.
        !          2784: 
        !          2785: - Add a --version flag to all executables, which prints the program
        !          2786:   name and version to standard output.
        !          2787: 
        !          2788: - Don't rewrite the lease file every thousand leases.
        !          2789: 
        !          2790: - A bug in nit.c for older SunOS machines was fixed by a patch sent in
        !          2791:   by Takeshi Hagiwara.
        !          2792: 
        !          2793: - Fix a memory corruption bug in the DHCP client.
        !          2794: 
        !          2795: - Lots of documentation updates.
        !          2796: 
        !          2797: - Add a feature allowing environment variables to be passed to the
        !          2798:   DHCP client script on the DHCP client command line.
        !          2799: 
        !          2800: - Fix client medium support, which had been broken for some time.
        !          2801: 
        !          2802: - Fix a bug in the DHCP client initial startup backoff interval, which
        !          2803:   would cause two DHCPDISCOVERS to be sent back-to-back on startup.
        !          2804: 
        !          2805:                Changes since 3.0 Beta 2 Patchlevel 15
        !          2806: 
        !          2807: - Some documentation tweaks.
        !          2808: 
        !          2809: - Maybe fix a problem in the DLPI code.
        !          2810: 
        !          2811: - Fix some error code space inconsistencies in ddns update code.
        !          2812: 
        !          2813: - Support relay agents that intercept unicast DHCP messages to stuff
        !          2814:   agent options into them.
        !          2815: 
        !          2816: - Fix a small memory leak in the relay agent option support code.
        !          2817: 
        !          2818: - Fix a core dump that would occur if a packet was sent with no
        !          2819:   options.
        !          2820: 
        !          2821:                Changes since 3.0 Beta 2 Patchlevel 14
        !          2822: 
        !          2823: - Finish fixing a long-standing bug in the agent options code.   This
        !          2824:   was causing core dumps and failing to operate correctly - in
        !          2825:   particular, agent option stashing wasn't working.   Agent option
        !          2826:   stashing should now be working, meaning that agent options can be
        !          2827:   used in class statements to control address allocation.
        !          2828: 
        !          2829: - Fix up documentation.
        !          2830: 
        !          2831: - Fix a couple of small memory leaks that would have added up
        !          2832:   significantly in a high-demand situation.
        !          2833: 
        !          2834: - Add a log-facility configuration parameter.
        !          2835: 
        !          2836: - Fix a compile error on some older operating systems.
        !          2837: 
        !          2838: - Add the ability in the client to execute certain statements before
        !          2839:   transmitting packets to the server.   Handy for debugging; not much
        !          2840:   practical use otherwise.
        !          2841: 
        !          2842: - Don't send faked-out giaddr when renewing or bound - again, useful
        !          2843:   for debugging.
        !          2844: 
        !          2845:                Changes since 3.0 Beta 2 Patchlevel 13
        !          2846: 
        !          2847: - Fixed a problem where the fqdn decoder would sometimes try to store
        !          2848:   an option with an (unsigned) negative length, resulting in a core
        !          2849:   dump on some systems.
        !          2850: 
        !          2851: - Work around the Win98 DHCP client, which NUL-terminates the FQDN
        !          2852:   option.
        !          2853: 
        !          2854: - Work around Win98 and Win2k clients that will claim they want to do
        !          2855:   the update even when they don't have any way to do it.
        !          2856: 
        !          2857: - Fix some log messages that can be printed when failover is operating
        !          2858:   that were not printing enough information.
        !          2859: 
        !          2860: - It was possible for a DHCPDISCOVER to get an allocation even when
        !          2861:   the state machine said the server shouldn't be responding.
        !          2862: 
        !          2863: - Don't load balance DHCPREQUESTs from clients in RENEWING and
        !          2864:   REBINDING, since in RENEWING, if we heard it, it's for us, and in
        !          2865:   REBINDING, the client wouldn't have got to REBINDING if its primary
        !          2866:   were answering.
        !          2867: 
        !          2868: - When we get a bogus state lease binding state transition, don't do
        !          2869:   the transition.
        !          2870:   
        !          2871: 
        !          2872:                Changes since 3.0 Beta 2 Patchlevel 12
        !          2873: 
        !          2874: - Fixed a couple of silly compile errors.
        !          2875: 
        !          2876:                Changes since 3.0 Beta 2 Patchlevel 11
        !          2877: 
        !          2878: - Albert Herranz tracked down and fixed a subtle bug in the base64
        !          2879:   decoder that would prevent any key with an 'x' in its base64
        !          2880:   representation from working correctly.
        !          2881: 
        !          2882: - Thanks to Chris Cheney and Michael Sanders, we have a fix for the
        !          2883:   hang that they both spotted in the DHCP server - when
        !          2884:   one-lease-per-client was set, the code to release the "other" lease
        !          2885:   could spin.
        !          2886: 
        !          2887: - Fix a problem with alignment of the input buffer in bpf in cases
        !          2888:   where two packets arrive in the same bpf read.
        !          2889: 
        !          2890: - Fix a problem where the relay agent would crash if you specified an
        !          2891:   interface name on the command line.
        !          2892: 
        !          2893: - Add the ability to conditionalize client behaviour based on the
        !          2894:   client state.
        !          2895: 
        !          2896: - Add support for the FQDN option, and added support for a new way of
        !          2897:   doing ddns updates (ddns update style interim) that allows more than
        !          2898:   one DHCP server to update the DNS for the same network(s).   This
        !          2899:   was implemented by Damien Neil with some additional functionality
        !          2900:   added by Ted Lemon.
        !          2901: 
        !          2902: - Damien added a "log" statement, so that the configuration file can
        !          2903:   be made to log debugging information and other information.
        !          2904: 
        !          2905: - Fixed a bug that caused option buffers not to be terminated with an
        !          2906:   end option.
        !          2907: 
        !          2908: - Fixed a long-standing bug in the support for option spaces where the
        !          2909:   options are stored as an ordered list rather than in a hash table,
        !          2910:   which could theoretically result in memory pool corruption.
        !          2911: 
        !          2912: - Prevent hardware declarations with no actual hardware address from
        !          2913:   being written as something unparsable, and behave correctly in the
        !          2914:   face of a null hardware address on input.
        !          2915: 
        !          2916: - Allow key names to be FQDNs, and qualify the algorithm name if it is
        !          2917:   specified unqualified.
        !          2918: 
        !          2919: - Modify the DDNS update code so that it never prints the "resolver
        !          2920:   failed" message, but instead says *why* the resolver failed.
        !          2921: 
        !          2922: - Officially support the subnet selection option, which now has an
        !          2923:   RFC.
        !          2924: 
        !          2925: - Fix a build bug on MacOS X.
        !          2926: 
        !          2927: - Allow administrator to disable ping checking.
        !          2928: 
        !          2929: - Clean up dhcpd.conf documentation and add more information about how
        !          2930:   it works.
        !          2931: 
        !          2932:                Changes since 3.0 Beta 2 Patchlevel 10
        !          2933: 
        !          2934: - Fix a bug introduced during debugging (!) and accidentally committed
        !          2935:   to CVS.
        !          2936: 
        !          2937:                Changes since 3.0 Beta 2 Patchlevel 9
        !          2938: 
        !          2939: - Fix DHCP client handling of vendor encapsulated options.
        !          2940: 
        !          2941: - Fix a bug in the handling of relay agent information options introduced
        !          2942:   in patchlevel 9.
        !          2943: 
        !          2944: - Stash agent options on client leases by default, and use the stashed
        !          2945:   options at renewal time.
        !          2946: 
        !          2947: - Add the ability to test the client's binding state in the client
        !          2948:   configuration language.
        !          2949: 
        !          2950: - Fix a core dump in the DNS update code.
        !          2951: 
        !          2952: - Fix some expression evaluation bugs that were causing updates to be
        !          2953:   done when no client hostname was received.
        !          2954: 
        !          2955: - Fix expression evaluation debugging printfs.
        !          2956: 
        !          2957: - Teach pretty_print_option to print options in option spaces other than
        !          2958:   the DHCP option space.
        !          2959: 
        !          2960: - Add a warning message if the RHS of a not is not boolean.
        !          2961: 
        !          2962: - Never select for more than a day, because some implementations of
        !          2963:   select will just fail if the timeout is too long (!).
        !          2964: 
        !          2965: - Fix a case where a DHCPDISCOVER from an unknown network would be
        !          2966:   silently dropped.
        !          2967: 
        !          2968: - Fix a bug where if a client requested an IP address for which a different
        !          2969:   client had the lease, the DHCP server would reallocate it anyway.
        !          2970: 
        !          2971: - Fix the DNS update code so that if the client changes its name, the DNS
        !          2972:   will be correctly updated.
        !          2973: 
        !          2974:                Changes since 3.0 Beta 2 Patchlevel 8
        !          2975: 
        !          2976: - Oops, there was another subtle math error in the header-length
        !          2977:   bounds-checking.
        !          2978: 
        !          2979:                Changes since 3.0 Beta 2 Patchlevel 7
        !          2980: 
        !          2981: - Oops, forgot to byte-swap udp header length before bounds-checking it.
        !          2982: 
        !          2983:                Changes since 3.0 Beta 2 Patchlevel 6
        !          2984: 
        !          2985: - Fix a possible DoS attack where a client could cause the checksummer
        !          2986:   to dump core.   This was a read, not a write, so it shouldn't be
        !          2987:   possible to exploit it any further than that.
        !          2988: 
        !          2989: - Implement client- and server-side support for using the Client FQDN
        !          2990:   option.
        !          2991: 
        !          2992: - Support for other option spaces in the client has been added.   This
        !          2993:   means that it is now possible to define a vendor option space on the
        !          2994:   client, request options in that space from the server (which must
        !          2995:   define the same option space), and then use those options in the
        !          2996:   client.   This also allows NWIP and Client FQDN options to be used
        !          2997:   meaningfully.
        !          2998: 
        !          2999: - Add object initializer support.   This means that objects can now be
        !          3000:   initialized to something other than all-zeros when allocated, which
        !          3001:   makes, e.g., the interface object support code a little more robust.
        !          3002: 
        !          3003: - Fix an off-by-one bug in the host stuffer.   This was causing host
        !          3004:   deletes not the work, and may also have been causing OMAPI
        !          3005:   connections to get dropped.   Thanks to James Brister for tracking
        !          3006:   this one down!
        !          3007: 
        !          3008: - Fixed a core dump in the interface discovery code that is triggered
        !          3009:   when there is no subnet declaration for an interface, but the server
        !          3010:   decides to continue running.   Thanks to Shane Kerr for tracking
        !          3011:   down and fixing this problem.
        !          3012: 
        !          3013:                Changes since 3.0 Beta 2 Patchlevel 5
        !          3014: 
        !          3015: - Fix a bug in the recent enhancement to the interface discovery code
        !          3016:   to support arbitrary-length interface lists.
        !          3017: 
        !          3018: - Support NUL-terminated DHCP options when initializing client-script
        !          3019:   environment.
        !          3020: 
        !          3021: - Fix suffix operator.
        !          3022: 
        !          3023: - Fix NetWare/IP option parsing.
        !          3024: 
        !          3025: - Better error/status checking in dhcpctl initialization and omapi
        !          3026:   connection code.
        !          3027: 
        !          3028: - Fix a potential memory smash in dhcpctl code.
        !          3029: 
        !          3030: - Fix SunOS4 and (maybe) Ultrix builds.
        !          3031: 
        !          3032: - Fix a bug where a certain sort of incoming packet could cause a core
        !          3033:   dump on Solaris (and probably elsewhere).
        !          3034: 
        !          3035: - Add some more safety checks in error logging code.
        !          3036: 
        !          3037: - Add support for ISC_R_INCOMPLETE in OMAPI protocol connection code.
        !          3038: 
        !          3039: - Fix relay agent so that if an interface is specified on the command
        !          3040:   line, the relay agent does not dump core.
        !          3041: 
        !          3042: - Fix class matching so that match if can be combined with match or
        !          3043:   spawn with.
        !          3044: 
        !          3045: - Do not allow spurious leases in the lease database to introduce
        !          3046:   potentially bogus leases into the in-memory database.
        !          3047: 
        !          3048: - Fix a byte-order problem in the client hardware address type code
        !          3049:   for OMAPI.
        !          3050: 
        !          3051: - Be slightly less picky about what sort of hardware addresses OMAPI
        !          3052:   can install in host declarations.
        !          3053: 
        !          3054:                Changes since 3.0 Beta 2 Patchlevel 4
        !          3055: 
        !          3056: - Incorporated Peter Marschall's proposed change to array/record
        !          3057:   parsing, which allows things like the slp-agent option to be encoded
        !          3058:   correctly.   Thanks very much to Peter for taking the initiative to
        !          3059:   do this, and for doing such a careful job of it (e.g., updating the
        !          3060:   comments)!
        !          3061: 
        !          3062: - Added an encoding for the slp-agent option.   :')
        !          3063: 
        !          3064: - Fixed SunOS 4 build.  Thanks to Robert Elz for responding to my
        !          3065:   request for help on this with patches!
        !          3066: 
        !          3067: - Incorporated a change that should fix a problem reported by Philippe
        !          3068:   Jumelle where when the network connection between two servers is
        !          3069:   lost, they never reconnect.
        !          3070: 
        !          3071: - Fix client script files other than that for NetBSD to actually use
        !          3072:   make_resolv_conf as documented in the manual page.
        !          3073: 
        !          3074: - Fix a bug in the packet handling code that could result in a core
        !          3075:   dump.
        !          3076: 
        !          3077: - Fix a bug in the bootp code where responses on the local net would
        !          3078:   be sent to the wrong MAC address.   Thanks to Jerry Schave for
        !          3079:   catching this one.
        !          3080: 
        !          3081:                Changes since 3.0 Beta 2 Patchlevel 3
        !          3082: 
        !          3083: - In the DHCP client, execute client statements prior to using the values
        !          3084:   of options, so that the client configuration can overridden, e.g., the
        !          3085:   lease renewal time.
        !          3086: 
        !          3087: - Fix a reference counting error that would result in very reproducible
        !          3088:   failures in updates, as well as occasional core dumps, if a zone was
        !          3089:   declared without a key.
        !          3090: 
        !          3091: - Fix some Linux 2.0 compilation problems.
        !          3092: 
        !          3093: - Fix a bug in scope evaluation during execution of "on" statements that
        !          3094:   caused values not to be recorded on leases.
        !          3095: 
        !          3096: - If the dhcp-max-message-size option is specified in scope, and the
        !          3097:   client didn't send this option, use the one specified in scope to
        !          3098:   determine the maximum size of the response.
        !          3099: 
        !          3100:                Changes since 3.0 Beta 2 Patchlevel 2
        !          3101: 
        !          3102: - Fix a case where spawning subclasses were being allocated
        !          3103:   incorrectly, resulting in a core dump.
        !          3104: 
        !          3105: - Fix a case where the DHCP server might inappropriately NAK a
        !          3106:   RENEWING client.
        !          3107: 
        !          3108: - Fix a place dhcprequest() where static leases could leak.
        !          3109: 
        !          3110: - Include memory.h in omapip_p.h so that we don't get warnings about
        !          3111:   using memcmp().
        !          3112: 
        !          3113:                Changes since 3.0 Beta 2 Patchlevel 1
        !          3114: 
        !          3115: - Notice when SIOCFIGCONF returns more data than fit in the buffer -
        !          3116:   allocate a larger buffer, and retry.   Thanks to Greg Fausak for
        !          3117:   pointing this out.
        !          3118: 
        !          3119: - In the server, if no interfaces were configured, report an error and
        !          3120:   exit.
        !          3121: 
        !          3122: - Don't ever record a state of 'startup'.
        !          3123: 
        !          3124: - Don't try to evaluate the local failover binding address if none was
        !          3125:   specified.   Thanks to Joseph Breu for finding this.

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>