From cca40524ac108eec7ca0337b02b52f1eb0f37b0c Mon Sep 17 00:00:00 2001 From: Dan Winship Date: Mon, 14 May 2012 10:35:39 -0400 Subject: [PATCH] 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) --- src/nm-ip4-config.c | 18 ++++++++++++++++-- src/nm-ip6-config.c | 18 ++++++++++++++++-- 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/src/nm-ip4-config.c b/src/nm-ip4-config.c index ef284d80e..9a3528491 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 f06e4069c..0429e30b2 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)); }