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)
|
NMIP4Address *address)
|
||||||
{
|
{
|
||||||
NMIP4ConfigPrivate *priv;
|
NMIP4ConfigPrivate *priv;
|
||||||
|
GSList *iter;
|
||||||
|
|
||||||
g_return_if_fail (NM_IS_IP4_CONFIG (config));
|
g_return_if_fail (NM_IS_IP4_CONFIG (config));
|
||||||
g_return_if_fail (address != NULL);
|
g_return_if_fail (address != NULL);
|
||||||
|
|
||||||
priv = NM_IP4_CONFIG_GET_PRIVATE (config);
|
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));
|
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);
|
guint32 s = g_array_index (priv->nameservers, guint32, i);
|
||||||
|
|
||||||
/* No dupes */
|
/* No dupes */
|
||||||
g_return_if_fail (nameserver != s);
|
if (nameserver == s)
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
g_array_append_val (priv->nameservers, nameserver);
|
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);
|
guint32 s = g_array_index (priv->wins, guint32, i);
|
||||||
|
|
||||||
/* No dupes */
|
/* No dupes */
|
||||||
g_return_if_fail (wins != s);
|
if (wins == s)
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
g_array_append_val (priv->wins, wins);
|
g_array_append_val (priv->wins, wins);
|
||||||
@@ -301,11 +309,17 @@ void
|
|||||||
nm_ip4_config_add_route (NMIP4Config *config, NMIP4Route *route)
|
nm_ip4_config_add_route (NMIP4Config *config, NMIP4Route *route)
|
||||||
{
|
{
|
||||||
NMIP4ConfigPrivate *priv;
|
NMIP4ConfigPrivate *priv;
|
||||||
|
GSList *iter;
|
||||||
|
|
||||||
g_return_if_fail (NM_IS_IP4_CONFIG (config));
|
g_return_if_fail (NM_IS_IP4_CONFIG (config));
|
||||||
g_return_if_fail (route != NULL);
|
g_return_if_fail (route != NULL);
|
||||||
|
|
||||||
priv = NM_IP4_CONFIG_GET_PRIVATE (config);
|
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));
|
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)
|
NMIP6Address *address)
|
||||||
{
|
{
|
||||||
NMIP6ConfigPrivate *priv;
|
NMIP6ConfigPrivate *priv;
|
||||||
|
GSList *iter;
|
||||||
|
|
||||||
g_return_if_fail (NM_IS_IP6_CONFIG (config));
|
g_return_if_fail (NM_IS_IP6_CONFIG (config));
|
||||||
g_return_if_fail (address != NULL);
|
g_return_if_fail (address != NULL);
|
||||||
|
|
||||||
priv = NM_IP6_CONFIG_GET_PRIVATE (config);
|
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));
|
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 */
|
/* No dupes */
|
||||||
nameservers = (struct in6_addr *)priv->nameservers->data;
|
nameservers = (struct in6_addr *)priv->nameservers->data;
|
||||||
for (i = 0; i < priv->nameservers->len; i++)
|
for (i = 0; i < priv->nameservers->len; i++) {
|
||||||
g_return_if_fail (IN6_ARE_ADDR_EQUAL (nameserver, &nameservers[i]) == FALSE);
|
if (IN6_ARE_ADDR_EQUAL (nameserver, &nameservers[i]))
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
g_array_append_val (priv->nameservers, *nameserver);
|
g_array_append_val (priv->nameservers, *nameserver);
|
||||||
}
|
}
|
||||||
@@ -252,11 +260,17 @@ void
|
|||||||
nm_ip6_config_add_route (NMIP6Config *config, NMIP6Route *route)
|
nm_ip6_config_add_route (NMIP6Config *config, NMIP6Route *route)
|
||||||
{
|
{
|
||||||
NMIP6ConfigPrivate *priv;
|
NMIP6ConfigPrivate *priv;
|
||||||
|
GSList *iter;
|
||||||
|
|
||||||
g_return_if_fail (NM_IS_IP6_CONFIG (config));
|
g_return_if_fail (NM_IS_IP6_CONFIG (config));
|
||||||
g_return_if_fail (route != NULL);
|
g_return_if_fail (route != NULL);
|
||||||
|
|
||||||
priv = NM_IP6_CONFIG_GET_PRIVATE (config);
|
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));
|
priv->routes = g_slist_append (priv->routes, nm_ip6_route_dup (route));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user