diff -Nru connman-1.19~201311241529/debian/changelog connman-1.19~201311291517/debian/changelog --- connman-1.19~201311241529/debian/changelog 2013-11-24 11:29:54.000000000 +0000 +++ connman-1.19~201311291517/debian/changelog 2013-11-29 11:17:15.000000000 +0000 @@ -1,4 +1,4 @@ -connman (1.19~201311241529-1ppa1~raring) raring; urgency=high +connman (1.19~201311291517-1ppa1~raring) raring; urgency=high * Autobuild. diff -Nru connman-1.19~201311241529/gdhcp/ipv4ll.c connman-1.19~201311291517/gdhcp/ipv4ll.c --- connman-1.19~201311241529/gdhcp/ipv4ll.c 2013-11-21 10:23:13.000000000 +0000 +++ connman-1.19~201311291517/gdhcp/ipv4ll.c 2013-11-27 11:09:09.000000000 +0000 @@ -122,10 +122,13 @@ { int fd; struct sockaddr_ll sock; + fd = socket(PF_PACKET, SOCK_DGRAM | SOCK_CLOEXEC, htons(ETH_P_ARP)); if (fd < 0) return fd; + memset(&sock, 0, sizeof(sock)); + sock.sll_family = AF_PACKET; sock.sll_protocol = htons(ETH_P_ARP); sock.sll_ifindex = ifindex; diff -Nru connman-1.19~201311241529/plugins/wifi.c connman-1.19~201311291517/plugins/wifi.c --- connman-1.19~201311241529/plugins/wifi.c 2013-11-21 10:23:13.000000000 +0000 +++ connman-1.19~201311291517/plugins/wifi.c 2013-11-27 11:09:09.000000000 +0000 @@ -960,8 +960,7 @@ str = g_key_file_get_string(keyfile, services[i], "Favorite", NULL); if (!str || g_strcmp0(str, "true")) { - if (str) - g_free(str); + g_free(str); g_key_file_free(keyfile); continue; } @@ -970,8 +969,7 @@ str = g_key_file_get_string(keyfile, services[i], "AutoConnect", NULL); if (!str || g_strcmp0(str, "true")) { - if (str) - g_free(str); + g_free(str); g_key_file_free(keyfile); continue; } @@ -979,10 +977,12 @@ str = g_key_file_get_string(keyfile, services[i], "Modified", NULL); - if (str) { - g_time_val_from_iso8601(str, &modified); - g_free(str); + if (!str) { + g_key_file_free(keyfile); + continue; } + g_time_val_from_iso8601(str, &modified); + g_free(str); ssid = g_key_file_get_string(keyfile, services[i], "SSID", NULL); diff -Nru connman-1.19~201311241529/src/6to4.c connman-1.19~201311291517/src/6to4.c --- connman-1.19~201311241529/src/6to4.c 2013-11-21 10:23:13.000000000 +0000 +++ connman-1.19~201311291517/src/6to4.c 2013-11-27 11:09:09.000000000 +0000 @@ -77,9 +77,9 @@ p.iph.protocol = IPPROTO_IPV6; p.iph.saddr = addr->s_addr; p.iph.ttl = 64; - strncpy(p.name, "tun6to4", IFNAMSIZ); + strncpy(p.name, "tun6to4", sizeof(p.name) - 1); - strncpy(ifr.ifr_name, "sit0", IFNAMSIZ); + strncpy(ifr.ifr_name, "sit0", sizeof(ifr.ifr_name) - 1); ifr.ifr_ifru.ifru_data = (void *)&p; fd = socket(AF_INET, SOCK_DGRAM | SOCK_CLOEXEC, 0); ret = ioctl(fd, SIOCADDTUNNEL, &ifr); @@ -109,9 +109,9 @@ p.iph.version = 4; p.iph.ihl = 5; p.iph.protocol = IPPROTO_IPV6; - strncpy(p.name, "tun6to4", IFNAMSIZ); + strncpy(p.name, "tun6to4", sizeof(p.name) - 1); - strncpy(ifr.ifr_name, "tun6to4", IFNAMSIZ); + strncpy(ifr.ifr_name, "tun6to4", sizeof(ifr.ifr_name) - 1); ifr.ifr_ifru.ifru_data = (void *)&p; fd = socket(AF_INET, SOCK_DGRAM | SOCK_CLOEXEC, 0); if (fd < 0) { diff -Nru connman-1.19~201311241529/src/dbus.c connman-1.19~201311291517/src/dbus.c --- connman-1.19~201311241529/src/dbus.c 2013-11-21 10:23:13.000000000 +0000 +++ connman-1.19~201311291517/src/dbus.c 2013-11-27 11:09:09.000000000 +0000 @@ -421,7 +421,7 @@ DBusMessageIter iter; DBusMessage *reply; int err = 0; - unsigned int uid; + unsigned int uid = 0; reply = dbus_pending_call_steal_reply(call); diff -Nru connman-1.19~201311241529/src/inet.c connman-1.19~201311291517/src/inet.c --- connman-1.19~201311241529/src/inet.c 2013-11-21 10:23:13.000000000 +0000 +++ connman-1.19~201311291517/src/inet.c 2013-11-27 11:09:09.000000000 +0000 @@ -203,7 +203,7 @@ return -1; memset(&ifr, 0, sizeof(ifr)); - strncpy(ifr.ifr_name, name, sizeof(ifr.ifr_name)); + strncpy(ifr.ifr_name, name, sizeof(ifr.ifr_name) - 1); err = ioctl(sk, SIOCGIFINDEX, &ifr); @@ -336,7 +336,7 @@ } memset(&addr_ifr, 0, sizeof(addr_ifr)); - memcpy(&addr_ifr.ifr_name, &ifr.ifr_name, sizeof(ifr.ifr_name)); + memcpy(&addr_ifr.ifr_name, &ifr.ifr_name, sizeof(ifr.ifr_name) - 1); addr = (struct sockaddr_in *)&addr_ifr.ifr_addr; addr->sin_family = AF_INET; if (ioctl(sk, SIOCSIFADDR, &addr_ifr) < 0) @@ -1106,7 +1106,7 @@ } memset(&ifr, 0, sizeof(ifr)); - strncpy(ifr.ifr_name, bridge, IFNAMSIZ - 1); + strncpy(ifr.ifr_name, bridge, sizeof(ifr.ifr_name) - 1); ifr.ifr_ifindex = index; if (ioctl(sk, SIOCBRDELIF, &ifr) < 0) @@ -1137,7 +1137,7 @@ } memset(&ifr, 0, sizeof(ifr)); - strncpy(ifr.ifr_name, bridge, IFNAMSIZ - 1); + strncpy(ifr.ifr_name, bridge, sizeof(ifr.ifr_name) - 1); ifr.ifr_ifindex = index; if (ioctl(sk, SIOCBRADDIF, &ifr) < 0) @@ -1196,7 +1196,7 @@ goto done; memset(&ifr, 0, sizeof(ifr)); - strncpy(ifr.ifr_name, tunnel, IFNAMSIZ); + strncpy(ifr.ifr_name, tunnel, sizeof(ifr.ifr_name) - 1); err = ioctl(sk, SIOCGIFFLAGS, &ifr); if (err) goto done; @@ -1330,6 +1330,7 @@ mhdr.msg_name = (void *)&saddr; mhdr.msg_namelen = sizeof(struct sockaddr_in6); + mhdr.msg_flags = 0; mhdr.msg_iov = &iov; mhdr.msg_iovlen = 1; mhdr.msg_control = (void *)chdr; @@ -1457,8 +1458,10 @@ } else if (type == ND_NEIGHBOR_SOLICIT) { datalen = sizeof(frame.i.ns); /* 24, csum() safe */ memcpy(&frame.i.ns.nd_ns_target, buf, sizeof(struct in6_addr)); - } else + } else { + close(fd); return -EINVAL; + } dst.sin6_addr = *dest; @@ -1742,6 +1745,7 @@ mhdr.msg_name = (void *)&saddr; mhdr.msg_namelen = sizeof(struct sockaddr_in6); + mhdr.msg_flags = 0; mhdr.msg_iov = &iov; mhdr.msg_iovlen = 1; mhdr.msg_control = (void *)chdr; @@ -1871,6 +1875,7 @@ mhdr.msg_name = (void *)&saddr; mhdr.msg_namelen = sizeof(struct sockaddr_in6); + mhdr.msg_flags = 0; mhdr.msg_iov = &iov; mhdr.msg_iovlen = 1; mhdr.msg_control = (void *)chdr; diff -Nru connman-1.19~201311241529/src/log.c connman-1.19~201311291517/src/log.c --- connman-1.19~201311241529/src/log.c 2013-11-21 10:23:13.000000000 +0000 +++ connman-1.19~201311291517/src/log.c 2013-11-27 11:09:09.000000000 +0000 @@ -179,7 +179,7 @@ if (written < 0) break; - len = read(infd[0], buf, sizeof(buf)); + len = read(infd[0], buf, sizeof(buf) - 1); if (len < 0) break; diff -Nru connman-1.19~201311241529/src/ntp.c connman-1.19~201311291517/src/ntp.c --- connman-1.19~201311241529/src/ntp.c 2013-11-21 10:23:13.000000000 +0000 +++ connman-1.19~201311291517/src/ntp.c 2013-11-27 11:09:09.000000000 +0000 @@ -93,6 +93,9 @@ #define NTP_FLAG_MD_CONTROL 6 #define NTP_FLAG_MD_PRIVATE 7 +#define NTP_FLAG_VN_VER3 3 +#define NTP_FLAG_VN_VER4 4 + #define NTP_FLAGS_ENCODE(li, vn, md) ((uint8_t)( \ (((li) & NTP_FLAG_LI_MASK) << NTP_FLAG_LI_SHIFT) | \ (((vn) & NTP_FLAG_VN_MASK) << NTP_FLAG_VN_SHIFT) | \ @@ -156,7 +159,8 @@ * msg.precision = (int)log2(ts.tv_sec + (ts.tv_nsec * 1.0e-9)); */ memset(&msg, 0, sizeof(msg)); - msg.flags = NTP_FLAGS_ENCODE(NTP_FLAG_LI_NOTINSYNC, 4, NTP_FLAG_MD_CLIENT); + msg.flags = NTP_FLAGS_ENCODE(NTP_FLAG_LI_NOTINSYNC, NTP_FLAG_VN_VER4, + NTP_FLAG_MD_CLIENT); msg.poll = 4; // min msg.poll = 10; // max msg.precision = NTP_PRECISION_S; @@ -253,9 +257,15 @@ return; } - if (NTP_FLAGS_VN_DECODE(msg->flags) != 4) { - DBG("unsupported version %d", NTP_FLAGS_VN_DECODE(msg->flags)); - return; + + if (NTP_FLAGS_VN_DECODE(msg->flags) != NTP_FLAG_VN_VER4) { + if (NTP_FLAGS_VN_DECODE(msg->flags) == NTP_FLAG_VN_VER3) { + DBG("requested version %d, accepting version %d", + NTP_FLAG_VN_VER4, NTP_FLAGS_VN_DECODE(msg->flags)); + } else { + DBG("unsupported version %d", NTP_FLAGS_VN_DECODE(msg->flags)); + return; + } } if (NTP_FLAGS_MD_DECODE(msg->flags) != NTP_FLAG_MD_SERVER) { diff -Nru connman-1.19~201311241529/src/rtnl.c connman-1.19~201311291517/src/rtnl.c --- connman-1.19~201311241529/src/rtnl.c 2013-11-21 10:23:13.000000000 +0000 +++ connman-1.19~201311291517/src/rtnl.c 2013-11-27 11:09:09.000000000 +0000 @@ -104,7 +104,7 @@ return false; memset(&wrq, 0, sizeof(wrq)); - strncpy(wrq.ifr_name, ifname, IFNAMSIZ); + strncpy(wrq.ifr_name, ifname, sizeof(wrq.ifr_name) - 1); err = ioctl(fd, SIOCGIWNAME, &wrq); @@ -583,18 +583,17 @@ static void process_newaddr(unsigned char family, unsigned char prefixlen, int index, struct ifaddrmsg *msg, int bytes) { + struct in_addr ipv4_addr = { INADDR_ANY }; + struct in6_addr ipv6_address, ipv6_local; const char *label = NULL; void *src; char ip_string[INET6_ADDRSTRLEN]; if (family == AF_INET) { - struct in_addr ipv4_addr = { INADDR_ANY }; extract_ipv4_addr(msg, bytes, &label, &ipv4_addr, NULL, NULL); src = &ipv4_addr; } else if (family == AF_INET6) { - struct in6_addr ipv6_address, ipv6_local; - extract_ipv6_addr(msg, bytes, &ipv6_address, &ipv6_local); if (IN6_IS_ADDR_LINKLOCAL(&ipv6_address)) return; @@ -624,18 +623,16 @@ static void process_deladdr(unsigned char family, unsigned char prefixlen, int index, struct ifaddrmsg *msg, int bytes) { + struct in_addr ipv4_addr = { INADDR_ANY }; + struct in6_addr ipv6_address, ipv6_local; const char *label = NULL; void *src; char ip_string[INET6_ADDRSTRLEN]; if (family == AF_INET) { - struct in_addr ipv4_addr = { INADDR_ANY }; - extract_ipv4_addr(msg, bytes, &label, &ipv4_addr, NULL, NULL); src = &ipv4_addr; } else if (family == AF_INET6) { - struct in6_addr ipv6_address, ipv6_local; - extract_ipv6_addr(msg, bytes, &ipv6_address, &ipv6_local); if (IN6_IS_ADDR_LINKLOCAL(&ipv6_address)) return; diff -Nru connman-1.19~201311241529/src/service.c connman-1.19~201311291517/src/service.c --- connman-1.19~201311241529/src/service.c 2013-11-21 10:23:13.000000000 +0000 +++ connman-1.19~201311291517/src/service.c 2013-11-27 11:09:09.000000000 +0000 @@ -2427,7 +2427,7 @@ return nameservers; } - return NULL; + return g_strdupv(connman_setting_get_string_list("FallbackNameservers")); } char **connman_service_get_timeservers_config(struct connman_service *service) @@ -3623,12 +3623,12 @@ static gboolean run_vpn_auto_connect(gpointer data) { GList *list; + bool need_split = false; vpn_autoconnect_timeout = 0; for (list = service_list; list; list = list->next) { struct connman_service *service = list->data; - bool need_split = false; int res; if (service->type != CONNMAN_SERVICE_TYPE_VPN) diff -Nru connman-1.19~201311241529/src/timezone.c connman-1.19~201311291517/src/timezone.c --- connman-1.19~201311241529/src/timezone.c 2013-11-21 10:23:13.000000000 +0000 +++ connman-1.19~201311291517/src/timezone.c 2013-11-27 11:09:09.000000000 +0000 @@ -161,7 +161,7 @@ int ret; if (!subpath) - strncpy(pathname, basepath, sizeof(pathname)); + strncpy(pathname, basepath, sizeof(pathname) - 1); else snprintf(pathname, sizeof(pathname), "%s/%s", basepath, subpath); diff -Nru connman-1.19~201311241529/tools/dnsproxy-test.c connman-1.19~201311291517/tools/dnsproxy-test.c --- connman-1.19~201311241529/tools/dnsproxy-test.c 2013-11-21 10:23:13.000000000 +0000 +++ connman-1.19~201311291517/tools/dnsproxy-test.c 2013-11-27 11:09:09.000000000 +0000 @@ -147,6 +147,9 @@ if (sk >= 0 && connect(sk, rp->ai_addr, rp->ai_addrlen) < 0) { err = -errno; + close(sk); + sk = -1; + fprintf(stderr, "Failed to connect to DNS server at %s " "errno %d/%s\n", server, -err, strerror(-err)); diff -Nru connman-1.19~201311241529/tools/tap-test.c connman-1.19~201311291517/tools/tap-test.c --- connman-1.19~201311241529/tools/tap-test.c 2013-11-21 10:23:13.000000000 +0000 +++ connman-1.19~201311291517/tools/tap-test.c 2013-11-27 11:09:09.000000000 +0000 @@ -49,7 +49,7 @@ return -errno; memset(&ifr, 0, sizeof(ifr)); - strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name)); + strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name) - 1); if (ioctl(sk, SIOCGIFFLAGS, &ifr) < 0) { err = -errno; @@ -89,7 +89,7 @@ memset(&ifr, 0, sizeof(ifr)); ifr.ifr_flags = IFF_TAP | IFF_NO_PI; - strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name)); + strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name) - 1); if (ioctl(fd, TUNSETIFF, (void *) &ifr) < 0) { perror("Failed to set TUN/TAP interface");