bionic: Replace iface with opaque netid in resolver.
Replace iface cache key with netid.
Replace _mark with netid.
Mark sockets used to test IPv4/IPv6 support as well as sockets
used to determine source address for rfc6724 sort.
Remove pid/uid mappings (functionality moved to system/netd).
Do not create resolv_cache when it does not exist, but rather only
when DNS configuration is supplied.
Clean up unused functions.
Change-Id: I9ccfda2902cc0943e87c9bc346ad9a2578accdab
diff --git a/libc/dns/net/getnameinfo.c b/libc/dns/net/getnameinfo.c
index f940109..b9c0280 100644
--- a/libc/dns/net/getnameinfo.c
+++ b/libc/dns/net/getnameinfo.c
@@ -62,6 +62,7 @@
#include <limits.h>
#include <netdb.h>
#include <arpa/nameser.h>
+#include "resolv_netid.h"
#include "resolv_private.h"
#include <sys/system_properties.h>
#include <stdlib.h>
@@ -92,7 +93,7 @@
};
static int getnameinfo_inet(const struct sockaddr *, socklen_t, char *,
- socklen_t, char *, socklen_t, int, const char*, int);
+ socklen_t, char *, socklen_t, int, unsigned, unsigned);
#ifdef INET6
static int ip6_parsenumeric(const struct sockaddr *, const char *, char *,
socklen_t, int);
@@ -105,18 +106,22 @@
* Top-level getnameinfo() code. Look at the address family, and pick an
* appropriate function to call.
*/
-int getnameinfo(const struct sockaddr* sa, socklen_t salen, char* host, size_t hostlen, char* serv, size_t servlen, int flags)
+int getnameinfo(const struct sockaddr* sa, socklen_t salen, char* host, size_t hostlen,
+ char* serv, size_t servlen, int flags)
{
- return android_getnameinfoforiface(sa, salen, host, hostlen, serv, servlen, flags, NULL, 0);
+ return android_getnameinfofornet(sa, salen, host, hostlen, serv, servlen, flags,
+ NETID_UNSET, MARK_UNSET);
}
-int android_getnameinfoforiface(const struct sockaddr* sa, socklen_t salen, char* host, size_t hostlen, char* serv, size_t servlen, int flags, const char* iface, int mark)
+int android_getnameinfofornet(const struct sockaddr* sa, socklen_t salen, char* host,
+ size_t hostlen, char* serv, size_t servlen, int flags, unsigned netid,
+ unsigned mark)
{
switch (sa->sa_family) {
case AF_INET:
case AF_INET6:
return getnameinfo_inet(sa, salen, host, hostlen,
- serv, servlen, flags, iface, mark);
+ serv, servlen, flags, netid, mark);
case AF_LOCAL:
return getnameinfo_local(sa, salen, host, hostlen,
serv, servlen, flags);
@@ -152,24 +157,6 @@
return 0;
}
-/* On success length of the host name is returned. A return
- * value of 0 means there's no host name associated with
- * the address. On failure -1 is returned in which case
- * normal execution flow shall continue. */
-static int
-android_gethostbyaddr_proxy(char* nameBuf, size_t nameBufLen, const void *addr, socklen_t addrLen, int addrFamily, const char* iface, int mark)
-{
- struct hostent *hostResult =
- android_gethostbyaddrforiface_proxy(addr, addrLen, addrFamily, iface, mark);
-
- if (hostResult == NULL) return 0;
-
- int lengthResult = strlen(hostResult->h_name);
-
- if (nameBuf) strncpy(nameBuf, hostResult->h_name, nameBufLen);
- return lengthResult;
-}
-
/*
* getnameinfo_inet():
* Format an IPv4 or IPv6 sockaddr into a printable string.
@@ -178,7 +165,7 @@
getnameinfo_inet(const struct sockaddr* sa, socklen_t salen,
char *host, socklen_t hostlen,
char *serv, socklen_t servlen,
- int flags, const char* iface, int mark)
+ int flags, unsigned netid, unsigned mark)
{
const struct afd *afd;
struct servent *sp;
@@ -316,21 +303,7 @@
break;
}
} else {
- struct hostent android_proxy_hostent;
- char android_proxy_buf[MAXDNAME];
-
- int hostnamelen = android_gethostbyaddr_proxy(android_proxy_buf,
- MAXDNAME, addr, afd->a_addrlen, afd->a_af, iface, mark);
- if (hostnamelen > 0) {
- hp = &android_proxy_hostent;
- hp->h_name = android_proxy_buf;
- } else if (!hostnamelen) {
- hp = NULL;
- } else {
- hp = android_gethostbyaddrforiface(addr, afd->a_addrlen, afd->a_af,
- iface, mark);
- }
-
+ hp = android_gethostbyaddrfornet_proxy(addr, afd->a_addrlen, afd->a_af, netid);
if (hp) {
#if 0
/*
@@ -341,6 +314,7 @@
char *p;
p = strchr(hp->h_name, '.');
if (p)
+ TODO: Before uncommenting rewrite to avoid modifying hp.
*p = '\0';
}
#endif