summaryrefslogtreecommitdiff
path: root/src/lib/libc/net/res_init.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libc/net/res_init.c')
-rw-r--r--src/lib/libc/net/res_init.c187
1 files changed, 101 insertions, 86 deletions
diff --git a/src/lib/libc/net/res_init.c b/src/lib/libc/net/res_init.c
index c55c7763a4..a1d69f57b5 100644
--- a/src/lib/libc/net/res_init.c
+++ b/src/lib/libc/net/res_init.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: res_init.c,v 1.27 2002/07/25 21:13:45 deraadt Exp $ */ 1/* $OpenBSD: res_init.c,v 1.28 2003/01/28 04:58:00 marc Exp $ */
2 2
3/* 3/*
4 * ++Copyright++ 1985, 1989, 1993 4 * ++Copyright++ 1985, 1989, 1993
@@ -64,7 +64,7 @@
64static char sccsid[] = "@(#)res_init.c 8.1 (Berkeley) 6/7/93"; 64static char sccsid[] = "@(#)res_init.c 8.1 (Berkeley) 6/7/93";
65static char rcsid[] = "$From: res_init.c,v 8.7 1996/09/28 06:51:07 vixie Exp $"; 65static char rcsid[] = "$From: res_init.c,v 8.7 1996/09/28 06:51:07 vixie Exp $";
66#else 66#else
67static char rcsid[] = "$OpenBSD: res_init.c,v 1.27 2002/07/25 21:13:45 deraadt Exp $"; 67static char rcsid[] = "$OpenBSD: res_init.c,v 1.28 2003/01/28 04:58:00 marc Exp $";
68#endif 68#endif
69#endif /* LIBC_SCCS and not lint */ 69#endif /* LIBC_SCCS and not lint */
70 70
@@ -86,6 +86,8 @@ static char rcsid[] = "$OpenBSD: res_init.c,v 1.27 2002/07/25 21:13:45 deraadt E
86#include <netdb.h> 86#include <netdb.h>
87#endif /* INET6 */ 87#endif /* INET6 */
88 88
89#include "thread_private.h"
90
89/*-------------------------------------- info about "sortlist" -------------- 91/*-------------------------------------- info about "sortlist" --------------
90 * Marc Majka 1994/04/16 92 * Marc Majka 1994/04/16
91 * Allan Nathanson 1994/10/29 (BIND 4.9.3.x) 93 * Allan Nathanson 1994/10/29 (BIND 4.9.3.x)
@@ -120,6 +122,9 @@ static u_int32_t net_mask(struct in_addr);
120/* 122/*
121 * Resolver state default settings. 123 * Resolver state default settings.
122 */ 124 */
125volatile struct _thread_private_key_struct __THREAD_KEY_NAME(_res) = {
126 PTHREAD_ONCE_INIT, 0
127};
123 128
124struct __res_state _res 129struct __res_state _res
125# if defined(__BIND_RES_TEXT) 130# if defined(__BIND_RES_TEXT)
@@ -127,6 +132,10 @@ struct __res_state _res
127# endif 132# endif
128 ; 133 ;
129#ifdef INET6 134#ifdef INET6
135volatile struct _thread_private_key_struct __THREAD_KEY_NAME(_res_ext) = {
136 PTHREAD_ONCE_INIT, 0
137};
138
130struct __res_state_ext _res_ext; 139struct __res_state_ext _res_ext;
131#endif /* INET6 */ 140#endif /* INET6 */
132 141
@@ -154,6 +163,11 @@ struct __res_state_ext _res_ext;
154int 163int
155res_init() 164res_init()
156{ 165{
166 struct __res_state *_resp = _THREAD_PRIVATE(_res, _res, &_res);
167#ifdef INET6
168 struct __res_state_ext *_res_extp = _THREAD_PRIVATE(_res_ext, _res_ext,
169 &_res_ext);
170#endif
157 register FILE *fp; 171 register FILE *fp;
158 register char *cp, **pp; 172 register char *cp, **pp;
159 register int n; 173 register int n;
@@ -189,33 +203,33 @@ res_init()
189 * set in RES_DEFAULT). Our solution is to declare such applications 203 * set in RES_DEFAULT). Our solution is to declare such applications
190 * "broken". They could fool us by setting RES_INIT but none do (yet). 204 * "broken". They could fool us by setting RES_INIT but none do (yet).
191 */ 205 */
192 if (!_res.retrans) 206 if (!_resp->retrans)
193 _res.retrans = RES_TIMEOUT; 207 _resp->retrans = RES_TIMEOUT;
194 if (!_res.retry) 208 if (!_resp->retry)
195 _res.retry = 4; 209 _resp->retry = 4;
196 if (!(_res.options & RES_INIT)) 210 if (!(_resp->options & RES_INIT))
197 _res.options = RES_DEFAULT; 211 _resp->options = RES_DEFAULT;
198 212
199#ifdef USELOOPBACK 213#ifdef USELOOPBACK
200 _res.nsaddr.sin_addr = inet_makeaddr(IN_LOOPBACKNET, 1); 214 _resp->nsaddr.sin_addr = inet_makeaddr(IN_LOOPBACKNET, 1);
201#else 215#else
202 _res.nsaddr.sin_addr.s_addr = INADDR_ANY; 216 _resp->nsaddr.sin_addr.s_addr = INADDR_ANY;
203#endif 217#endif
204 _res.nsaddr.sin_family = AF_INET; 218 _resp->nsaddr.sin_family = AF_INET;
205 _res.nsaddr.sin_port = htons(NAMESERVER_PORT); 219 _resp->nsaddr.sin_port = htons(NAMESERVER_PORT);
206 _res.nsaddr.sin_len = sizeof(struct sockaddr_in); 220 _resp->nsaddr.sin_len = sizeof(struct sockaddr_in);
207#ifdef INET6 221#ifdef INET6
208 if (sizeof(_res_ext.nsaddr) >= _res.nsaddr.sin_len) 222 if (sizeof(_res_extp->nsaddr) >= _resp->nsaddr.sin_len)
209 memcpy(&_res_ext.nsaddr, &_res.nsaddr, _res.nsaddr.sin_len); 223 memcpy(&_res_extp->nsaddr, &_resp->nsaddr, _resp->nsaddr.sin_len);
210#endif 224#endif
211 _res.nscount = 1; 225 _resp->nscount = 1;
212 _res.ndots = 1; 226 _resp->ndots = 1;
213 _res.pfcode = 0; 227 _resp->pfcode = 0;
214 strlcpy(_res.lookups, "f", sizeof _res.lookups); 228 strlcpy(_resp->lookups, "f", sizeof _resp->lookups);
215 229
216 /* Allow user to override the local domain definition */ 230 /* Allow user to override the local domain definition */
217 if (issetugid() == 0 && (cp = getenv("LOCALDOMAIN")) != NULL) { 231 if (issetugid() == 0 && (cp = getenv("LOCALDOMAIN")) != NULL) {
218 strlcpy(_res.defdname, cp, sizeof(_res.defdname)); 232 strlcpy(_resp->defdname, cp, sizeof(_resp->defdname));
219 haveenv++; 233 haveenv++;
220 234
221 /* 235 /*
@@ -225,10 +239,10 @@ res_init()
225 * one that they want to use as an individual (even more 239 * one that they want to use as an individual (even more
226 * important now that the rfc1535 stuff restricts searches) 240 * important now that the rfc1535 stuff restricts searches)
227 */ 241 */
228 cp = _res.defdname; 242 cp = _resp->defdname;
229 pp = _res.dnsrch; 243 pp = _resp->dnsrch;
230 *pp++ = cp; 244 *pp++ = cp;
231 for (n = 0; *cp && pp < _res.dnsrch + MAXDNSRCH; cp++) { 245 for (n = 0; *cp && pp < _resp->dnsrch + MAXDNSRCH; cp++) {
232 if (*cp == '\n') /* silly backwards compat */ 246 if (*cp == '\n') /* silly backwards compat */
233 break; 247 break;
234 else if (*cp == ' ' || *cp == '\t') { 248 else if (*cp == ' ' || *cp == '\t') {
@@ -253,7 +267,7 @@ res_init()
253 line[sizeof(name) - 1] == '\t')) 267 line[sizeof(name) - 1] == '\t'))
254 268
255 if ((fp = fopen(_PATH_RESCONF, "r")) != NULL) { 269 if ((fp = fopen(_PATH_RESCONF, "r")) != NULL) {
256 strlcpy(_res.lookups, "bf", sizeof _res.lookups); 270 strlcpy(_resp->lookups, "bf", sizeof _resp->lookups);
257 271
258 /* read the config file */ 272 /* read the config file */
259 buf[0] = '\0'; 273 buf[0] = '\0';
@@ -277,8 +291,8 @@ res_init()
277 cp++; 291 cp++;
278 if ((*cp == '\0') || (*cp == '\n')) 292 if ((*cp == '\0') || (*cp == '\n'))
279 continue; 293 continue;
280 strlcpy(_res.defdname, cp, sizeof(_res.defdname)); 294 strlcpy(_resp->defdname, cp, sizeof(_resp->defdname));
281 if ((cp = strpbrk(_res.defdname, " \t\n")) != NULL) 295 if ((cp = strpbrk(_resp->defdname, " \t\n")) != NULL)
282 *cp = '\0'; 296 *cp = '\0';
283 havesearch = 0; 297 havesearch = 0;
284 continue; 298 continue;
@@ -287,7 +301,7 @@ res_init()
287 if (MATCH(buf, "lookup")) { 301 if (MATCH(buf, "lookup")) {
288 char *sp = NULL; 302 char *sp = NULL;
289 303
290 bzero(_res.lookups, sizeof _res.lookups); 304 bzero(_resp->lookups, sizeof _resp->lookups);
291 cp = buf + sizeof("lookup") - 1; 305 cp = buf + sizeof("lookup") - 1;
292 for (n = 0;; cp++) { 306 for (n = 0;; cp++) {
293 if (n == MAXDNSLUS) 307 if (n == MAXDNSLUS)
@@ -295,14 +309,14 @@ res_init()
295 if ((*cp == '\0') || (*cp == '\n')) { 309 if ((*cp == '\0') || (*cp == '\n')) {
296 if (sp) { 310 if (sp) {
297 if (*sp=='y' || *sp=='b' || *sp=='f') 311 if (*sp=='y' || *sp=='b' || *sp=='f')
298 _res.lookups[n++] = *sp; 312 _resp->lookups[n++] = *sp;
299 sp = NULL; 313 sp = NULL;
300 } 314 }
301 break; 315 break;
302 } else if ((*cp == ' ') || (*cp == '\t') || (*cp == ',')) { 316 } else if ((*cp == ' ') || (*cp == '\t') || (*cp == ',')) {
303 if (sp) { 317 if (sp) {
304 if (*sp=='y' || *sp=='b' || *sp=='f') 318 if (*sp=='y' || *sp=='b' || *sp=='f')
305 _res.lookups[n++] = *sp; 319 _resp->lookups[n++] = *sp;
306 sp = NULL; 320 sp = NULL;
307 } 321 }
308 } else if (sp == NULL) 322 } else if (sp == NULL)
@@ -319,17 +333,17 @@ res_init()
319 cp++; 333 cp++;
320 if ((*cp == '\0') || (*cp == '\n')) 334 if ((*cp == '\0') || (*cp == '\n'))
321 continue; 335 continue;
322 strlcpy(_res.defdname, cp, sizeof(_res.defdname)); 336 strlcpy(_resp->defdname, cp, sizeof(_resp->defdname));
323 if ((cp = strchr(_res.defdname, '\n')) != NULL) 337 if ((cp = strchr(_resp->defdname, '\n')) != NULL)
324 *cp = '\0'; 338 *cp = '\0';
325 /* 339 /*
326 * Set search list to be blank-separated strings 340 * Set search list to be blank-separated strings
327 * on rest of line. 341 * on rest of line.
328 */ 342 */
329 cp = _res.defdname; 343 cp = _resp->defdname;
330 pp = _res.dnsrch; 344 pp = _resp->dnsrch;
331 *pp++ = cp; 345 *pp++ = cp;
332 for (n = 0; *cp && pp < _res.dnsrch + MAXDNSRCH; cp++) { 346 for (n = 0; *cp && pp < _resp->dnsrch + MAXDNSRCH; cp++) {
333 if (*cp == ' ' || *cp == '\t') { 347 if (*cp == ' ' || *cp == '\t') {
334 *cp = 0; 348 *cp = 0;
335 n = 1; 349 n = 1;
@@ -375,19 +389,19 @@ res_init()
375 res = NULL; 389 res = NULL;
376 if (getaddrinfo(cp, pbuf, &hints, &res) == 0 && 390 if (getaddrinfo(cp, pbuf, &hints, &res) == 0 &&
377 res->ai_next == NULL) { 391 res->ai_next == NULL) {
378 if (res->ai_addrlen <= sizeof(_res_ext.nsaddr_list[nserv])) { 392 if (res->ai_addrlen <= sizeof(_res_extp->nsaddr_list[nserv])) {
379 memcpy(&_res_ext.nsaddr_list[nserv], res->ai_addr, 393 memcpy(&_res_extp->nsaddr_list[nserv], res->ai_addr,
380 res->ai_addrlen); 394 res->ai_addrlen);
381 } else { 395 } else {
382 memset(&_res_ext.nsaddr_list[nserv], 0, 396 memset(&_res_extp->nsaddr_list[nserv], 0,
383 sizeof(_res_ext.nsaddr_list[nserv])); 397 sizeof(_res_extp->nsaddr_list[nserv]));
384 } 398 }
385 if (res->ai_addrlen <= sizeof(_res.nsaddr_list[nserv])) { 399 if (res->ai_addrlen <= sizeof(_resp->nsaddr_list[nserv])) {
386 memcpy(&_res.nsaddr_list[nserv], res->ai_addr, 400 memcpy(&_resp->nsaddr_list[nserv], res->ai_addr,
387 res->ai_addrlen); 401 res->ai_addrlen);
388 } else { 402 } else {
389 memset(&_res.nsaddr_list[nserv], 0, 403 memset(&_resp->nsaddr_list[nserv], 0,
390 sizeof(_res.nsaddr_list[nserv])); 404 sizeof(_resp->nsaddr_list[nserv]));
391 } 405 }
392 nserv++; 406 nserv++;
393 } 407 }
@@ -395,11 +409,11 @@ res_init()
395 freeaddrinfo(res); 409 freeaddrinfo(res);
396#else /* INET6 */ 410#else /* INET6 */
397 if ((*cp != '\0') && (*cp != '\n') && inet_aton(cp, &a)) { 411 if ((*cp != '\0') && (*cp != '\n') && inet_aton(cp, &a)) {
398 _res.nsaddr_list[nserv].sin_addr = a; 412 _resp->nsaddr_list[nserv].sin_addr = a;
399 _res.nsaddr_list[nserv].sin_family = AF_INET; 413 _resp->nsaddr_list[nserv].sin_family = AF_INET;
400 _res.nsaddr_list[nserv].sin_port = 414 _resp->nsaddr_list[nserv].sin_port =
401 htons(NAMESERVER_PORT); 415 htons(NAMESERVER_PORT);
402 _res.nsaddr_list[nserv].sin_len = 416 _resp->nsaddr_list[nserv].sin_len =
403 sizeof(struct sockaddr_in); 417 sizeof(struct sockaddr_in);
404 nserv++; 418 nserv++;
405 } 419 }
@@ -428,7 +442,7 @@ res_init()
428 n = *cp; 442 n = *cp;
429 *cp = 0; 443 *cp = 0;
430 if (inet_aton(net, &a)) { 444 if (inet_aton(net, &a)) {
431 _res.sort_list[nsort].addr = a; 445 _resp->sort_list[nsort].addr = a;
432 if (ISSORTMASK(n)) { 446 if (ISSORTMASK(n)) {
433 *cp++ = n; 447 *cp++ = n;
434 net = cp; 448 net = cp;
@@ -438,29 +452,29 @@ res_init()
438 n = *cp; 452 n = *cp;
439 *cp = 0; 453 *cp = 0;
440 if (inet_aton(net, &a)) { 454 if (inet_aton(net, &a)) {
441 _res.sort_list[nsort].mask = a.s_addr; 455 _resp->sort_list[nsort].mask = a.s_addr;
442 } else { 456 } else {
443 _res.sort_list[nsort].mask = 457 _resp->sort_list[nsort].mask =
444 net_mask(_res.sort_list[nsort].addr); 458 net_mask(_resp->sort_list[nsort].addr);
445 } 459 }
446 } else { 460 } else {
447 _res.sort_list[nsort].mask = 461 _resp->sort_list[nsort].mask =
448 net_mask(_res.sort_list[nsort].addr); 462 net_mask(_resp->sort_list[nsort].addr);
449 } 463 }
450#ifdef INET6 464#ifdef INET6
451 _res_ext.sort_list[nsort].af = AF_INET; 465 _res_extp->sort_list[nsort].af = AF_INET;
452 _res_ext.sort_list[nsort].addr.ina = 466 _res_extp->sort_list[nsort].addr.ina =
453 _res.sort_list[nsort].addr; 467 _resp->sort_list[nsort].addr;
454 _res_ext.sort_list[nsort].mask.ina.s_addr = 468 _res_extp->sort_list[nsort].mask.ina.s_addr =
455 _res.sort_list[nsort].mask; 469 _resp->sort_list[nsort].mask;
456#endif /* INET6 */ 470#endif /* INET6 */
457 nsort++; 471 nsort++;
458 } 472 }
459#ifdef INET6 473#ifdef INET6
460 else if (inet_pton(AF_INET6, net, &a6) == 1) { 474 else if (inet_pton(AF_INET6, net, &a6) == 1) {
461 _res_ext.sort_list[nsort].af = AF_INET6; 475 _res_extp->sort_list[nsort].af = AF_INET6;
462 _res_ext.sort_list[nsort].addr.in6a = a6; 476 _res_extp->sort_list[nsort].addr.in6a = a6;
463 u = (u_char *)&_res_ext.sort_list[nsort].mask.in6a; 477 u = (u_char *)&_res_extp->sort_list[nsort].mask.in6a;
464 *cp++ = n; 478 *cp++ = n;
465 net = cp; 479 net = cp;
466 while (*cp && *cp != ';' && 480 while (*cp && *cp != ';' &&
@@ -510,33 +524,33 @@ res_init()
510 } 524 }
511 } 525 }
512 if (nserv > 1) 526 if (nserv > 1)
513 _res.nscount = nserv; 527 _resp->nscount = nserv;
514#ifdef RESOLVSORT 528#ifdef RESOLVSORT
515 _res.nsort = nsort; 529 _resp->nsort = nsort;
516#endif 530#endif
517 (void) fclose(fp); 531 (void) fclose(fp);
518 } 532 }
519 if (_res.defdname[0] == 0 && 533 if (_resp->defdname[0] == 0 &&
520 gethostname(buf, sizeof(_res.defdname) - 1) == 0 && 534 gethostname(buf, sizeof(_resp->defdname) - 1) == 0 &&
521 (cp = strchr(buf, '.')) != NULL) 535 (cp = strchr(buf, '.')) != NULL)
522 { 536 {
523 strlcpy(_res.defdname, cp + 1, 537 strlcpy(_resp->defdname, cp + 1,
524 sizeof(_res.defdname)); 538 sizeof(_resp->defdname));
525 } 539 }
526 540
527 /* find components of local domain that might be searched */ 541 /* find components of local domain that might be searched */
528 if (havesearch == 0) { 542 if (havesearch == 0) {
529 pp = _res.dnsrch; 543 pp = _resp->dnsrch;
530 *pp++ = _res.defdname; 544 *pp++ = _resp->defdname;
531 *pp = NULL; 545 *pp = NULL;
532 546
533#ifndef RFC1535 547#ifndef RFC1535
534 dots = 0; 548 dots = 0;
535 for (cp = _res.defdname; *cp; cp++) 549 for (cp = _resp->defdname; *cp; cp++)
536 dots += (*cp == '.'); 550 dots += (*cp == '.');
537 551
538 cp = _res.defdname; 552 cp = _resp->defdname;
539 while (pp < _res.dnsrch + MAXDFLSRCH) { 553 while (pp < _resp->dnsrch + MAXDFLSRCH) {
540 if (dots < LOCALDOMAINPARTS) 554 if (dots < LOCALDOMAINPARTS)
541 break; 555 break;
542 cp = strchr(cp, '.') + 1; /* we know there is one */ 556 cp = strchr(cp, '.') + 1; /* we know there is one */
@@ -545,9 +559,9 @@ res_init()
545 } 559 }
546 *pp = NULL; 560 *pp = NULL;
547#ifdef DEBUG 561#ifdef DEBUG
548 if (_res.options & RES_DEBUG) { 562 if (_resp->options & RES_DEBUG) {
549 printf(";; res_init()... default dnsrch list:\n"); 563 printf(";; res_init()... default dnsrch list:\n");
550 for (pp = _res.dnsrch; *pp; pp++) 564 for (pp = _resp->dnsrch; *pp; pp++)
551 printf(";;\t%s\n", *pp); 565 printf(";;\t%s\n", *pp);
552 printf(";;\t..END..\n"); 566 printf(";;\t..END..\n");
553 } 567 }
@@ -556,10 +570,10 @@ res_init()
556 } 570 }
557 571
558 if (issetugid()) 572 if (issetugid())
559 _res.options |= RES_NOALIASES; 573 _resp->options |= RES_NOALIASES;
560 else if ((cp = getenv("RES_OPTIONS")) != NULL) 574 else if ((cp = getenv("RES_OPTIONS")) != NULL)
561 res_setoptions(cp, "env"); 575 res_setoptions(cp, "env");
562 _res.options |= RES_INIT; 576 _resp->options |= RES_INIT;
563 return (0); 577 return (0);
564} 578}
565 579
@@ -568,12 +582,13 @@ static void
568res_setoptions(options, source) 582res_setoptions(options, source)
569 char *options, *source; 583 char *options, *source;
570{ 584{
585 struct __res_state *_resp = _THREAD_PRIVATE(_res, _res, &_res);
571 char *cp = options; 586 char *cp = options;
572 char *endp; 587 char *endp;
573 long l; 588 long l;
574 589
575#ifdef DEBUG 590#ifdef DEBUG
576 if (_res.options & RES_DEBUG) 591 if (_resp->options & RES_DEBUG)
577 printf(";; res_setoptions(\"%s\", \"%s\")...\n", 592 printf(";; res_setoptions(\"%s\", \"%s\")...\n",
578 options, source); 593 options, source);
579#endif 594#endif
@@ -588,31 +603,31 @@ res_setoptions(options, source)
588 if (l >= 0 && endp != p && 603 if (l >= 0 && endp != p &&
589 (*endp = '\0' || isspace(*endp))) { 604 (*endp = '\0' || isspace(*endp))) {
590 if (l <= RES_MAXNDOTS) 605 if (l <= RES_MAXNDOTS)
591 _res.ndots = l; 606 _resp->ndots = l;
592 else 607 else
593 _res.ndots = RES_MAXNDOTS; 608 _resp->ndots = RES_MAXNDOTS;
594#ifdef DEBUG 609#ifdef DEBUG
595 if (_res.options & RES_DEBUG) 610 if (_resp->options & RES_DEBUG)
596 printf(";;\tndots=%u\n", _res.ndots); 611 printf(";;\tndots=%u\n", _resp->ndots);
597#endif 612#endif
598 } 613 }
599 } else if (!strncmp(cp, "debug", sizeof("debug") - 1)) { 614 } else if (!strncmp(cp, "debug", sizeof("debug") - 1)) {
600#ifdef DEBUG 615#ifdef DEBUG
601 if (!(_res.options & RES_DEBUG)) { 616 if (!(_resp->options & RES_DEBUG)) {
602 printf(";; res_setoptions(\"%s\", \"%s\")..\n", 617 printf(";; res_setoptions(\"%s\", \"%s\")..\n",
603 options, source); 618 options, source);
604 _res.options |= RES_DEBUG; 619 _resp->options |= RES_DEBUG;
605 } 620 }
606 printf(";;\tdebug\n"); 621 printf(";;\tdebug\n");
607#endif 622#endif
608 } else if (!strncmp(cp, "inet6", sizeof("inet6") - 1)) { 623 } else if (!strncmp(cp, "inet6", sizeof("inet6") - 1)) {
609 _res.options |= RES_USE_INET6; 624 _resp->options |= RES_USE_INET6;
610 } else if (!strncmp(cp, "insecure1", sizeof("insecure1") - 1)) { 625 } else if (!strncmp(cp, "insecure1", sizeof("insecure1") - 1)) {
611 _res.options |= RES_INSECURE1; 626 _resp->options |= RES_INSECURE1;
612 } else if (!strncmp(cp, "insecure2", sizeof("insecure2") - 1)) { 627 } else if (!strncmp(cp, "insecure2", sizeof("insecure2") - 1)) {
613 _res.options |= RES_INSECURE2; 628 _resp->options |= RES_INSECURE2;
614 } else if (!strncmp(cp, "edns0", sizeof("edns0") - 1)) { 629 } else if (!strncmp(cp, "edns0", sizeof("edns0") - 1)) {
615 _res.options |= RES_USE_EDNS0; 630 _resp->options |= RES_USE_EDNS0;
616 } else { 631 } else {
617 /* XXX - print a warning here? */ 632 /* XXX - print a warning here? */
618 } 633 }