From 0e408b82b8bd7675234cf58009475d4f4c0a491a Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Fri, 23 Nov 2018 13:42:13 +0100 Subject: [PATCH] dhcp6-client: handle IAID with value zero config_parse_iaid(), dhcp_identifier_set_iaid() and sd_dhcp6_client_set_iaid() all allow for the IAID to be zero. Also, RFC 3315 makes no mention that zero would be invalid. However, client_ensure_iaid() would take an IAID of zero as a sign that the values was unset. Fix that by keeping track whether IAID is initialized. --- src/libsystemd-network/sd-dhcp6-client.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/libsystemd-network/sd-dhcp6-client.c b/src/libsystemd-network/sd-dhcp6-client.c index c81c0f09558..555ae5f5ec0 100644 --- a/src/libsystemd-network/sd-dhcp6-client.c +++ b/src/libsystemd-network/sd-dhcp6-client.c @@ -56,6 +56,7 @@ struct sd_dhcp6_client { struct sd_dhcp6_lease *lease; int fd; bool information_request; + bool has_iaid; be16_t *req_opts; size_t req_opts_allocated; size_t req_opts_len; @@ -267,6 +268,7 @@ int sd_dhcp6_client_set_iaid(sd_dhcp6_client *client, uint32_t iaid) { client->ia_na.ia_na.id = htobe32(iaid); client->ia_pd.ia_pd.id = htobe32(iaid); + client->has_iaid = true; return 0; } @@ -790,7 +792,7 @@ static int client_ensure_iaid(sd_dhcp6_client *client) { assert(client); - if (client->ia_na.ia_na.id) + if (client->has_iaid) return 0; r = dhcp_identifier_set_iaid(client->ifindex, client->mac_addr, client->mac_addr_len, true, &iaid); @@ -799,6 +801,7 @@ static int client_ensure_iaid(sd_dhcp6_client *client) { client->ia_na.ia_na.id = iaid; client->ia_pd.ia_pd.id = iaid; + client->has_iaid = true; return 0; } -- 2.47.3