dhcpcd: update to 6.11.1

This commit is contained in:
Juergen Daubert 2016-06-20 12:21:25 +02:00
parent 0d3b3204ab
commit 01537b93a2
3 changed files with 4 additions and 85 deletions

View File

@ -1,2 +1 @@
8c1340a53fd7e56d32bb6fef6e1354ee dhcpcd-6.11.0.tar.xz
5c1e9f596840d38affc4bddbc5e6eeb6 dhcpcd-truncated-packet.patch
8acf2c0295f0c132a1e9f8060665b53d dhcpcd-6.11.1.tar.xz

View File

@ -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 \

View File

@ -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__))