diff options
| author | Lorenzo Colitti <lorenzo@google.com> | 2015-11-25 22:13:57 +0900 |
|---|---|---|
| committer | Lorenzo Colitti <lorenzo@google.com> | 2015-11-25 23:00:25 +0900 |
| commit | c2841283740e5026d6ee54ebe87b202c93c26d93 (patch) | |
| tree | 7babb9623a97d49f54ea0f12363b2edf8d791217 /server/TetherController.cpp | |
| parent | 92043f280f7eafd4403217a87d3fde0d2176ff4b (diff) | |
Support scoped addresses as tethered DNS servers.
Bug: 9580643
Change-Id: Id086ff9194097fc1e0ab8e2e58e6ff843303f051
Diffstat (limited to 'server/TetherController.cpp')
| -rw-r--r-- | server/TetherController.cpp | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/server/TetherController.cpp b/server/TetherController.cpp index 19d9aa6e..dbbd933b 100644 --- a/server/TetherController.cpp +++ b/server/TetherController.cpp @@ -17,6 +17,7 @@ #include <stdlib.h> #include <errno.h> #include <fcntl.h> +#include <netdb.h> #include <string.h> #include <sys/socket.h> @@ -236,13 +237,13 @@ int TetherController::setDnsForwarders(unsigned netId, char **servers, int numSe for (i = 0; i < numServers; i++) { ALOGD("setDnsForwarders(0x%x %d = '%s')", fwmark.intValue, i, servers[i]); - struct in_addr v4dns; - struct in6_addr v6dns; - - if (!inet_aton(servers[i], &v4dns) && - (inet_pton(AF_INET6, servers[i], &v6dns) != 1)) { + addrinfo *res, hints = { .ai_flags = AI_NUMERICHOST }; + int ret = getaddrinfo(servers[i], NULL, &hints, &res); + freeaddrinfo(res); + if (ret) { ALOGE("Failed to parse DNS server '%s'", servers[i]); mDnsForwarders->clear(); + errno = EINVAL; return -1; } @@ -263,6 +264,7 @@ int TetherController::setDnsForwarders(unsigned netId, char **servers, int numSe if (write(mDaemonFd, daemonCmd, strlen(daemonCmd) +1) < 0) { ALOGE("Failed to send update command to dnsmasq (%s)", strerror(errno)); mDnsForwarders->clear(); + errno = EREMOTEIO; return -1; } } |
