From: Martin Xu Date: Tue, 9 Feb 2010 09:29:51 +0000 (+0100) Subject: Check for ipaddress local and broadcast pointers X-Git-Tag: accepted/2.0alpha-wayland/20121110.002834~2845 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=b27abe33c7fe43ecbbc3cb5dfaa128bedb45f472;p=profile%2Fivi%2Fconnman.git Check for ipaddress local and broadcast pointers If local is NULL we return an error. If broadcast is NULL, we use the local address prefix to build a broadcast one. --- diff --git a/src/inet.c b/src/inet.c index 5838008..4e79fe8 100644 --- a/src/inet.c +++ b/src/inet.c @@ -547,6 +547,11 @@ int connman_inet_set_address(int index, struct connman_ipaddress *ipaddress) DBG("ifname %s", ifr.ifr_name); + if (ipaddress->local == NULL) { + close(sk); + return -1; + } + memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_addr.s_addr = inet_addr(ipaddress->local); @@ -569,7 +574,13 @@ int connman_inet_set_address(int index, struct connman_ipaddress *ipaddress) memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; - addr.sin_addr.s_addr = inet_addr(ipaddress->broadcast); + + if (ipaddress->broadcast != NULL) + addr.sin_addr.s_addr = inet_addr(ipaddress->broadcast); + else + addr.sin_addr.s_addr = inet_addr(ipaddress->local) | + htonl(0xfffffffflu >> ipaddress->prefixlen); + memcpy(&ifr.ifr_broadaddr, &addr, sizeof(ifr.ifr_broadaddr)); err = ioctl(sk, SIOCSIFBRDADDR, &ifr);