diff -Nru isc-dhcp-4.3.5/debian/changelog isc-dhcp-4.3.5/debian/changelog --- isc-dhcp-4.3.5/debian/changelog 2017-01-19 12:11:21.000000000 -0500 +++ isc-dhcp-4.3.5/debian/changelog 2017-06-07 16:38:45.000000000 -0400 @@ -1,3 +1,12 @@ +isc-dhcp (4.3.5-3ubuntu2) artful; urgency=medium + + * Strip interface alias extension from interface names provided to + dhclient; all enumerated interface names also have their alias + extension stripped. Without this, DHCPv6 fails for interface aliases. + (LP: #1693819) + + -- Dan Streetman Wed, 07 Jun 2017 16:38:45 -0400 + isc-dhcp (4.3.5-3ubuntu1) zesty; urgency=low * Merge from Debian unstable. Remaining changes: diff -Nru isc-dhcp-4.3.5/debian/patches/series isc-dhcp-4.3.5/debian/patches/series --- isc-dhcp-4.3.5/debian/patches/series 2017-01-19 12:11:21.000000000 -0500 +++ isc-dhcp-4.3.5/debian/patches/series 2017-06-07 16:38:38.000000000 -0400 @@ -32,3 +32,4 @@ dhcp-improved-xid-correct-byte-order.patch dhcp-4.2.4-dhclient-options-changed.patch ubuntu-dhcpd-conf.patch +strip-interface-alias.patch diff -Nru isc-dhcp-4.3.5/debian/patches/strip-interface-alias.patch isc-dhcp-4.3.5/debian/patches/strip-interface-alias.patch --- isc-dhcp-4.3.5/debian/patches/strip-interface-alias.patch 1969-12-31 19:00:00.000000000 -0500 +++ isc-dhcp-4.3.5/debian/patches/strip-interface-alias.patch 2017-06-07 16:38:38.000000000 -0400 @@ -0,0 +1,39 @@ +Author: Dan Streetman +Description: Since isc-dhcp strips the interface alias from all + interfaces it enumerates, when comparing the cmdline interface + name to find the matching enumerated interface, the cmdline name + must have its alias stripped also. Without this, DHCPv6 fails + when using an interface alias. +Forwarded: yes +Bug: [ISC bug tracking is private; bug email has been sent] +Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/isc-dhcp/+bug/1693819 + + +Index: isc-dhcp-4.3.5/client/dhclient.c +=================================================================== +--- isc-dhcp-4.3.5.orig/client/dhclient.c ++++ isc-dhcp-4.3.5/client/dhclient.c +@@ -447,15 +447,19 @@ main(int argc, char **argv) { + " requested interface %s", argv[i]); + } else { + struct interface_info *tmp = NULL; ++ int len; + + status = interface_allocate(&tmp, MDL); + if (status != ISC_R_SUCCESS) + log_fatal("Can't record interface %s:%s", + argv[i], isc_result_totext(status)); +- if (strlen(argv[i]) >= sizeof(tmp->name)) +- log_fatal("%s: interface name too long (is %ld)", +- argv[i], (long)strlen(argv[i])); +- strcpy(tmp->name, argv[i]); ++ /* strip any interface alias, e.g. eth1:1 -> eth1 */ ++ len = strchrnul(argv[i], ':') - argv[i]; ++ if (len >= sizeof(tmp->name)) ++ log_fatal("%s: interface name too long (is %d)", ++ argv[i], len); ++ strncpy(tmp->name, argv[i], len); ++ tmp->name[len] = 0; + if (interfaces) { + interface_reference(&tmp->next, + interfaces, MDL);