Fix sent lease time on 64-bit systems - sdhcp - simple dhcp client
 (HTM) git clone git://git.codemadness.org/sdhcp
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) LICENSE
       ---
 (DIR) commit 90b18e7b1cfcf7ab0799b917d7c4d1318ed29f57
 (DIR) parent 450beea4e88ab7f80206741f18f0d5539ae60b44
 (HTM) Author: Michael Forney <mforney@mforney.org>
       Date:   Thu,  9 Feb 2017 13:42:27 -0800
       
       Fix sent lease time on 64-bit systems
       
       The lease time option is defined in RFC 1533 to be a 32-bit unsigned
       integer. However, on 64-bit systems, unsigned long long is 64 bits, so
       hnput writes 8 bytes, the first 4 of which are 0.
       
       dnsmasq (and possibly other DHCP servers) only looks at the first 4
       bytes in the option, so interprets a lease time of 0. It then sets the
       lease time to a minimum of 120 seconds. This causes the server to expire
       the lease long before sdhcp attempts to renew it.
       
       Diffstat:
         M sdhcp.c                             |       7 ++++---
       
       1 file changed, 4 insertions(+), 3 deletions(-)
       ---
 (DIR) diff --git a/sdhcp.c b/sdhcp.c
       @@ -9,6 +9,7 @@
        #include <fcntl.h>
        #include <poll.h>
        #include <signal.h>
       +#include <stdint.h>
        #include <stdio.h>
        #include <stdlib.h>
        #include <string.h>
       @@ -95,7 +96,7 @@ static unsigned char client[4];
        static unsigned char mask[4];
        static unsigned char router[4];
        static unsigned char dns[4];
       -static unsigned long t1;
       +static uint32_t t1;
        
        static int dflag = 1; /* change DNS in /etc/resolv.conf ? */
        static int iflag = 1; /* set IP ? */
       @@ -104,7 +105,7 @@ static int fflag = 0; /* run in foreground */
        #define IP(a,b,c,d) (unsigned char[4]){a,b,c,d}
        
        static void
       -hnput(unsigned char *dst, unsigned long long src, size_t n)
       +hnput(unsigned char *dst, uint32_t src, size_t n)
        {
                unsigned int i;
        
       @@ -249,7 +250,7 @@ optput(unsigned char *p, int opt, unsigned char *data, size_t len)
        }
        
        static unsigned char *
       -hnoptput(unsigned char *p, int opt, long long data, size_t len)
       +hnoptput(unsigned char *p, int opt, uint32_t data, size_t len)
        {
                *p++ = opt;
                *p++ = (unsigned char)len;