You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by zw...@apache.org on 2010/09/30 19:35:44 UTC
svn commit: r1003179 - in /trafficserver/traffic/trunk:
contrib/perl/AdminClient/lib/Apache/TS/AdminClient.pm iocore/dns/DNS.cc
libinktomi++/ink_res_init.cc libinktomi++/ink_resolver.h
proxy/config/records.config.in proxy/mgmt2/RecordsConfig.cc
Author: zwoop
Date: Thu Sep 30 17:35:43 2010
New Revision: 1003179
URL: http://svn.apache.org/viewvc?rev=1003179&view=rev
Log:
TS-313 Better support and handling of DNS round-robin options.
Author: Zhao Yongming
Review: Leif Hedstrom (and small cleanup)
Modified:
trafficserver/traffic/trunk/contrib/perl/AdminClient/lib/Apache/TS/AdminClient.pm
trafficserver/traffic/trunk/iocore/dns/DNS.cc
trafficserver/traffic/trunk/libinktomi++/ink_res_init.cc
trafficserver/traffic/trunk/libinktomi++/ink_resolver.h
trafficserver/traffic/trunk/proxy/config/records.config.in
trafficserver/traffic/trunk/proxy/mgmt2/RecordsConfig.cc
Modified: trafficserver/traffic/trunk/contrib/perl/AdminClient/lib/Apache/TS/AdminClient.pm
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/contrib/perl/AdminClient/lib/Apache/TS/AdminClient.pm?rev=1003179&r1=1003178&r2=1003179&view=diff
==============================================================================
--- trafficserver/traffic/trunk/contrib/perl/AdminClient/lib/Apache/TS/AdminClient.pm (original)
+++ trafficserver/traffic/trunk/contrib/perl/AdminClient/lib/Apache/TS/AdminClient.pm Thu Sep 30 17:35:43 2010
@@ -314,8 +314,7 @@ The Apache Traffic Server Administration
proxy.config.dns.lookup_timeout
proxy.config.dns.max_dns_in_flight
proxy.config.dns.nameservers
- proxy.config.dns.proxy.enabled
- proxy.config.dns.proxy_port
+ proxy.config.dns.resolv_conf
proxy.config.dns.retries
proxy.config.dns.round_robin_nameservers
proxy.config.dns.search_default_domains
Modified: trafficserver/traffic/trunk/iocore/dns/DNS.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/iocore/dns/DNS.cc?rev=1003179&r1=1003178&r2=1003179&view=diff
==============================================================================
--- trafficserver/traffic/trunk/iocore/dns/DNS.cc (original)
+++ trafficserver/traffic/trunk/iocore/dns/DNS.cc Thu Sep 30 17:35:43 2010
@@ -49,6 +49,7 @@ unsigned int dns_handler_initialized = 0
int dns_ns_rr = 0;
int dns_ns_rr_init_down = 1;
char *dns_ns_list = NULL;
+char *dns_resolv_conf = NULL;
DNSProcessor dnsProcessor;
ClassAllocator<DNSEntry> dnsEntryAllocator("dnsEntryAllocator");
@@ -120,6 +121,7 @@ DNSProcessor::start(int)
IOCORE_EstablishStaticConfigInt32(dns_validate_qname, "proxy.config.dns.validate_query_name");
IOCORE_EstablishStaticConfigInt32(dns_ns_rr, "proxy.config.dns.round_robin_nameservers");
IOCORE_ReadConfigStringAlloc(dns_ns_list, "proxy.config.dns.nameservers");
+ IOCORE_ReadConfigStringAlloc(dns_resolv_conf, "proxy.config.dns.resolv_conf");
dns_failover_try_period = dns_timeout + 1; // Modify the "default" accordingly
@@ -157,7 +159,7 @@ DNSProcessor::dns_init()
Debug("dns", "localhost=%s\n", try_server_names[0]);
Debug("dns", "Round-robin nameservers = %d\n", dns_ns_rr);
- if (dns_ns_rr && dns_ns_list) {
+ if (dns_ns_list) {
Debug("dns", "Nameserver list specified \"%s\"\n", dns_ns_list);
uint32 nameserver_ip[MAX_NAMED];
int nameserver_port[MAX_NAMED];
@@ -197,18 +199,16 @@ DNSProcessor::dns_init()
ns = (char *) ink_strtok_r(NULL, " ,;\t\r", &last);
}
xfree(ns_list);
-
// Terminate the list for ink_res_init
nameserver_ip[j] = 0;
// The default domain (4th param) and search list (5th param) will
// come from /etc/resolv.conf.
- if (ink_res_init(&l_res, &nameserver_ip[0], &nameserver_port[0], NULL, NULL) < 0)
+ if (ink_res_init(&l_res, &nameserver_ip[0], &nameserver_port[0], NULL, NULL, dns_resolv_conf) < 0)
Warning("Failed to build DNS res records for the servers (%s). Using resolv.conf.", dns_ns_list);
} else {
- if (ink_res_init(&l_res, 0, 0, 0, 0) < 0)
+ if (ink_res_init(&l_res, NULL, NULL, NULL, NULL, dns_resolv_conf) < 0)
Warning("Failed to build DNS res records for the servers (%s). Using resolv.conf.", dns_ns_list);
- dns_ns_rr = 0;
}
}
@@ -369,8 +369,8 @@ DNSHandler::startEvent(int event, Event
if (ip == DEFAULT_DOMAIN_NAME_SERVER) {
// seems that res_init always sets m_res.nscount to at least 1!
if (!m_res->nscount)
- Warning("bad '/etc/resolv.conf': no nameservers given");
- struct sockaddr_in *sa = &m_res->nsaddr_list[0];
+ Warning("bad configurations: no nameservers given");
+ struct sockaddr_in *sa = &m_res->nsaddr_list[0].sin;
ip = sa->sin_addr.s_addr;
if (!ip)
ip = ink_inet_addr("127.0.0.1");
@@ -390,7 +390,7 @@ DNSHandler::startEvent(int event, Event
max_nscount = MAX_NAMED;
n_con = 0;
for (int i = 0; i < max_nscount; i++) {
- struct sockaddr_in *sa = &m_res->nsaddr_list[i];
+ struct sockaddr_in *sa = &m_res->nsaddr_list[i].sin;
ip = sa->sin_addr.s_addr;
if (ip) {
port = ntohs(sa->sin_port);
@@ -432,7 +432,7 @@ DNSHandler::startEvent_sdns(int event, E
// seems that res_init always sets m_res.nscount to at least 1!
if (!m_res->nscount)
Warning("bad '/etc/resolv.conf': no nameservers given");
- struct sockaddr_in *sa = &m_res->nsaddr_list[0];
+ struct sockaddr_in *sa = &m_res->nsaddr_list[0].sin;
ip = sa->sin_addr.s_addr;
if (!ip)
ip = ink_inet_addr("127.0.0.1");
@@ -472,7 +472,7 @@ DNSHandler::retry_named(int ndx, ink_hrt
last_primary_reopen = t;
con[ndx].close();
struct sockaddr_in *sa;
- sa = &m_res->nsaddr_list[ndx];
+ sa = &m_res->nsaddr_list[ndx].sin;
ip = sa->sin_addr.s_addr;
port = ntohs(sa->sin_port);
@@ -543,11 +543,11 @@ DNSHandler::failover()
if (max_nscount > MAX_NAMED)
max_nscount = MAX_NAMED;
- unsigned int old_ip = m_res->nsaddr_list[name_server].sin_addr.s_addr;
+ unsigned int old_ip = m_res->nsaddr_list[name_server].sin.sin_addr.s_addr;
name_server = (name_server + 1) % max_nscount;
Debug("dns", "failover: failing over to name_server=%d", name_server);
- struct sockaddr_in *sa = &m_res->nsaddr_list[name_server];
+ struct sockaddr_in *sa = &m_res->nsaddr_list[name_server].sin;
Warning("failover: connection to DNS server %d.%d.%d.%d lost, move to %d.%d.%d.%d",
DOT_SEPARATED(old_ip), DOT_SEPARATED(sa->sin_addr.s_addr));
@@ -574,7 +574,7 @@ DNSHandler::rr_failure(int ndx)
Debug("dns", "rr_failure: Marking nameserver %d as down", ndx);
ns_down[ndx] = 1;
- struct sockaddr_in *sa = &m_res->nsaddr_list[ndx];
+ struct sockaddr_in *sa = &m_res->nsaddr_list[ndx].sin;
unsigned int tip = sa->sin_addr.s_addr;
Warning("connection to DNS server %d.%d.%d.%d lost, marking as down", DOT_SEPARATED(tip));
}
@@ -673,7 +673,7 @@ DNSHandler::recv_dns(int event, Event *
if (good_rcode(buf->buf)) {
received_one(dnsc->num);
if (ns_down[dnsc->num]) {
- struct sockaddr_in *sa = &m_res->nsaddr_list[dnsc->num];
+ struct sockaddr_in *sa = &m_res->nsaddr_list[dnsc->num].sin;
Warning("connection to DNS server %d.%d.%d.%d restored", DOT_SEPARATED(sa->sin_addr.s_addr));
ns_down[dnsc->num] = 0;
}
Modified: trafficserver/traffic/trunk/libinktomi++/ink_res_init.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/libinktomi%2B%2B/ink_res_init.cc?rev=1003179&r1=1003178&r2=1003179&view=diff
==============================================================================
--- trafficserver/traffic/trunk/libinktomi++/ink_res_init.cc (original)
+++ trafficserver/traffic/trunk/libinktomi++/ink_res_init.cc Thu Sep 30 17:35:43 2010
@@ -103,6 +103,10 @@ static u_int32_t net_mask __P((struct in
# define isascii(c) (!(c & 0200))
#endif
+#define DOT_SEPARATED(_x) \
+ ((unsigned char*)&(_x))[0], ((unsigned char*)&(_x))[1], \
+ ((unsigned char*)&(_x))[2], ((unsigned char*)&(_x))[3]
+
/*%
* This routine is for closing the socket if a virtual circuit is used and
* the program wants to close it. This provides support for endhostent()
@@ -153,13 +157,11 @@ ink_res_setservers(ink_res_state statp,
case AF_INET:
size = sizeof(set->sin);
if (statp->_u._ext.ext)
- memcpy(&statp->_u._ext.ext->nsaddrs[nserv],
- &set->sin, size);
- if (size <= sizeof(statp->nsaddr_list[nserv]))
- memcpy(&statp->nsaddr_list[nserv],
- &set->sin, size);
+ memcpy(&statp->_u._ext.ext->nsaddrs[nserv], &set->sin, size);
+ if (size <= sizeof(statp->nsaddr_list[nserv].sin))
+ memcpy(&statp->nsaddr_list[nserv].sin, &set->sin, size);
else
- statp->nsaddr_list[nserv].sin_family = 0;
+ statp->nsaddr_list[nserv].sin.sin_family = 0;
nserv++;
break;
@@ -167,13 +169,11 @@ ink_res_setservers(ink_res_state statp,
case AF_INET6:
size = sizeof(set->sin6);
if (statp->_u._ext.ext)
- memcpy(&statp->_u._ext.ext->nsaddrs[nserv],
- &set->sin6, size);
- if (size <= sizeof(statp->nsaddr_list[nserv]))
- memcpy(&statp->nsaddr_list[nserv],
- &set->sin6, size);
+ memcpy(&statp->_u._ext.ext->nsaddrs[nserv], &set->sin6, size);
+ if (size <= sizeof(statp->nsaddr_list[nserv].sin6))
+ memcpy(&statp->nsaddr_list[nserv].sin6, &set->sin6, size);
else
- statp->nsaddr_list[nserv].sin_family = 0;
+ statp->nsaddr_list[nserv].sin6.sin6_family = 0;
nserv++;
break;
#endif
@@ -184,7 +184,6 @@ ink_res_setservers(ink_res_state statp,
set++;
}
statp->nscount = nserv;
-
}
int
@@ -197,30 +196,24 @@ ink_res_getservers(ink_res_state statp,
if (statp->_u._ext.ext)
family = statp->_u._ext.ext->nsaddrs[i].sin.sin_family;
else
- family = statp->nsaddr_list[i].sin_family;
+ family = statp->nsaddr_list[i].sin.sin_family;
switch (family) {
case AF_INET:
size = sizeof(set->sin);
if (statp->_u._ext.ext)
- memcpy(&set->sin,
- &statp->_u._ext.ext->nsaddrs[i],
- size);
+ memcpy(&set->sin, &statp->_u._ext.ext->nsaddrs[i], size);
else
- memcpy(&set->sin, &statp->nsaddr_list[i],
- size);
+ memcpy(&set->sin, &statp->nsaddr_list[i].sin, size);
break;
#ifdef HAS_INET6_STRUCTS
case AF_INET6:
size = sizeof(set->sin6);
if (statp->_u._ext.ext)
- memcpy(&set->sin6,
- &statp->_u._ext.ext->nsaddrs[i],
- size);
+ memcpy(&set->sin6, &statp->_u._ext.ext->nsaddrs[i], size);
else
- memcpy(&set->sin6, &statp->nsaddr_list[i],
- size);
+ memcpy(&set->sin6, &statp->nsaddr_list[i].sin6, size);
break;
#endif
@@ -243,8 +236,7 @@ ink_res_setoptions(ink_res_state statp,
#ifdef DEBUG
if (statp->options & INK_RES_DEBUG)
- printf(";; res_setoptions(\"%s\", \"%s\")...\n",
- options, source);
+ printf(";; res_setoptions(\"%s\", \"%s\")...\n", options, source);
#endif
while (*cp) {
/* skip leading and inner runs of spaces */
@@ -300,23 +292,19 @@ ink_res_setoptions(ink_res_state statp,
} else if (!strncmp(cp, "debug", sizeof("debug") - 1)) {
#ifdef DEBUG
if (!(statp->options & INK_RES_DEBUG)) {
- printf(";; res_setoptions(\"%s\", \"%s\")..\n",
- options, source);
+ printf(";; res_setoptions(\"%s\", \"%s\")..\n", options, source);
statp->options |= INK_RES_DEBUG;
}
printf(";;\tdebug\n");
#endif
- } else if (!strncmp(cp, "no_tld_query",
- sizeof("no_tld_query") - 1) ||
- !strncmp(cp, "no-tld-query",
- sizeof("no-tld-query") - 1)) {
+ } else if (!strncmp(cp, "no_tld_query", sizeof("no_tld_query") - 1) ||
+ !strncmp(cp, "no-tld-query", sizeof("no-tld-query") - 1)) {
statp->options |= INK_RES_NOTLDQUERY;
} else if (!strncmp(cp, "inet6", sizeof("inet6") - 1)) {
statp->options |= INK_RES_USE_INET6;
} else if (!strncmp(cp, "rotate", sizeof("rotate") - 1)) {
statp->options |= INK_RES_ROTATE;
- } else if (!strncmp(cp, "no-check-names",
- sizeof("no-check-names") - 1)) {
+ } else if (!strncmp(cp, "no-check-names", sizeof("no-check-names") - 1)) {
statp->options |= INK_RES_NOCHECKNAME;
}
#ifdef INK_RES_USE_EDNS0
@@ -349,8 +337,7 @@ ink_res_setoptions(ink_res_state statp,
if (!strncmp(cp, "single", sizeof("single") - 1)) {
statp->options |= INK_RES_NO_NIBBLE2;
} else if (!strncmp(cp, "both", sizeof("both") - 1)) {
- statp->options &=
- ~INK_RES_NO_NIBBLE2;
+ statp->options &= ~INK_RES_NO_NIBBLE2;
}
}
else {
@@ -424,12 +411,12 @@ ink_res_get_nibblesuffix2(ink_res_state
*/
/*% This function has to be reachable by res_data.c but not publically. */
int
-ink_res_init(ink_res_state statp, unsigned int *pHostList, int *pPort, char *pDefDomain, char *pSearchList) {
+ink_res_init(ink_res_state statp, unsigned int *pHostList, int *pPort, char *pDefDomain, char *pSearchList, char *pResolvConf) {
register FILE *fp;
register char *cp, **pp;
register int n;
char buf[BUFSIZ];
- int nserv = 0; /*%< number of nameserver records read from file */
+ int nserv = 0;
int haveenv = 0;
int havesearch = 0;
#ifdef RESOLVSORT
@@ -437,7 +424,6 @@ ink_res_init(ink_res_state statp, unsign
char *net;
#endif
int dots;
- union ink_res_sockaddr_union u[2];
int maxns = INK_MAXNS;
// INK_RES_SET_H_ERRNO(statp, 0);
@@ -450,31 +436,6 @@ ink_res_init(ink_res_state statp, unsign
statp->options = INK_RES_DEFAULT;
statp->id = ink_res_randomid();
- memset(u, 0, sizeof(u));
-#ifdef USELOOPBACK
- u[nserv].sin.sin_addr = inet_makeaddr(IN_LOOPBACKNET, 1);
-#else
- u[nserv].sin.sin_addr.s_addr = INADDR_ANY;
-#endif
- u[nserv].sin.sin_family = AF_INET;
- u[nserv].sin.sin_port = htons(NAMESERVER_PORT);
-#ifdef HAVE_SA_LEN
- u[nserv].sin.sin_len = sizeof(struct sockaddr_in);
-#endif
- nserv++;
-#ifdef HAS_INET6_STRUCTS
-#ifdef USELOOPBACK
- u[nserv].sin6.sin6_addr = in6addr_loopback;
-#else
- u[nserv].sin6.sin6_addr = in6addr_any;
-#endif
- u[nserv].sin6.sin6_family = AF_INET6;
- u[nserv].sin6.sin6_port = htons(NAMESERVER_PORT);
-#ifdef HAVE_SA_LEN
- u[nserv].sin6.sin6_len = sizeof(struct sockaddr_in6);
-#endif
- nserv++;
-#endif
statp->nscount = 0;
statp->ndots = 1;
statp->pfcode = 0;
@@ -486,7 +447,7 @@ ink_res_init(ink_res_state statp, unsign
statp->_u._ext.ext = (struct __ink_res_state_ext*)malloc(sizeof(*statp->_u._ext.ext));
if (statp->_u._ext.ext != NULL) {
memset(statp->_u._ext.ext, 0, sizeof(*statp->_u._ext.ext));
- statp->_u._ext.ext->nsaddrs[0].sin = statp->nsaddr;
+ statp->_u._ext.ext->nsaddrs[0].sin = statp->nsaddr_list[0].sin;
strcpy(statp->_u._ext.ext->nsuffix, "ip6.arpa");
strcpy(statp->_u._ext.ext->nsuffix2, "ip6.int");
} else {
@@ -509,7 +470,7 @@ ink_res_init(ink_res_state statp, unsign
#ifdef RESOLVSORT
statp->nsort = 0;
#endif
- ink_res_setservers(statp, u, nserv);
+
#ifdef SOLARIS2
/*
@@ -617,11 +578,11 @@ ink_res_init(ink_res_state statp, unsign
/* -------------------------------------------
we must be provided with atleast a named!
------------------------------------------- */
-
+ /* TODO we should figure out the IPV6 resolvers here. */
while (pHostList && pHostList[nserv] != 0 && nserv < INK_MAXNS) {
- statp->nsaddr_list[nserv].sin_addr.s_addr = pHostList[nserv];
- statp->nsaddr_list[nserv].sin_family = AF_INET;
- statp->nsaddr_list[nserv].sin_port = htons(pPort[nserv]);
+ statp->nsaddr_list[nserv].sin.sin_addr.s_addr = pHostList[nserv];
+ statp->nsaddr_list[nserv].sin.sin_family = AF_INET;
+ statp->nsaddr_list[nserv].sin.sin_port = htons(pPort[nserv]);
nserv++;
}
@@ -630,8 +591,7 @@ ink_res_init(ink_res_state statp, unsign
(line[sizeof(name) - 1] == ' ' || \
line[sizeof(name) - 1] == '\t'))
- nserv = 0;
- if ((fp = fopen(_PATH_RESCONF, "r")) != NULL) {
+ if ((fp = fopen(pResolvConf, "r")) != NULL) {
/* read the config file */
while (fgets(buf, sizeof(buf), fp) != NULL) {
/* skip comments */
@@ -710,15 +670,12 @@ ink_res_init(ink_res_state statp, unsign
if (getaddrinfo(cp, sbuf, &hints, &ai) == 0 &&
ai->ai_addrlen <= minsiz) {
if (statp->_u._ext.ext != NULL) {
- memcpy(&statp->_u._ext.ext->nsaddrs[nserv],
- ai->ai_addr, ai->ai_addrlen);
+ memcpy(&statp->_u._ext.ext->nsaddrs[nserv], ai->ai_addr, ai->ai_addrlen);
}
- if (ai->ai_addrlen <=
- sizeof(statp->nsaddr_list[nserv])) {
- memcpy(&statp->nsaddr_list[nserv],
- ai->ai_addr, ai->ai_addrlen);
+ if (ai->ai_addrlen <= sizeof(statp->nsaddr_list[nserv].sin)) {
+ memcpy(&statp->nsaddr_list[nserv].sin, ai->ai_addr, ai->ai_addrlen);
} else
- statp->nsaddr_list[nserv].sin_family = 0;
+ statp->nsaddr_list[nserv].sin.sin_family = 0;
freeaddrinfo(ai);
nserv++;
}
@@ -781,6 +738,7 @@ ink_res_init(ink_res_state statp, unsign
#endif
(void) fclose(fp);
}
+
/*
* Last chance to get a nameserver. This should not normally
* be necessary
@@ -795,6 +753,7 @@ ink_res_init(ink_res_state statp, unsign
(cp = strchr(buf, '.')) != NULL)
strcpy(statp->defdname, cp + 1);
+
/* find components of local domain that might be searched */
if (havesearch == 0) {
pp = statp->dnsrch;
@@ -824,6 +783,9 @@ ink_res_init(ink_res_state statp, unsign
#endif
}
+ /* export all ns servers to DNSprocessor. */
+ ink_res_setservers(statp, &statp->nsaddr_list[0], statp->nscount);
+
if ((cp = getenv("RES_OPTIONS")) != NULL)
ink_res_setoptions(statp, cp, "env");
statp->options |= INK_RES_INIT;
Modified: trafficserver/traffic/trunk/libinktomi++/ink_resolver.h
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/libinktomi%2B%2B/ink_resolver.h?rev=1003179&r1=1003178&r2=1003179&view=diff
==============================================================================
--- trafficserver/traffic/trunk/libinktomi++/ink_resolver.h (original)
+++ trafficserver/traffic/trunk/libinktomi++/ink_resolver.h Thu Sep 30 17:35:43 2010
@@ -182,6 +182,19 @@
} while (0)
#endif
+union ink_res_sockaddr_union {
+ struct sockaddr_in sin;
+#ifdef IN6ADDR_ANY_INIT
+ struct sockaddr_in6 sin6;
+#endif
+#ifdef ISC_ALIGN64
+ int64_t __align64; /*%< 64bit alignment */
+#else
+ int32_t __align32; /*%< 32bit alignment */
+#endif
+ char __space[128]; /*%< max size */
+};
+
struct __ink_res_state {
int retrans; /*%< retransmission time interval */
int retry; /*%< number of times to retransmit */
@@ -191,8 +204,7 @@ struct __ink_res_state {
u_long options; /*%< option flags - see below. */
#endif
int nscount; /*%< number of name servers */
- struct sockaddr_in
- nsaddr_list[INK_MAXNS]; /*%< address of name server */
+ union ink_res_sockaddr_union nsaddr_list[INK_MAXNS]; /*%< address of name server */
#define nsaddr nsaddr_list[0] /*%< for backward compatibility */
u_short id; /*%< current message id */
char *dnsrch[MAXDNSRCH+1]; /*%< components of domain to search */
@@ -228,18 +240,6 @@ struct __ink_res_state {
};
typedef __ink_res_state *ink_res_state;
-union ink_res_sockaddr_union {
- struct sockaddr_in sin;
-#ifdef IN6ADDR_ANY_INIT
- struct sockaddr_in6 sin6;
-#endif
-#ifdef ISC_ALIGN64
- int64_t __align64; /*%< 64bit alignment */
-#else
- int32_t __align32; /*%< 32bit alignment */
-#endif
- char __space[128]; /*%< max size */
-};
struct __ink_res_state_ext {
union ink_res_sockaddr_union nsaddrs[INK_MAXNS];
@@ -255,8 +255,8 @@ struct __ink_res_state_ext {
};
-int ink_res_init(ink_res_state, unsigned int *pHostList,
- int *pPort = 0, char *pDefDomain = 0, char *pSearchList = 0);
+int ink_res_init(ink_res_state, unsigned int *pHostList, int *pPort = NULL, char *pDefDomain = NULL,
+ char *pSearchList = NULL, char *pResolvConf = NULL);
int ink_res_mkquery(ink_res_state, int, const char *, int, int,
const unsigned char *, int, const unsigned char *, unsigned char *, int);
Modified: trafficserver/traffic/trunk/proxy/config/records.config.in
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/proxy/config/records.config.in?rev=1003179&r1=1003178&r2=1003179&view=diff
==============================================================================
--- trafficserver/traffic/trunk/proxy/config/records.config.in (original)
+++ trafficserver/traffic/trunk/proxy/config/records.config.in Thu Sep 30 17:35:43 2010
@@ -355,6 +355,7 @@ CONFIG proxy.config.dns.max_dns_in_fligh
CONFIG proxy.config.dns.url_expansions STRING NULL
CONFIG proxy.config.dns.round_robin_nameservers INT 0
CONFIG proxy.config.dns.nameservers STRING NULL
+CONFIG proxy.config.dns.resolv_conf STRING /etc/resolv.conf
# This provides additional resilience against DNS forgery, particularly in
# forward or transparent proxies, but requires that the resolver populates
# the queries section of the response properly.
Modified: trafficserver/traffic/trunk/proxy/mgmt2/RecordsConfig.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/proxy/mgmt2/RecordsConfig.cc?rev=1003179&r1=1003178&r2=1003179&view=diff
==============================================================================
--- trafficserver/traffic/trunk/proxy/mgmt2/RecordsConfig.cc (original)
+++ trafficserver/traffic/trunk/proxy/mgmt2/RecordsConfig.cc Thu Sep 30 17:35:43 2010
@@ -2088,6 +2088,8 @@ RecordElement RecordsConfig[] = {
,
{CONFIG, "proxy.config.dns.nameservers", "", INK_STRING, NULL, RU_REREAD, RR_NULL, RC_NULL, NULL, RA_NULL}
,
+ {CONFIG, "proxy.config.dns.resolv_conf", "", INK_STRING, "/etc/resolv.conf", RU_RESTART_TS, RR_NULL, RC_NULL, NULL, RA_NULL}
+ ,
{CONFIG, "proxy.config.dns.round_robin_nameservers", "", INK_INT, "0", RU_REREAD, RR_NULL, RC_NULL, NULL, RA_NULL}
,
{PROCESS, "proxy.process.dns.total_dns_lookups", "", INK_INT, "0", RU_NULL, RR_NULL, RC_NULL, NULL, RA_NULL}