diff --git a/dhcpcd/.md5sum b/dhcpcd/.md5sum index 47571288..725d986c 100644 --- a/dhcpcd/.md5sum +++ b/dhcpcd/.md5sum @@ -1,2 +1 @@ -8c1340a53fd7e56d32bb6fef6e1354ee dhcpcd-6.11.0.tar.xz -5c1e9f596840d38affc4bddbc5e6eeb6 dhcpcd-truncated-packet.patch +8acf2c0295f0c132a1e9f8060665b53d dhcpcd-6.11.1.tar.xz diff --git a/dhcpcd/Pkgfile b/dhcpcd/Pkgfile index 52dbffd4..c65f35b1 100644 --- a/dhcpcd/Pkgfile +++ b/dhcpcd/Pkgfile @@ -4,16 +4,13 @@ # Depends on: eudev name=dhcpcd -version=6.11.0 -release=2 -source=(http://roy.marples.name/downloads/dhcpcd/$name-$version.tar.xz - dhcpcd-truncated-packet.patch) +version=6.11.1 +release=1 +source=(http://roy.marples.name/downloads/dhcpcd/$name-$version.tar.xz) build () { cd $name-$version - patch -p0 <$SRC/dhcpcd-truncated-packet.patch - ./configure --prefix= \ --libexecdir=/lib/dhcpcd \ --dbdir=/var/lib/dhcpcd \ diff --git a/dhcpcd/dhcpcd-truncated-packet.patch b/dhcpcd/dhcpcd-truncated-packet.patch deleted file mode 100644 index c21fd605..00000000 --- a/dhcpcd/dhcpcd-truncated-packet.patch +++ /dev/null @@ -1,77 +0,0 @@ -Index: dhcp.c -================================================================== ---- dhcp.c -+++ dhcp.c -@@ -1082,13 +1082,16 @@ - } - - *p++ = DHO_END; - len = (size_t)(p - (uint8_t *)bootp); - -- /* Pad out to the BOOTP minimum message length. -- * Some DHCP servers incorrectly require this. */ -- while (len < BOOTP_MESSAGE_LENTH_MIN) { -+ /* Pad out to the BOOTP message length. -+ * Even if we send a DHCP packet with a variable length vendor area, -+ * some servers / relay agents don't like packets smaller than -+ * a BOOTP message which is fine because that's stipulated -+ * in RFC1542 section 2.1. */ -+ while (len < sizeof(*bootp)) { - *p++ = DHO_PAD; - len++; - } - - if (ifo->auth.options & DHCPCD_AUTH_SEND && auth_len != 0) -@@ -3134,18 +3137,30 @@ - { - logger(ifp->ctx, LOG_WARNING, - "%s: server %s is not destination", - ifp->name, inet_ntoa(from)); - } -- -+ /* -+ * DHCP has a variable option area rather than a fixed -+ * vendor area. -+ * Because DHCP uses the BOOTP protocol it should -+ * still send BOOTP sized packets to be RFC compliant. -+ * However some servers send a truncated vendor area. -+ * dhcpcd can work fine without the vendor area being sent. -+ */ - bytes = get_udp_data(&bootp, buf); -- if (bytes < sizeof(struct bootp)) { -+ if (bytes < offsetof(struct bootp, vend)) { - logger(ifp->ctx, LOG_ERR, - "%s: truncated packet (%zu) from %s", - ifp->name, bytes, inet_ntoa(from)); - continue; - } -+ /* But to make our IS_DHCP macro easy, ensure the vendor -+ * area has at least 4 octets. */ -+ while (bytes < offsetof(struct bootp, vend) + 4) -+ bootp[bytes++] = '\0'; -+ - dhcp_handledhcp(ifp, (struct bootp *)bootp, bytes, &from); - if (state->raw_fd == -1) - break; - } - } - -Index: dhcp.h -================================================================== ---- dhcp.h -+++ dhcp.h -@@ -129,13 +129,10 @@ - FQDN_NONE = 0x18, - FQDN_PTR = 0x20, - FQDN_BOTH = 0x31 - }; - --/* Some crappy DHCP servers require the BOOTP minimum length */ --#define BOOTP_MESSAGE_LENTH_MIN 300 -- - /* Don't import common.h as that defines __unused which causes problems - * on some Linux systems which define it as part of a structure */ - #if __GNUC__ > 2 || defined(__INTEL_COMPILER) - # ifndef __packed - # define __packed __attribute__((__packed__)) -