diff options
| author | Michael Forney <mforney@mforney.org> | 2017-02-07 17:52:11 -0800 |
|---|---|---|
| committer | Michael Forney <mforney@mforney.org> | 2017-02-07 17:52:11 -0800 |
| commit | 9860997f10dcebb25962ae1ded9360ab68127c39 (patch) | |
| tree | 5849f9cdf1c3ec166ed126fc8a252ad351373248 /pkg | |
| parent | 77d086f84010b1bf9331da353cccfdf7d3d6c888 (diff) | |
sdhcp: Fix lease time bug
Diffstat (limited to 'pkg')
| -rw-r--r-- | pkg/sdhcp/patch/0002-Fix-sent-lease-time-on-64-bit-systems.patch | 59 | ||||
| -rw-r--r-- | pkg/sdhcp/rev | 2 |
2 files changed, 60 insertions, 1 deletions
diff --git a/pkg/sdhcp/patch/0002-Fix-sent-lease-time-on-64-bit-systems.patch b/pkg/sdhcp/patch/0002-Fix-sent-lease-time-on-64-bit-systems.patch new file mode 100644 index 00000000..f28f54f5 --- /dev/null +++ b/pkg/sdhcp/patch/0002-Fix-sent-lease-time-on-64-bit-systems.patch @@ -0,0 +1,59 @@ +From 3e4ba21a6b51000c0d535a9a86a6bb6f9eb34496 Mon Sep 17 00:00:00 2001 +From: Michael Forney <mforney@mforney.org> +Date: Tue, 7 Feb 2017 17:16:21 -0800 +Subject: [PATCH] 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. +--- + sdhcp.c | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +diff --git a/sdhcp.c b/sdhcp.c +index c5f986a..7b8c687 100644 +--- 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; +-- +2.11.1 + diff --git a/pkg/sdhcp/rev b/pkg/sdhcp/rev index 0cfbf088..00750edc 100644 --- a/pkg/sdhcp/rev +++ b/pkg/sdhcp/rev @@ -1 +1 @@ -2 +3 |
