$NetBSD: patch-ag,v 1.5 2013/08/30 16:56:09 joerg Exp $ --- jbsockets.c.orig 2011-12-10 17:26:30.000000000 +0000 +++ jbsockets.c @@ -1240,7 +1240,14 @@ unsigned long resolve_hostname_to_ip(con { struct sockaddr_in inaddr; struct hostent *hostp; -#if defined(HAVE_GETHOSTBYNAME_R_6_ARGS) || defined(HAVE_GETHOSTBYNAME_R_5_ARGS) || defined(HAVE_GETHOSTBYNAME_R_3_ARGS) +#if defined(__NetBSD__) + struct hostent result; + struct sockaddr_in raddr; + struct sockaddr_in *rlist[2]; + + memset(&result, '\0', sizeof(struct hostent)); +#endif +#if (defined(HAVE_GETHOSTBYNAME_R_6_ARGS) || defined(HAVE_GETHOSTBYNAME_R_5_ARGS) || defined(HAVE_GETHOSTBYNAME_R_3_ARGS)) && !defined(__NetBSD__) struct hostent result; #if defined(HAVE_GETHOSTBYNAME_R_6_ARGS) || defined(HAVE_GETHOSTBYNAME_R_5_ARGS) char hbuf[HOSTENT_BUFFER_SIZE]; @@ -1260,7 +1267,7 @@ unsigned long resolve_hostname_to_ip(con if ((inaddr.sin_addr.s_addr = inet_addr(host)) == -1) { unsigned int dns_retries = 0; -#if defined(HAVE_GETHOSTBYNAME_R_6_ARGS) +#if defined(HAVE_GETHOSTBYNAME_R_6_ARGS) && !defined(__NetBSD__) while (gethostbyname_r(host, &result, hbuf, HOSTENT_BUFFER_SIZE, &hostp, &thd_err) && (thd_err == TRY_AGAIN) && (dns_retries++ < MAX_DNS_RETRIES)) @@ -1291,6 +1298,39 @@ unsigned long resolve_hostname_to_ip(con { hostp = NULL; } +#elif defined(__NetBSD__) + /* mjl */ + { + struct addrinfo *resp = NULL; + struct addrinfo hints; + + hostp = NULL; + memset(&hints, '\0', sizeof(struct addrinfo)); + hints.ai_family = AF_INET; + + while (getaddrinfo(host, NULL, &hints, &resp) == EAI_AGAIN + && (dns_retries++ < MAX_DNS_RETRIES)) + { + log_error(LOG_LEVEL_ERROR, + "Timeout #%u while trying to resolve %s. Trying again.", + dns_retries, host); + } + + if(resp) + { + result.h_addrtype = resp->ai_family; + memcpy(&raddr, &((struct sockaddr_in *) resp->ai_addr) + ->sin_addr, sizeof(struct sockaddr_in)); + /* set up fake hostent */ + rlist[0] = &raddr; + rlist[1] = NULL; + result.h_addr_list = (char **)rlist; + hostp = &result; + + freeaddrinfo(resp); + } + } + #elif defined(MUTEX_LOCKS_AVAILABLE) privoxy_mutex_lock(&resolver_mutex); while (NULL == (hostp = gethostbyname(host))