]> git.ipfire.org Git - thirdparty/dhcp.git/commitdiff
- Some time value size fixes in 3.0.4 brought on from FreeBSD /usr/ports were
authorDavid Hankins <dhankins@isc.org>
Wed, 17 May 2006 20:15:32 +0000 (20:15 +0000)
committerDavid Hankins <dhankins@isc.org>
Wed, 17 May 2006 20:15:32 +0000 (20:15 +0000)
  misapplied to server values rather than client values.  The server no longer
  advertises 8-byte lease-time options when on 64-bit platforms.
  [ISC-Bugs #16036]

RELNOTES
includes/dhcpd.h
server/dhcp.c

index 2ef7295228c562f2a41fa7196919135d1bcef7f5..d76327537a3ee7d2c7ce33dae110214e7e52f475 100644 (file)
--- a/RELNOTES
+++ b/RELNOTES
@@ -98,6 +98,10 @@ and for prodding me into improving it.
   state count calculations (free/active counts used for failover pool
   balancing).
 
+- Some time value size fixes in 3.0.4 brought on from FreeBSD /usr/ports were
+  misapplied to server values rather than client values.  The server no longer
+  advertises 8-byte lease-time options when on 64-bit platforms.
+
                        Changes since 3.0.4rc1
 
 - The dhcp-options.5 manpage was updated to correct indentation errors
index 9ee2fd9859f32dffc4b073ffcc99f0ad59e7eb1f..dc6582cd3f7839abaf11ed9fbea47a9b275e046b 100644 (file)
@@ -346,7 +346,7 @@ struct lease_state {
        struct option_state *options;
        struct data_string parameter_request_list;
        int max_message_size;
-       TIME expiry, renewal, rebind;
+       unsigned char expiry[4], renewal[4], rebind[4];
        struct data_string filename, server_name;
        int got_requested_address;
        int got_server_identifier;
index 5e3c34499892bfd4273cfa9774ec2a4bad71264d..e0b2f2e9acc3d2735dca36c91c0fcbbe64e5aa1f 100644 (file)
@@ -34,7 +34,7 @@
 
 #ifndef lint
 static char copyright[] =
-"$Id: dhcp.c,v 1.202 2006/04/27 17:26:42 dhankins Exp $ Copyright (c) 2004-2006 Internet Systems Consortium.  All rights reserved.\n";
+"$Id: dhcp.c,v 1.203 2006/05/17 20:15:32 dhankins Exp $ Copyright (c) 2004-2006 Internet Systems Consortium.  All rights reserved.\n";
 #endif /* not lint */
 
 #include "dhcpd.h"
@@ -2491,18 +2491,15 @@ void ack_lease (packet, lease, offer, when, msg, ms_nulltp, hp)
                offered_lease_time =
                        state -> offered_expiry - cur_time;
 
-               putULong ((unsigned char *)&state -> expiry,
-                         (unsigned long)offered_lease_time);
+               putULong(state->expiry, (u_int32_t)offered_lease_time);
                i = DHO_DHCP_LEASE_TIME;
                if (lookup_option (&dhcp_universe, state -> options, i))
                        log_error ("dhcp-lease-time option for %s overridden.",
                              inet_ntoa (state -> ciaddr));
                oc = (struct option_cache *)0;
                if (option_cache_allocate (&oc, MDL)) {
-                       if (make_const_data (&oc -> expression,
-                                            (unsigned char *)&state -> expiry,
-                                            sizeof state -> expiry,
-                                            0, 0, MDL)) {
+                       if (make_const_data(&oc->expression, state->expiry,
+                                           4, 0, 0, MDL)) {
                                oc -> option = dhcp_universe.options [i];
                                save_option (&dhcp_universe,
                                             state -> options, oc);
@@ -2512,19 +2509,15 @@ void ack_lease (packet, lease, offer, when, msg, ms_nulltp, hp)
 
                /* Renewal time is lease time * 0.5. */
                offered_lease_time /= 2;
-               putULong ((unsigned char *)&state -> renewal,
-                         (unsigned long)offered_lease_time);
+               putULong(state->renewal, (u_int32_t)offered_lease_time);
                i = DHO_DHCP_RENEWAL_TIME;
                if (lookup_option (&dhcp_universe, state -> options, i))
                        log_error ("overriding dhcp-renewal-time for %s.",
                                   inet_ntoa (state -> ciaddr));
                oc = (struct option_cache *)0;
                if (option_cache_allocate (&oc, MDL)) {
-                       if (make_const_data (&oc -> expression,
-                                            (unsigned char *)
-                                            &state -> renewal,
-                                            sizeof state -> renewal,
-                                            0, 0, MDL)) {
+                       if (make_const_data(&oc->expression, state->renewal,
+                                           4, 0, 0, MDL)) {
                                oc -> option = dhcp_universe.options [i];
                                save_option (&dhcp_universe,
                                             state -> options, oc);
@@ -2535,18 +2528,15 @@ void ack_lease (packet, lease, offer, when, msg, ms_nulltp, hp)
                /* Rebinding time is lease time * 0.875. */
                offered_lease_time += (offered_lease_time / 2
                                       + offered_lease_time / 4);
-               putULong ((unsigned char *)&state -> rebind,
-                         (unsigned)offered_lease_time);
+               putULong(state->rebind, (u_int32_t)offered_lease_time);
                i = DHO_DHCP_REBINDING_TIME;
                if (lookup_option (&dhcp_universe, state -> options, i))
                        log_error ("overriding dhcp-rebinding-time for %s.",
                              inet_ntoa (state -> ciaddr));
                oc = (struct option_cache *)0;
                if (option_cache_allocate (&oc, MDL)) {
-                       if (make_const_data (&oc -> expression,
-                                            (unsigned char *)&state -> rebind,
-                                            sizeof state -> rebind,
-                                            0, 0, MDL)) {
+                       if (make_const_data(&oc->expression, state->rebind,
+                                           4, 0, 0, MDL)) {
                                oc -> option = dhcp_universe.options [i];
                                save_option (&dhcp_universe,
                                             state -> options, oc);