core: silently ignore duplicates in NMIP[46]Config

The various nm_ip[46]_config_add_* routines were inconsistent in their
behavior when trying to add a duplicate item: add_address() and
add_route() would add it anyway; add_nameserver() and add_wins() would
g_return_if_fail(); and add_domain() and add_search() would return
silently. Update to use the "return silently" behavior everywhere.

In particular: if we get an RDNSS message listing the same nameserver
twice, don't cause a warning. (rh #820752)
This commit is contained in:
Dan Winship
2012-05-14 10:35:39 -04:00
parent 682cd73524
commit cca40524ac
2 changed files with 32 additions and 4 deletions

View File

@@ -143,11 +143,17 @@ nm_ip4_config_add_address (NMIP4Config *config,
NMIP4Address *address)
{
NMIP4ConfigPrivate *priv;
GSList *iter;
g_return_if_fail (NM_IS_IP4_CONFIG (config));
g_return_if_fail (address != NULL);
priv = NM_IP4_CONFIG_GET_PRIVATE (config);
for (iter = priv->addresses; iter; iter = g_slist_next (iter)) {
if (nm_ip4_address_compare ((NMIP4Address *) iter->data, address))
return;
}
priv->addresses = g_slist_append (priv->addresses, nm_ip4_address_dup (address));
}
@@ -210,7 +216,8 @@ void nm_ip4_config_add_nameserver (NMIP4Config *config, guint32 nameserver)
guint32 s = g_array_index (priv->nameservers, guint32, i);
/* No dupes */
g_return_if_fail (nameserver != s);
if (nameserver == s)
return;
}
g_array_append_val (priv->nameservers, nameserver);
@@ -254,7 +261,8 @@ void nm_ip4_config_add_wins (NMIP4Config *config, guint32 wins)
guint32 s = g_array_index (priv->wins, guint32, i);
/* No dupes */
g_return_if_fail (wins != s);
if (wins == s)
return;
}
g_array_append_val (priv->wins, wins);
@@ -301,11 +309,17 @@ void
nm_ip4_config_add_route (NMIP4Config *config, NMIP4Route *route)
{
NMIP4ConfigPrivate *priv;
GSList *iter;
g_return_if_fail (NM_IS_IP4_CONFIG (config));
g_return_if_fail (route != NULL);
priv = NM_IP4_CONFIG_GET_PRIVATE (config);
for (iter = priv->routes; iter; iter = g_slist_next (iter)) {
if (nm_ip4_route_compare ((NMIP4Route *) iter->data, route))
return;
}
priv->routes = g_slist_append (priv->routes, nm_ip4_route_dup (route));
}

View File

@@ -138,11 +138,17 @@ nm_ip6_config_add_address (NMIP6Config *config,
NMIP6Address *address)
{
NMIP6ConfigPrivate *priv;
GSList *iter;
g_return_if_fail (NM_IS_IP6_CONFIG (config));
g_return_if_fail (address != NULL);
priv = NM_IP6_CONFIG_GET_PRIVATE (config);
for (iter = priv->addresses; iter; iter = g_slist_next (iter)) {
if (nm_ip6_address_compare ((NMIP6Address *) iter->data, address))
return;
}
priv->addresses = g_slist_append (priv->addresses, nm_ip6_address_dup (address));
}
@@ -205,8 +211,10 @@ void nm_ip6_config_add_nameserver (NMIP6Config *config, const struct in6_addr *n
/* No dupes */
nameservers = (struct in6_addr *)priv->nameservers->data;
for (i = 0; i < priv->nameservers->len; i++)
g_return_if_fail (IN6_ARE_ADDR_EQUAL (nameserver, &nameservers[i]) == FALSE);
for (i = 0; i < priv->nameservers->len; i++) {
if (IN6_ARE_ADDR_EQUAL (nameserver, &nameservers[i]))
return;
}
g_array_append_val (priv->nameservers, *nameserver);
}
@@ -252,11 +260,17 @@ void
nm_ip6_config_add_route (NMIP6Config *config, NMIP6Route *route)
{
NMIP6ConfigPrivate *priv;
GSList *iter;
g_return_if_fail (NM_IS_IP6_CONFIG (config));
g_return_if_fail (route != NULL);
priv = NM_IP6_CONFIG_GET_PRIVATE (config);
for (iter = priv->routes; iter; iter = g_slist_next (iter)) {
if (nm_ip6_route_compare ((NMIP6Route *) iter->data, route))
return;
}
priv->routes = g_slist_append (priv->routes, nm_ip6_route_dup (route));
}