summaryrefslogtreecommitdiff
path: root/libc/netbsd/resolv/res_init.c
diff options
context:
space:
mode:
Diffstat (limited to 'libc/netbsd/resolv/res_init.c')
-rw-r--r--libc/netbsd/resolv/res_init.c149
1 files changed, 10 insertions, 139 deletions
diff --git a/libc/netbsd/resolv/res_init.c b/libc/netbsd/resolv/res_init.c
index 56a25afb8..ff6529944 100644
--- a/libc/netbsd/resolv/res_init.c
+++ b/libc/netbsd/resolv/res_init.c
@@ -111,13 +111,6 @@ __RCSID("$NetBSD: res_init.c,v 1.8 2006/03/19 03:10:08 christos Exp $");
/* ensure that sockaddr_in6 and IN6ADDR_ANY_INIT are declared / defined */
#ifdef ANDROID_CHANGES
#include "resolv_private.h"
-#define MAX_DNS_PROPERTIES 8
-#define DNS_PROP_NAME_PREFIX "net.dns"
-#define DNS_CHANGE_PROP_NAME "net.dnschange"
-#define DNS_SEARCH_PROP_NAME "net.dns.search"
-static const prop_info *dns_change_prop;
-static int dns_last_change_counter;
-static int _get_dns_change_count();
#else
#include <resolv.h>
#endif
@@ -171,41 +164,6 @@ res_ninit(res_state statp) {
return (__res_vinit(statp, 0));
}
-#ifdef ANDROID_CHANGES
-static int load_domain_search_list(res_state statp) {
- char propvalue[PROP_VALUE_MAX];
- register char *cp, **pp;
-
- if(__system_property_get(DNS_SEARCH_PROP_NAME, propvalue) >= 1) {
- strlcpy(statp->defdname, propvalue, sizeof(statp->defdname));
- if ((cp = strchr(statp->defdname, '\n')) != NULL)
- *cp = '\0';
- cp = statp->defdname;
- pp = statp->dnsrch;
- while ( pp < statp->dnsrch + MAXDNSRCH ) {
- while (*cp == ' ' || *cp == '\t') /* skip leading white space */
- cp++;
- if (*cp == '\0') /* stop if nothing more */
- break;
- *pp++ = cp; /* record this search domain */
- while (*cp) { /* zero-terminate it */
- if (*cp == ' ' || *cp == '\t') {
- *cp++ = '\0';
- break;
- }
- cp++;
- }
- }
- *pp = NULL; /* statp->dnsrch has MAXDNSRCH+1 items */
- if (pp > statp->dnsrch)
- return 1;
- }
- statp->defdname[0] = '\0'; /* no default domain name on Android */
- statp->dnsrch[0] = NULL;
- return 0;
-}
-#endif
-
/* This function has to be reachable by res_data.c but not publicly. */
int
__res_vinit(res_state statp, int preinit) {
@@ -220,12 +178,6 @@ __res_vinit(res_state statp, int preinit) {
char *net;
int dots;
union res_sockaddr_union u[2];
-#ifdef ANDROID_CHANGES
- pid_t mypid = getpid();
- int use_proc_props = 0;
- int found_prop;
- char dnsProperty[PROP_VALUE_MAX];
-#endif
if ((statp->options & RES_INIT) != 0U)
res_ndestroy(statp);
@@ -318,74 +270,8 @@ __res_vinit(res_state statp, int preinit) {
if (nserv > 0)
statp->nscount = nserv;
#endif
-#ifdef ANDROID_CHANGES /* READ FROM SYSTEM PROPERTIES */
- dns_last_change_counter = _get_dns_change_count();
- nserv = 0;
- for(n = 1; n <= MAX_DNS_PROPERTIES && nserv < MAXNS; n++) {
- char propname[PROP_NAME_MAX];
- char propvalue[PROP_VALUE_MAX];
-
- struct addrinfo hints, *ai;
- char sbuf[NI_MAXSERV];
- const size_t minsiz = sizeof(statp->_u._ext.ext->nsaddrs[0]);
-
- /*
- * Check first for process-specific properties, and if those don't
- * exist, try the generic properties.
- */
- found_prop = 0;
- if (n == 1 || use_proc_props) {
- snprintf(propname, sizeof(propname), "%s%d.%d", DNS_PROP_NAME_PREFIX, n, mypid);
- if(__system_property_get(propname, propvalue) < 1) {
- if (use_proc_props) {
- break;
- }
- } else {
- found_prop = 1;
- use_proc_props = 1;
- }
- }
- if (!found_prop) {
- snprintf(propname, sizeof(propname), "%s%d", DNS_PROP_NAME_PREFIX, n);
- if(__system_property_get(propname, propvalue) < 1) {
- break;
- }
- }
-
- cp = propvalue;
-
- while (*cp == ' ' || *cp == '\t')
- cp++;
- cp[strcspn(cp, ";# \t\n")] = '\0';
- if ((*cp != '\0') && (*cp != '\n')) {
- memset(&hints, 0, sizeof(hints));
- hints.ai_family = PF_UNSPEC;
- hints.ai_socktype = SOCK_DGRAM; /*dummy*/
- hints.ai_flags = AI_NUMERICHOST;
- sprintf(sbuf, "%u", NAMESERVER_PORT);
- if (getaddrinfo(cp, sbuf, &hints, &ai) == 0 &&
- (size_t)ai->ai_addrlen <= minsiz) {
- if (statp->_u._ext.ext != NULL) {
- memcpy(&statp->_u._ext.ext->nsaddrs[nserv],
- ai->ai_addr, ai->ai_addrlen);
- }
- if ((size_t)ai->ai_addrlen <=
- sizeof(statp->nsaddr_list[nserv])) {
- memcpy(&statp->nsaddr_list[nserv],
- ai->ai_addr, ai->ai_addrlen);
- } else {
- statp->nsaddr_list[nserv].sin_family = 0;
- }
- freeaddrinfo(ai);
- nserv++;
- }
- }
- }
-
- /* Add the domain search list */
- havesearch = load_domain_search_list(statp);
-#else /* !ANDROID_CHANGES - IGNORE resolv.conf in Android */
+#ifndef ANDROID_CHANGES /* !ANDROID_CHANGES - IGNORE resolv.conf in Android */
#define MATCH(line, name) \
(!strncmp(line, name, sizeof(name) - 1) && \
(line[sizeof(name) - 1] == ' ' || \
@@ -907,32 +793,17 @@ res_getservers(res_state statp, union res_sockaddr_union *set, int cnt) {
}
#ifdef ANDROID_CHANGES
-static int _get_dns_change_count()
+void res_setiface(res_state statp, const char* iface)
{
- if (dns_change_prop == NULL) {
- dns_change_prop = __system_property_find(DNS_CHANGE_PROP_NAME);
- }
- if (dns_change_prop != NULL) {
- char propvalue[PROP_VALUE_MAX];
- if (__system_property_read(dns_change_prop, NULL, propvalue) >= 1) {
- return atoi(propvalue);
- }
- }
- return -1;
-}
-
-int res_get_dns_changed()
-{
- int change_count;
-
- change_count = _get_dns_change_count();
- if (change_count != dns_last_change_counter) {
- if (change_count != -1) {
- dns_last_change_counter = change_count;
+ if (statp != NULL) {
+ // set interface
+ if (iface && iface[0] != '\0') {
+ int len = sizeof(statp->iface);
+ strncpy(statp->iface, iface, len - 1);
+ statp->iface[len - 1] = '\0';
+ } else {
+ statp->iface[0] = '\0';
}
- return 1;
- } else {
- return 0;
}
}
#endif /* ANDROID_CHANGES */