dhcp: ensure getting DHCP IP config fails if the client died early
If the client never delivered any options to NM, make sure we don't return a valid IP config object to callers when they request one.
This commit is contained in:
@@ -915,6 +915,11 @@ nm_dhcp_client_get_ip4_config (NMDHCPClient *self, gboolean test)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!g_hash_table_size (priv->options)) {
|
||||||
|
/* We never got a response from the DHCP client */
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
return ip4_options_to_config (self);
|
return ip4_options_to_config (self);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1048,6 +1053,11 @@ nm_dhcp_client_get_ip6_config (NMDHCPClient *self, gboolean test)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!g_hash_table_size (priv->options)) {
|
||||||
|
/* We never got a response from the DHCP client */
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
return ip6_options_to_config (self);
|
return ip6_options_to_config (self);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -486,18 +486,23 @@ nm_system_device_set_ip6_route (const char *iface,
|
|||||||
|
|
||||||
/* Add the route */
|
/* Add the route */
|
||||||
err = rtnl_route_add (nlh, route, 0);
|
err = rtnl_route_add (nlh, route, 0);
|
||||||
|
g_message ("%s: 1 err %d", __func__, err);
|
||||||
if (err == -ESRCH && ip6_gateway) {
|
if (err == -ESRCH && ip6_gateway) {
|
||||||
/* Gateway might be over a bridge; try adding a route to gateway first */
|
/* Gateway might be over a bridge; try adding a route to gateway first */
|
||||||
struct rtnl_route *route2;
|
struct rtnl_route *route2;
|
||||||
|
|
||||||
|
g_message ("%s: 2", __func__);
|
||||||
route2 = create_route (iface_idx, mss);
|
route2 = create_route (iface_idx, mss);
|
||||||
if (route2) {
|
if (route2) {
|
||||||
|
g_message ("%s: 3", __func__);
|
||||||
/* Add route to gateway over bridge */
|
/* Add route to gateway over bridge */
|
||||||
rtnl_route_set_dst (route2, gw_addr);
|
rtnl_route_set_dst (route2, gw_addr);
|
||||||
err = rtnl_route_add (nlh, route2, 0);
|
err = rtnl_route_add (nlh, route2, 0);
|
||||||
|
g_message ("%s: 4 err %d", __func__, err);
|
||||||
if (!err) {
|
if (!err) {
|
||||||
/* Try adding the route again */
|
/* Try adding the route again */
|
||||||
err = rtnl_route_add (nlh, route, 0);
|
err = rtnl_route_add (nlh, route, 0);
|
||||||
|
g_message ("%s: 5 err %d", __func__, err);
|
||||||
if (err)
|
if (err)
|
||||||
rtnl_route_del (nlh, route2, 0);
|
rtnl_route_del (nlh, route2, 0);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user