diff options
Diffstat (limited to 'src/core/dhcp/nm-dhcp-nettools.c')
| -rw-r--r-- | src/core/dhcp/nm-dhcp-nettools.c | 28 |
1 files changed, 13 insertions, 15 deletions
diff --git a/src/core/dhcp/nm-dhcp-nettools.c b/src/core/dhcp/nm-dhcp-nettools.c index 27bb136b..ad9cb893 100644 --- a/src/core/dhcp/nm-dhcp-nettools.c +++ b/src/core/dhcp/nm-dhcp-nettools.c @@ -269,7 +269,7 @@ lease_parse_address(NMDhcpNettools *self /* for logging context only */, char str2[NM_INET_ADDRSTRLEN]; /* Some DHCP servers may not set the subnet-mask (issue#1037). - * Do the same as the dhclient plugin and use a default. */ + * Use a default. */ a_plen = nm_ip4_addr_get_default_prefix(a_address.s_addr); a_netmask = nm_ip4_addr_netmask_from_prefix(a_plen); _LOGT("missing subnet mask (option 1). Guess %s based on IP address %s", @@ -418,7 +418,6 @@ lease_parse_routes(NDhcp4ClientLease *lease, in_addr_t gateway; uint8_t plen; guint32 m; - gboolean has_router_from_classless = FALSE; gboolean has_classless = FALSE; guint32 default_route_metric_offset = 0; const guint8 *l_data; @@ -434,7 +433,7 @@ lease_parse_routes(NDhcp4ClientLease *lease, * We will however also parse one of the options into the "l3cd" for configuring routing. * Thereby we prefer 121 over 249 over 33. * - * Preferring 121 over 33 is defined by RFC 3443. + * Preferring 121 over 33 is defined by RFC 3442. * Preferring 121 over 249 over 33 is made up as it makes sense (the MS docs are not very clear). */ for (i = 0; i < 2; i++) { @@ -460,8 +459,7 @@ lease_parse_routes(NDhcp4ClientLease *lease, if (plen == 0) { /* if there are multiple default routes, we add them with differing * metrics. */ - m = default_route_metric_offset++; - has_router_from_classless = TRUE; + m = default_route_metric_offset++; } else m = 0; @@ -495,7 +493,7 @@ lease_parse_routes(NDhcp4ClientLease *lease, nm_str_buf_append_printf(sbuf, "%s/%d %s", dest_str, (int) plen, gateway_str); if (has_classless) { - /* RFC 3443: if the DHCP server returns both a Classless Static Routes + /* RFC 3442: if the DHCP server returns both a Classless Static Routes * option and a Static Routes option, the DHCP client MUST ignore the * Static Routes option. */ continue; @@ -539,13 +537,10 @@ lease_parse_routes(NDhcp4ClientLease *lease, continue; } - if (has_router_from_classless) { - /* If the DHCP server returns both a Classless Static Routes option and a - * Router option, the DHCP client MUST ignore the Router option [RFC 3442]. - * - * Be more lenient and ignore the Router option only if Classless Static - * Routes contain a default gateway (as other DHCP backends do). - */ + if (has_classless) { + /* RFC 3442: if the DHCP server returns both a Classless Static Routes + * option and a Router option, the DHCP client MUST ignore the Router + * option. */ continue; } @@ -1475,7 +1470,9 @@ ip4_start(NMDhcpClient *client, GError **error) } else { fqdn_len = strlen(client_config->hostname); if (fqdn_len > sizeof(buffer) - 3) { - nm_utils_error_set(error, r, "failed to set DHCP FQDN: name too long"); + nm_utils_error_set_literal(error, + NM_UTILS_ERROR_UNKNOWN, + "failed to set DHCP FQDN: name too long"); return FALSE; } memcpy(buffer + 3, client_config->hostname, fqdn_len); @@ -1530,7 +1527,8 @@ ip4_start(NMDhcpClient *client, GError **error) _LOGT("dhcp-client4: start " NM_HASH_OBFUSCATE_PTR_FMT, NM_HASH_OBFUSCATE_PTR(priv->client)); - nm_dhcp_client_set_effective_client_id(client, effective_client_id); + if (effective_client_id) + nm_dhcp_client_set_effective_client_id(client, effective_client_id); return TRUE; } |