chiark / gitweb /
libsystemd-dhcp: Fix receiving of other message when expecting Ack
authorPatrik Flykt <patrik.flykt@linux.intel.com>
Fri, 20 Dec 2013 15:16:14 +0000 (17:16 +0200)
committerTom Gundersen <teg@jklm.no>
Sun, 22 Dec 2013 13:28:00 +0000 (14:28 +0100)
When a DHCP Nak is received, return a DHCP_EVENT_NO_LEASE event. If
some other DHCP message is received or an error happens when parsing
options, return -ENOMSG in order to ignore the packet. There may be
more than one server serving the same subnet, each server will send
its Offer to the client.

src/libsystemd-dhcp/dhcp-client.c

index 18a6e3c..7dc1546 100644 (file)
@@ -731,8 +731,15 @@ static int client_receive_ack(sd_dhcp_client *client, DHCPPacket *offer,
         len = len - DHCP_IP_UDP_SIZE;
         r = dhcp_option_parse(&offer->dhcp, len, client_parse_offer, lease);
 
-        if (r != DHCP_ACK)
+        if (r == DHCP_NAK) {
+                r = DHCP_EVENT_NO_LEASE;
                 goto error;
+        }
+
+        if (r != DHCP_ACK) {
+                r = -ENOMSG;
+                goto error;
+        }
 
         lease->address = offer->dhcp.yiaddr;