summaryrefslogtreecommitdiff
path: root/src/lib/libc/net/getrrsetbyname.c
diff options
context:
space:
mode:
authormarc <>2003-01-28 04:58:00 +0000
committermarc <>2003-01-28 04:58:00 +0000
commit547ebab319b228b064cf5dcb3ff0ae1bf23d24a2 (patch)
treef57454716593fb3b68672505c6dccab6438498f1 /src/lib/libc/net/getrrsetbyname.c
parent98a78d57b176408b5aca87705f9681c5b155b47c (diff)
downloadopenbsd-547ebab319b228b064cf5dcb3ff0ae1bf23d24a2.tar.gz
openbsd-547ebab319b228b064cf5dcb3ff0ae1bf23d24a2.tar.bz2
openbsd-547ebab319b228b064cf5dcb3ff0ae1bf23d24a2.zip
thread safer libc (note: safer, not safe)
Access to the global _res structure replaced by pointers to a per thread instance. If unthreaded the pointer is to the global structure. Also replaced a 64k stack array with malloc-ed memory so threaded aps (with a default 64k stack) have a chance at working. ok deraadt@
Diffstat (limited to 'src/lib/libc/net/getrrsetbyname.c')
-rw-r--r--src/lib/libc/net/getrrsetbyname.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/lib/libc/net/getrrsetbyname.c b/src/lib/libc/net/getrrsetbyname.c
index 1ec60486b3..e4bd9a936e 100644
--- a/src/lib/libc/net/getrrsetbyname.c
+++ b/src/lib/libc/net/getrrsetbyname.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: getrrsetbyname.c,v 1.5 2002/09/07 20:54:04 jakob Exp $ */ 1/* $OpenBSD: getrrsetbyname.c,v 1.6 2003/01/28 04:58:00 marc Exp $ */
2 2
3/* 3/*
4 * Copyright (c) 2001 Jakob Schlyter. All rights reserved. 4 * Copyright (c) 2001 Jakob Schlyter. All rights reserved.
@@ -51,6 +51,8 @@
51#include <stdlib.h> 51#include <stdlib.h>
52#include <string.h> 52#include <string.h>
53 53
54#include "thread_private.h"
55
54#define ANSWER_BUFFER_SIZE 1024*64 56#define ANSWER_BUFFER_SIZE 1024*64
55 57
56struct dns_query { 58struct dns_query {
@@ -95,6 +97,7 @@ getrrsetbyname(const char *hostname, unsigned int rdclass,
95 unsigned int rdtype, unsigned int flags, 97 unsigned int rdtype, unsigned int flags,
96 struct rrsetinfo **res) 98 struct rrsetinfo **res)
97{ 99{
100 struct __res_state *_resp = _THREAD_PRIVATE(_res, _res, &_res);
98 int result; 101 int result;
99 struct rrsetinfo *rrset = NULL; 102 struct rrsetinfo *rrset = NULL;
100 struct dns_response *response; 103 struct dns_response *response;
@@ -122,19 +125,19 @@ getrrsetbyname(const char *hostname, unsigned int rdclass,
122 } 125 }
123 126
124 /* initialize resolver */ 127 /* initialize resolver */
125 if ((_res.options & RES_INIT) == 0 && res_init() == -1) { 128 if ((_resp->options & RES_INIT) == 0 && res_init() == -1) {
126 result = ERRSET_FAIL; 129 result = ERRSET_FAIL;
127 goto fail; 130 goto fail;
128 } 131 }
129 132
130#ifdef DEBUG 133#ifdef DEBUG
131 _res.options |= RES_DEBUG; 134 _resp->options |= RES_DEBUG;
132#endif /* DEBUG */ 135#endif /* DEBUG */
133 136
134#ifdef RES_USE_DNSSEC 137#ifdef RES_USE_DNSSEC
135 /* turn on DNSSEC if EDNS0 is configured */ 138 /* turn on DNSSEC if EDNS0 is configured */
136 if (_res.options & RES_USE_EDNS0) 139 if (_resp->options & RES_USE_EDNS0)
137 _res.options |= RES_USE_DNSSEC; 140 _resp->options |= RES_USE_DNSSEC;
138#endif /* RES_USE_DNSEC */ 141#endif /* RES_USE_DNSEC */
139 142
140 /* make query */ 143 /* make query */