From 90b54352d367af90c5d774597403486d2a8636bb Mon Sep 17 00:00:00 2001 From: Jiri Popelka Date: Feb 03 2015 11:58:03 +0000 Subject: send unicast request/release via correct interface (#800561, #1177351) --- diff --git a/dhcp-client-request-release-bind-iface.patch b/dhcp-client-request-release-bind-iface.patch new file mode 100644 index 0000000..e6df2c1 --- /dev/null +++ b/dhcp-client-request-release-bind-iface.patch @@ -0,0 +1,61 @@ +diff -up dhcp-4.3.1/client/dhclient.c.bind-iface dhcp-4.3.1/client/dhclient.c +--- dhcp-4.3.1/client/dhclient.c.bind-iface 2015-02-03 12:06:57.040989568 +0100 ++++ dhcp-4.3.1/client/dhclient.c 2015-02-03 12:08:28.716684946 +0100 +@@ -2661,6 +2661,14 @@ void send_request (cpp) + + if (destination.sin_addr.s_addr != INADDR_BROADCAST && + fallback_interface) { ++#if defined(SO_BINDTODEVICE) ++ if (setsockopt(fallback_interface -> wfdesc, SOL_SOCKET, ++ SO_BINDTODEVICE, client->interface->name, ++ strlen(client->interface->name)) < 0) { ++ log_error("%s:%d: Failed to bind fallback interface" ++ " to %s: %m", MDL, client->interface->name); ++ } ++#endif + result = send_packet(fallback_interface, NULL, &client->packet, + client->packet_length, from, &destination, + NULL); +@@ -2670,6 +2678,13 @@ void send_request (cpp) + client->packet_length, + fallback_interface->name); + } ++#if defined(SO_BINDTODEVICE) ++ if (setsockopt(fallback_interface -> wfdesc, SOL_SOCKET, ++ SO_BINDTODEVICE, NULL, 0) < 0) { ++ log_fatal("%s:%d: Failed to unbind fallback interface:" ++ " %m", MDL); ++ } ++#endif + } + else { + /* Send out a packet. */ +@@ -2749,6 +2764,14 @@ void send_release (cpp) + ntohs (destination.sin_port), ntohl(client -> xid)); + + if (fallback_interface) { ++#if defined(SO_BINDTODEVICE) ++ if (setsockopt(fallback_interface -> wfdesc, SOL_SOCKET, ++ SO_BINDTODEVICE, client->interface->name, ++ strlen(client->interface->name)) < 0) { ++ log_error("%s:%d: Failed to bind fallback interface" ++ " to %s: %m", MDL, client->interface->name); ++ } ++#endif + result = send_packet(fallback_interface, NULL, &client->packet, + client->packet_length, from, &destination, + NULL); +@@ -2758,6 +2781,13 @@ void send_release (cpp) + client->packet_length, + fallback_interface->name); + } ++#if defined(SO_BINDTODEVICE) ++ if (setsockopt(fallback_interface -> wfdesc, SOL_SOCKET, ++ SO_BINDTODEVICE, NULL, 0) < 0) { ++ log_fatal("%s:%d: Failed to unbind fallback interface:" ++ " %m", MDL); ++ } ++#endif + } else { + /* Send out a packet. */ + result = send_packet(client->interface, NULL, &client->packet, diff --git a/dhcp.spec b/dhcp.spec index 77bbccf..717b566 100644 --- a/dhcp.spec +++ b/dhcp.spec @@ -18,7 +18,7 @@ Summary: Dynamic host configuration protocol software Name: dhcp Version: 4.3.1 -Release: 11%{?dist} +Release: 12%{?dist} # NEVER CHANGE THE EPOCH on this package. The previous maintainer (prior to # dcantrell maintaining the package) made incorrect use of the epoch and # that's why it is at 12 now. It should have never been used, but it was. @@ -77,6 +77,7 @@ Patch37: dhcp-dhc6-life.patch Patch38: dhcp-skip-vlan.patch Patch39: dhcp-relay-hop-limit.patch +Patch40: dhcp-client-request-release-bind-iface.patch Patch100: dhcp-bind996.patch BuildRequires: autoconf @@ -335,6 +336,9 @@ rm -rf includes/isc-dhcp # (Submitted to dhcp-bugs@isc.org - [ISC-Bugs #37426]) %patch39 -p1 -b .hop-limit +# send unicast request/release via correct interface (#800561, #1177351) +%patch40 -p1 -b .bind-iface + # to build against bind-9.9.6 %patch100 -p1 -b .bind996 @@ -609,6 +613,9 @@ done %doc doc/html/ %changelog +* Tue Feb 03 2015 Jiri Popelka - 12:4.3.1-12 +- send unicast request/release via correct interface (#800561, #1177351) + * Wed Nov 19 2014 Jiri Popelka - 12:4.3.1-11 - amend post scriptlets for #1120656