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:
Dan Williams
2010-05-02 00:24:50 -07:00
parent c34cc017ba
commit 28d2c5592b
2 changed files with 15 additions and 0 deletions

View File

@@ -915,6 +915,11 @@ nm_dhcp_client_get_ip4_config (NMDHCPClient *self, gboolean test)
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);
}
@@ -1048,6 +1053,11 @@ nm_dhcp_client_get_ip6_config (NMDHCPClient *self, gboolean test)
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);
}

View File

@@ -486,18 +486,23 @@ nm_system_device_set_ip6_route (const char *iface,
/* Add the route */
err = rtnl_route_add (nlh, route, 0);
g_message ("%s: 1 err %d", __func__, err);
if (err == -ESRCH && ip6_gateway) {
/* Gateway might be over a bridge; try adding a route to gateway first */
struct rtnl_route *route2;
g_message ("%s: 2", __func__);
route2 = create_route (iface_idx, mss);
if (route2) {
g_message ("%s: 3", __func__);
/* Add route to gateway over bridge */
rtnl_route_set_dst (route2, gw_addr);
err = rtnl_route_add (nlh, route2, 0);
g_message ("%s: 4 err %d", __func__, err);
if (!err) {
/* Try adding the route again */
err = rtnl_route_add (nlh, route, 0);
g_message ("%s: 5 err %d", __func__, err);
if (err)
rtnl_route_del (nlh, route2, 0);
}