Fix sent lease time on 64-bit systems - sdhcp - simple dhcp client | |
git clone git://git.codemadness.org/sdhcp | |
Log | |
Files | |
Refs | |
LICENSE | |
--- | |
commit 90b18e7b1cfcf7ab0799b917d7c4d1318ed29f57 | |
parent 450beea4e88ab7f80206741f18f0d5539ae60b44 | |
Author: Michael Forney <[email protected]> | |
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(-) | |
--- | |
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… | |
} | |
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; |