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:
@@ -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));
|
||||
}
|
||||
|
||||
|
@@ -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));
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user