If we have already received gateway address via newroute rtnl
message, then do not overwrite it when receiving newaddr message.
Fixes BMC#25931
---
include/ipaddress.h | 2 +-
src/ipaddress.c | 16 ++++++----------
src/ipconfig.c | 4 ++--
3 files changed, 9 insertions(+), 13 deletions(-)
diff --git a/include/ipaddress.h b/include/ipaddress.h
index 9fff622..cc6848e 100644
--- a/include/ipaddress.h
+++ b/include/ipaddress.h
@@ -46,7 +46,7 @@ int connman_ipaddress_set_ipv6(struct connman_ipaddress
*ipaddress,
void connman_ipaddress_set_peer(struct connman_ipaddress *ipaddress,
const char *peer);
void connman_ipaddress_clear(struct connman_ipaddress *ipaddress);
-void connman_ipaddress_copy(struct connman_ipaddress *ipaddress,
+void connman_ipaddress_copy_address(struct connman_ipaddress *ipaddress,
struct connman_ipaddress *source);
#ifdef __cplusplus
diff --git a/src/ipaddress.c b/src/ipaddress.c
index e5af9a0..f66bb67 100644
--- a/src/ipaddress.c
+++ b/src/ipaddress.c
@@ -177,7 +177,12 @@ void connman_ipaddress_clear(struct connman_ipaddress
*ipaddress)
ipaddress->gateway = NULL;
}
-void connman_ipaddress_copy(struct connman_ipaddress *ipaddress,
+/*
+ * Note that this copy function only copies the actual address and
+ * prefixlen. If you need full copy of ipaddress struct, then you need
+ * to create a new function that does that.
+ */
+void connman_ipaddress_copy_address(struct connman_ipaddress *ipaddress,
struct connman_ipaddress *source)
{
if (ipaddress == NULL || source == NULL)
@@ -188,13 +193,4 @@ void connman_ipaddress_copy(struct connman_ipaddress
*ipaddress,
g_free(ipaddress->local);
ipaddress->local = g_strdup(source->local);
-
- g_free(ipaddress->peer);
- ipaddress->peer = g_strdup(source->peer);
-
- g_free(ipaddress->broadcast);
- ipaddress->broadcast = g_strdup(source->broadcast);
-
- g_free(ipaddress->gateway);
- ipaddress->gateway = g_strdup(source->gateway);
}
diff --git a/src/ipconfig.c b/src/ipconfig.c
index b400894..9f67e67 100644
--- a/src/ipconfig.c
+++ b/src/ipconfig.c
@@ -663,11 +663,11 @@ void __connman_ipconfig_newaddr(int index, int family,
const char *label,
__connman_ippool_newaddr(index, address, prefixlen);
if (ipdevice->config_ipv4 != NULL && family == AF_INET)
- connman_ipaddress_copy(ipdevice->config_ipv4->system,
+ connman_ipaddress_copy_address(ipdevice->config_ipv4->system,
ipaddress);
else if (ipdevice->config_ipv6 != NULL && family == AF_INET6)
- connman_ipaddress_copy(ipdevice->config_ipv6->system,
+ connman_ipaddress_copy_address(ipdevice->config_ipv6->system,
ipaddress);
else
return;
--
1.7.2.2
_______________________________________________
connman mailing list
[email protected]
http://lists.connman.net/listinfo/connman