summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Winship <danw@gnome.org>2012-05-14 10:35:39 -0400
committerDan Winship <danw@gnome.org>2012-05-15 13:51:37 -0400
commitcca40524ac108eec7ca0337b02b52f1eb0f37b0c (patch)
tree6bec35dce4924e5272ed88157898c7d76e42a516
parent682cd735245ed58a1566fde539ec30960fb34535 (diff)
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)
-rw-r--r--src/nm-ip4-config.c18
-rw-r--r--src/nm-ip6-config.c18
2 files changed, 32 insertions, 4 deletions
diff --git a/src/nm-ip4-config.c b/src/nm-ip4-config.c
index ef284d80ee..9a3528491d 100644
--- a/src/nm-ip4-config.c
+++ b/src/nm-ip4-config.c
@@ -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));
}
diff --git a/src/nm-ip6-config.c b/src/nm-ip6-config.c
index f06e4069c4..0429e30b26 100644
--- a/src/nm-ip6-config.c
+++ b/src/nm-ip6-config.c
@@ -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));
}