ipconfig: Do not overwrite gateway address
authorJukka Rissanen <jukka.rissanen@linux.intel.com>
Fri, 1 Feb 2013 10:21:06 +0000 (12:21 +0200)
committerPatrik Flykt <patrik.flykt@linux.intel.com>
Tue, 5 Feb 2013 11:29:04 +0000 (13:29 +0200)
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
src/ipaddress.c
src/ipconfig.c

index 9fff622..cc6848e 100644 (file)
@@ -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
index e5af9a0..f66bb67 100644 (file)
@@ -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);
 }
index 9ca3316..824a301 100644 (file)
@@ -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;