yann@1
|
1 |
--- libc/resolv/nss_dns/dns-host.c.jj Tue Sep 14 03:05:08 1999
|
yann@1
|
2 |
+++ libc/resolv/nss_dns/dns-host.c Thu Oct 10 13:07:33 2002
|
yann@1
|
3 |
@@ -129,9 +129,10 @@ _nss_dns_gethostbyname2_r (const char *n
|
yann@1
|
4 |
char *buffer, size_t buflen, int *errnop,
|
yann@1
|
5 |
int *h_errnop)
|
yann@1
|
6 |
{
|
yann@1
|
7 |
- querybuf host_buffer;
|
yann@1
|
8 |
+ querybuf *host_buffer;
|
yann@1
|
9 |
int size, type, n;
|
yann@1
|
10 |
const char *cp;
|
yann@1
|
11 |
+ enum nss_status status;
|
yann@1
|
12 |
|
yann@1
|
13 |
switch (af) {
|
yann@1
|
14 |
case AF_INET:
|
yann@1
|
15 |
@@ -159,16 +160,25 @@ _nss_dns_gethostbyname2_r (const char *n
|
yann@1
|
16 |
if (strchr (name, '.') == NULL && (cp = __hostalias (name)) != NULL)
|
yann@1
|
17 |
name = cp;
|
yann@1
|
18 |
|
yann@1
|
19 |
- n = res_search (name, C_IN, type, host_buffer.buf, sizeof (host_buffer.buf));
|
yann@1
|
20 |
+ host_buffer = (querybuf *) malloc (sizeof (*host_buffer));
|
yann@1
|
21 |
+ if (host_buffer == NULL) {
|
yann@1
|
22 |
+ *errnop = ENOMEM;
|
yann@1
|
23 |
+ return NSS_STATUS_UNAVAIL;
|
yann@1
|
24 |
+ }
|
yann@1
|
25 |
+
|
yann@1
|
26 |
+ n = res_search (name, C_IN, type, host_buffer->buf, sizeof (host_buffer->buf));
|
yann@1
|
27 |
if (n < 0)
|
yann@1
|
28 |
{
|
yann@1
|
29 |
*h_errnop = h_errno;
|
yann@1
|
30 |
*errnop = *h_errnop == TRY_AGAIN ? EAGAIN : ENOENT;
|
yann@1
|
31 |
+ free (host_buffer);
|
yann@1
|
32 |
return errno == ECONNREFUSED ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
|
yann@1
|
33 |
}
|
yann@1
|
34 |
|
yann@1
|
35 |
- return getanswer_r (&host_buffer, n, name, type, result, buffer, buflen,
|
yann@1
|
36 |
- errnop, h_errnop);
|
yann@1
|
37 |
+ status = getanswer_r (host_buffer, n, name, type, result, buffer, buflen,
|
yann@1
|
38 |
+ errnop, h_errnop);
|
yann@1
|
39 |
+ free (host_buffer);
|
yann@1
|
40 |
+ return status;
|
yann@1
|
41 |
}
|
yann@1
|
42 |
|
yann@1
|
43 |
|
yann@1
|
44 |
@@ -205,7 +215,7 @@ _nss_dns_gethostbyaddr_r (const char *ad
|
yann@1
|
45 |
char *h_addr_ptrs[MAX_NR_ADDRS + 1];
|
yann@1
|
46 |
char linebuffer[0];
|
yann@1
|
47 |
} *host_data = (struct host_data *) buffer;
|
yann@1
|
48 |
- querybuf host_buffer;
|
yann@1
|
49 |
+ querybuf *host_buffer;
|
yann@1
|
50 |
char qbuf[MAXDNAME+1], *qp;
|
yann@1
|
51 |
size_t size;
|
yann@1
|
52 |
int n, status;
|
yann@1
|
53 |
@@ -257,17 +267,25 @@ _nss_dns_gethostbyaddr_r (const char *ad
|
yann@1
|
54 |
/* Cannot happen. */
|
yann@1
|
55 |
}
|
yann@1
|
56 |
|
yann@1
|
57 |
- n = res_query (qbuf, C_IN, T_PTR, (u_char *)host_buffer.buf,
|
yann@1
|
58 |
- sizeof host_buffer);
|
yann@1
|
59 |
+ host_buffer = (querybuf *) malloc (sizeof (*host_buffer));
|
yann@1
|
60 |
+ if (host_buffer == NULL) {
|
yann@1
|
61 |
+ *errnop = ENOMEM;
|
yann@1
|
62 |
+ return NSS_STATUS_UNAVAIL;
|
yann@1
|
63 |
+ }
|
yann@1
|
64 |
+
|
yann@1
|
65 |
+ n = res_query (qbuf, C_IN, T_PTR, host_buffer->buf,
|
yann@1
|
66 |
+ sizeof (host_buffer->buf));
|
yann@1
|
67 |
if (n < 0)
|
yann@1
|
68 |
{
|
yann@1
|
69 |
*h_errnop = h_errno;
|
yann@1
|
70 |
*errnop = errno;
|
yann@1
|
71 |
+ free (host_buffer);
|
yann@1
|
72 |
return errno == ECONNREFUSED ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
|
yann@1
|
73 |
}
|
yann@1
|
74 |
|
yann@1
|
75 |
- status = getanswer_r (&host_buffer, n, qbuf, T_PTR, result, buffer, buflen,
|
yann@1
|
76 |
+ status = getanswer_r (host_buffer, n, qbuf, T_PTR, result, buffer, buflen,
|
yann@1
|
77 |
errnop, h_errnop);
|
yann@1
|
78 |
+ free (host_buffer);
|
yann@1
|
79 |
if (status != NSS_STATUS_SUCCESS)
|
yann@1
|
80 |
{
|
yann@1
|
81 |
*h_errnop = h_errno;
|
yann@1
|
82 |
--- libc/resolv/nss_dns/dns-network.c.jj Wed Jun 30 12:01:14 1999
|
yann@1
|
83 |
+++ libc/resolv/nss_dns/dns-network.c Thu Oct 10 13:09:49 2002
|
yann@1
|
84 |
@@ -113,24 +113,36 @@ _nss_dns_getnetbyname_r (const char *nam
|
yann@1
|
85 |
char *buffer, size_t buflen, int *errnop)
|
yann@1
|
86 |
{
|
yann@1
|
87 |
/* Return entry for network with NAME. */
|
yann@1
|
88 |
- querybuf net_buffer;
|
yann@1
|
89 |
+ querybuf *net_buffer;
|
yann@1
|
90 |
int anslen;
|
yann@1
|
91 |
char *qbuf;
|
yann@1
|
92 |
+ enum nss_status status;
|
yann@1
|
93 |
|
yann@1
|
94 |
qbuf = strdupa (name);
|
yann@1
|
95 |
- anslen = res_search (qbuf, C_IN, T_PTR, (u_char *) &net_buffer,
|
yann@1
|
96 |
- sizeof (querybuf));
|
yann@1
|
97 |
+
|
yann@1
|
98 |
+ net_buffer = (querybuf *) malloc (sizeof (*net_buffer));
|
yann@1
|
99 |
+ if (net_buffer == NULL)
|
yann@1
|
100 |
+ {
|
yann@1
|
101 |
+ *errnop = ENOMEM;
|
yann@1
|
102 |
+ return NSS_STATUS_UNAVAIL;
|
yann@1
|
103 |
+ }
|
yann@1
|
104 |
+
|
yann@1
|
105 |
+ anslen = res_search (qbuf, C_IN, T_PTR, net_buffer->buf,
|
yann@1
|
106 |
+ sizeof (net_buffer->buf));
|
yann@1
|
107 |
if (anslen < 0)
|
yann@1
|
108 |
{
|
yann@1
|
109 |
/* Nothing found. */
|
yann@1
|
110 |
*errnop = errno;
|
yann@1
|
111 |
+ free (net_buffer);
|
yann@1
|
112 |
return (errno == ECONNREFUSED
|
yann@1
|
113 |
|| errno == EPFNOSUPPORT
|
yann@1
|
114 |
|| errno == EAFNOSUPPORT)
|
yann@1
|
115 |
? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
|
yann@1
|
116 |
}
|
yann@1
|
117 |
|
yann@1
|
118 |
- return getanswer_r (&net_buffer, anslen, result, buffer, buflen, BYNAME);
|
yann@1
|
119 |
+ status = getanswer_r (net_buffer, anslen, result, buffer, buflen, BYNAME);
|
yann@1
|
120 |
+ free (net_buffer);
|
yann@1
|
121 |
+ return status;
|
yann@1
|
122 |
}
|
yann@1
|
123 |
|
yann@1
|
124 |
|
yann@1
|
125 |
@@ -140,7 +152,7 @@ _nss_dns_getnetbyaddr_r (long net, int t
|
yann@1
|
126 |
{
|
yann@1
|
127 |
/* Return entry for network with NAME. */
|
yann@1
|
128 |
enum nss_status status;
|
yann@1
|
129 |
- querybuf net_buffer;
|
yann@1
|
130 |
+ querybuf *net_buffer;
|
yann@1
|
131 |
unsigned int net_bytes[4];
|
yann@1
|
132 |
char qbuf[MAXDNAME];
|
yann@1
|
133 |
int cnt, anslen;
|
yann@1
|
134 |
@@ -176,19 +188,28 @@ _nss_dns_getnetbyaddr_r (long net, int t
|
yann@1
|
135 |
break;
|
yann@1
|
136 |
}
|
yann@1
|
137 |
|
yann@1
|
138 |
- anslen = res_query (qbuf, C_IN, T_PTR, (u_char *) &net_buffer,
|
yann@1
|
139 |
- sizeof (querybuf));
|
yann@1
|
140 |
+ net_buffer = (querybuf *) malloc (sizeof (*net_buffer));
|
yann@1
|
141 |
+ if (net_buffer == NULL)
|
yann@1
|
142 |
+ {
|
yann@1
|
143 |
+ *errnop = ENOMEM;
|
yann@1
|
144 |
+ return NSS_STATUS_UNAVAIL;
|
yann@1
|
145 |
+ }
|
yann@1
|
146 |
+
|
yann@1
|
147 |
+ anslen = res_query (qbuf, C_IN, T_PTR, net_buffer->buf,
|
yann@1
|
148 |
+ sizeof (net_buffer->buf));
|
yann@1
|
149 |
if (anslen < 0)
|
yann@1
|
150 |
{
|
yann@1
|
151 |
/* Nothing found. */
|
yann@1
|
152 |
*errnop = errno;
|
yann@1
|
153 |
+ free (net_buffer);
|
yann@1
|
154 |
return (errno == ECONNREFUSED
|
yann@1
|
155 |
|| errno == EPFNOSUPPORT
|
yann@1
|
156 |
|| errno == EAFNOSUPPORT)
|
yann@1
|
157 |
? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
|
yann@1
|
158 |
}
|
yann@1
|
159 |
|
yann@1
|
160 |
- status = getanswer_r (&net_buffer, anslen, result, buffer, buflen, BYADDR);
|
yann@1
|
161 |
+ status = getanswer_r (net_buffer, anslen, result, buffer, buflen, BYADDR);
|
yann@1
|
162 |
+ free (net_buffer);
|
yann@1
|
163 |
if (status == NSS_STATUS_SUCCESS)
|
yann@1
|
164 |
{
|
yann@1
|
165 |
/* Strip trailing zeros. */
|
yann@1
|
166 |
--- libc/resolv/res_query.c.jj Wed Jun 30 12:01:06 1999
|
yann@1
|
167 |
+++ libc/resolv/res_query.c Thu Oct 10 13:01:12 2002
|
yann@1
|
168 |
@@ -106,7 +106,7 @@ res_query(name, class, type, answer, ans
|
yann@1
|
169 |
u_char *answer; /* buffer to put answer */
|
yann@1
|
170 |
int anslen; /* size of answer buffer */
|
yann@1
|
171 |
{
|
yann@1
|
172 |
- u_char buf[MAXPACKET];
|
yann@1
|
173 |
+ u_char *buf;
|
yann@1
|
174 |
register HEADER *hp = (HEADER *) answer;
|
yann@1
|
175 |
int n;
|
yann@1
|
176 |
|
yann@1
|
177 |
@@ -121,17 +121,25 @@ res_query(name, class, type, answer, ans
|
yann@1
|
178 |
printf(";; res_query(%s, %d, %d)\n", name, class, type);
|
yann@1
|
179 |
#endif
|
yann@1
|
180 |
|
yann@1
|
181 |
+ buf = malloc (MAXPACKET);
|
yann@1
|
182 |
+ if (buf == NULL) {
|
yann@1
|
183 |
+ __set_h_errno (NETDB_INTERNAL);
|
yann@1
|
184 |
+ return -1;
|
yann@1
|
185 |
+ }
|
yann@1
|
186 |
+
|
yann@1
|
187 |
n = res_mkquery(QUERY, name, class, type, NULL, 0, NULL,
|
yann@1
|
188 |
- buf, sizeof(buf));
|
yann@1
|
189 |
+ buf, MAXPACKET);
|
yann@1
|
190 |
if (n <= 0) {
|
yann@1
|
191 |
#ifdef DEBUG
|
yann@1
|
192 |
if (_res.options & RES_DEBUG)
|
yann@1
|
193 |
printf(";; res_query: mkquery failed\n");
|
yann@1
|
194 |
#endif
|
yann@1
|
195 |
__set_h_errno (NO_RECOVERY);
|
yann@1
|
196 |
+ free (buf);
|
yann@1
|
197 |
return (n);
|
yann@1
|
198 |
}
|
yann@1
|
199 |
n = res_send(buf, n, answer, anslen);
|
yann@1
|
200 |
+ free (buf);
|
yann@1
|
201 |
if (n < 0) {
|
yann@1
|
202 |
#ifdef DEBUG
|
yann@1
|
203 |
if (_res.options & RES_DEBUG)
|
yann@1
|
204 |
--- libc/resolv/gethnamaddr.c.jj Tue Dec 7 11:50:36 1999
|
yann@1
|
205 |
+++ libc/resolv/gethnamaddr.c Thu Oct 10 15:05:50 2002
|
yann@1
|
206 |
@@ -512,10 +512,11 @@ gethostbyname2(name, af)
|
yann@1
|
207 |
const char *name;
|
yann@1
|
208 |
int af;
|
yann@1
|
209 |
{
|
yann@1
|
210 |
- querybuf buf;
|
yann@1
|
211 |
+ querybuf *buf;
|
yann@1
|
212 |
register const char *cp;
|
yann@1
|
213 |
char *bp;
|
yann@1
|
214 |
int n, size, type, len;
|
yann@1
|
215 |
+ struct hostent *ret;
|
yann@1
|
216 |
extern struct hostent *_gethtbyname2();
|
yann@1
|
217 |
|
yann@1
|
218 |
if ((_res.options & RES_INIT) == 0 && res_init() == -1) {
|
yann@1
|
219 |
@@ -617,13 +618,22 @@ gethostbyname2(name, af)
|
yann@1
|
220 |
break;
|
yann@1
|
221 |
}
|
yann@1
|
222 |
|
yann@1
|
223 |
- if ((n = res_search(name, C_IN, type, buf.buf, sizeof(buf.buf))) < 0) {
|
yann@1
|
224 |
+ buf = (querybuf *) malloc (sizeof (*buf));
|
yann@1
|
225 |
+ if (buf == NULL) {
|
yann@1
|
226 |
+ __set_h_errno (NETDB_INTERNAL);
|
yann@1
|
227 |
+ return NULL;
|
yann@1
|
228 |
+ }
|
yann@1
|
229 |
+
|
yann@1
|
230 |
+ if ((n = res_search(name, C_IN, type, buf->buf, sizeof(buf->buf))) < 0) {
|
yann@1
|
231 |
+ free (buf);
|
yann@1
|
232 |
dprintf("res_search failed (%d)\n", n);
|
yann@1
|
233 |
if (errno == ECONNREFUSED)
|
yann@1
|
234 |
return (_gethtbyname2(name, af));
|
yann@1
|
235 |
return (NULL);
|
yann@1
|
236 |
}
|
yann@1
|
237 |
- return (getanswer(&buf, n, name, type));
|
yann@1
|
238 |
+ ret = getanswer(buf, n, name, type);
|
yann@1
|
239 |
+ free (buf);
|
yann@1
|
240 |
+ return ret;
|
yann@1
|
241 |
}
|
yann@1
|
242 |
|
yann@1
|
243 |
struct hostent *
|
yann@1
|
244 |
@@ -636,7 +646,7 @@ gethostbyaddr(addr, len, af)
|
yann@1
|
245 |
static const u_char mapped[] = { 0,0, 0,0, 0,0, 0,0, 0,0, 0xff,0xff };
|
yann@1
|
246 |
static const u_char tunnelled[] = { 0,0, 0,0, 0,0, 0,0, 0,0, 0,0 };
|
yann@1
|
247 |
int n, size;
|
yann@1
|
248 |
- querybuf buf;
|
yann@1
|
249 |
+ querybuf *buf;
|
yann@1
|
250 |
register struct hostent *hp;
|
yann@1
|
251 |
char qbuf[MAXDNAME+1], *qp;
|
yann@1
|
252 |
#ifdef SUNSECURITY
|
yann@1
|
253 |
@@ -697,14 +707,24 @@ gethostbyaddr(addr, len, af)
|
yann@1
|
254 |
default:
|
yann@1
|
255 |
abort();
|
yann@1
|
256 |
}
|
yann@1
|
257 |
- n = res_query(qbuf, C_IN, T_PTR, (u_char *)buf.buf, sizeof buf.buf);
|
yann@1
|
258 |
+
|
yann@1
|
259 |
+ buf = (querybuf *) malloc (sizeof (*buf));
|
yann@1
|
260 |
+ if (buf == NULL) {
|
yann@1
|
261 |
+ __set_h_errno (NETDB_INTERNAL);
|
yann@1
|
262 |
+ return NULL;
|
yann@1
|
263 |
+ }
|
yann@1
|
264 |
+
|
yann@1
|
265 |
+ n = res_query(qbuf, C_IN, T_PTR, buf->buf, sizeof buf->buf);
|
yann@1
|
266 |
if (n < 0) {
|
yann@1
|
267 |
+ free (buf);
|
yann@1
|
268 |
dprintf("res_query failed (%d)\n", n);
|
yann@1
|
269 |
if (errno == ECONNREFUSED)
|
yann@1
|
270 |
return (_gethtbyaddr(addr, len, af));
|
yann@1
|
271 |
return (NULL);
|
yann@1
|
272 |
}
|
yann@1
|
273 |
- if (!(hp = getanswer(&buf, n, qbuf, T_PTR)))
|
yann@1
|
274 |
+ hp = getanswer(buf, n, qbuf, T_PTR);
|
yann@1
|
275 |
+ free (buf);
|
yann@1
|
276 |
+ if (!hp)
|
yann@1
|
277 |
return (NULL); /* h_errno was set by getanswer() */
|
yann@1
|
278 |
#ifdef SUNSECURITY
|
yann@1
|
279 |
if (af == AF_INET) {
|
yann@1
|
280 |
--- libc/resolv/getnetnamadr.c.jj Wed Jun 30 12:00:50 1999
|
yann@1
|
281 |
+++ libc/resolv/getnetnamadr.c Thu Oct 10 13:14:01 2002
|
yann@1
|
282 |
@@ -210,7 +210,7 @@ getnetbyaddr(net, net_type)
|
yann@1
|
283 |
{
|
yann@1
|
284 |
unsigned int netbr[4];
|
yann@1
|
285 |
int nn, anslen;
|
yann@1
|
286 |
- querybuf buf;
|
yann@1
|
287 |
+ querybuf *buf;
|
yann@1
|
288 |
char qbuf[MAXDNAME];
|
yann@1
|
289 |
u_int32_t net2; /* Changed from unsigned long --roland */
|
yann@1
|
290 |
struct netent *net_entry;
|
yann@1
|
291 |
@@ -236,8 +236,15 @@ getnetbyaddr(net, net_type)
|
yann@1
|
292 |
netbr[1], netbr[0]);
|
yann@1
|
293 |
break;
|
yann@1
|
294 |
}
|
yann@1
|
295 |
- anslen = res_query(qbuf, C_IN, T_PTR, (u_char *)&buf, sizeof(buf));
|
yann@1
|
296 |
+
|
yann@1
|
297 |
+ buf = (querybuf *) malloc (sizeof (*buf));
|
yann@1
|
298 |
+ if (buf == NULL) {
|
yann@1
|
299 |
+ return NULL;
|
yann@1
|
300 |
+ }
|
yann@1
|
301 |
+
|
yann@1
|
302 |
+ anslen = res_query(qbuf, C_IN, T_PTR, buf->buf, sizeof(buf->buf));
|
yann@1
|
303 |
if (anslen < 0) {
|
yann@1
|
304 |
+ free (buf);
|
yann@1
|
305 |
#ifdef DEBUG
|
yann@1
|
306 |
if (_res.options & RES_DEBUG)
|
yann@1
|
307 |
printf("res_query failed\n");
|
yann@1
|
308 |
@@ -246,7 +253,8 @@ getnetbyaddr(net, net_type)
|
yann@1
|
309 |
return (_getnetbyaddr(net, net_type));
|
yann@1
|
310 |
return (NULL);
|
yann@1
|
311 |
}
|
yann@1
|
312 |
- net_entry = getnetanswer(&buf, anslen, BYADDR);
|
yann@1
|
313 |
+ net_entry = getnetanswer(buf, anslen, BYADDR);
|
yann@1
|
314 |
+ free (buf);
|
yann@1
|
315 |
if (net_entry) {
|
yann@1
|
316 |
unsigned u_net = net; /* maybe net should be unsigned ? */
|
yann@1
|
317 |
|
yann@1
|
318 |
@@ -264,7 +272,7 @@ getnetbyname(net)
|
yann@1
|
319 |
register const char *net;
|
yann@1
|
320 |
{
|
yann@1
|
321 |
int anslen;
|
yann@1
|
322 |
- querybuf buf;
|
yann@1
|
323 |
+ querybuf *buf;
|
yann@1
|
324 |
char qbuf[MAXDNAME];
|
yann@1
|
325 |
struct netent *net_entry;
|
yann@1
|
326 |
|
yann@1
|
327 |
@@ -273,8 +281,13 @@ getnetbyname(net)
|
yann@1
|
328 |
return (NULL);
|
yann@1
|
329 |
}
|
yann@1
|
330 |
strcpy(&qbuf[0], net);
|
yann@1
|
331 |
- anslen = res_search(qbuf, C_IN, T_PTR, (u_char *)&buf, sizeof(buf));
|
yann@1
|
332 |
+ buf = (querybuf *) malloc (sizeof (*buf));
|
yann@1
|
333 |
+ if (buf == NULL) {
|
yann@1
|
334 |
+ return NULL;
|
yann@1
|
335 |
+ }
|
yann@1
|
336 |
+ anslen = res_search(qbuf, C_IN, T_PTR, buf->buf, sizeof(buf->buf));
|
yann@1
|
337 |
if (anslen < 0) {
|
yann@1
|
338 |
+ free (buf);
|
yann@1
|
339 |
#ifdef DEBUG
|
yann@1
|
340 |
if (_res.options & RES_DEBUG)
|
yann@1
|
341 |
printf("res_query failed\n");
|
yann@1
|
342 |
@@ -283,7 +296,8 @@ getnetbyname(net)
|
yann@1
|
343 |
return (_getnetbyname(net));
|
yann@1
|
344 |
return (_getnetbyname(net));
|
yann@1
|
345 |
}
|
yann@1
|
346 |
- net_entry = getnetanswer(&buf, anslen, BYNAME);
|
yann@1
|
347 |
+ net_entry = getnetanswer(buf, anslen, BYNAME);
|
yann@1
|
348 |
+ free (buf);
|
yann@1
|
349 |
if (net_entry)
|
yann@1
|
350 |
return (net_entry);
|
yann@1
|
351 |
return (_getnetbyname(net));
|
yann@1
|
352 |
--- libc/glibc-compat/nss_dns/dns-host.c.jj Mon Jan 3 20:07:08 2000
|
yann@1
|
353 |
+++ libc/glibc-compat/nss_dns/dns-host.c Thu Oct 10 12:46:24 2002
|
yann@1
|
354 |
@@ -126,9 +126,10 @@ enum nss_status
|
yann@1
|
355 |
_nss_dns_gethostbyname2_r (const char *name, int af, struct hostent *result,
|
yann@1
|
356 |
char *buffer, size_t buflen, int *h_errnop)
|
yann@1
|
357 |
{
|
yann@1
|
358 |
- querybuf host_buffer;
|
yann@1
|
359 |
+ querybuf *host_buffer;
|
yann@1
|
360 |
int size, type, n;
|
yann@1
|
361 |
const char *cp;
|
yann@1
|
362 |
+ enum nss_status status;
|
yann@1
|
363 |
|
yann@1
|
364 |
switch (af) {
|
yann@1
|
365 |
case AF_INET:
|
yann@1
|
366 |
@@ -156,15 +157,22 @@ _nss_dns_gethostbyname2_r (const char *n
|
yann@1
|
367 |
if (strchr (name, '.') == NULL && (cp = __hostalias (name)) != NULL)
|
yann@1
|
368 |
name = cp;
|
yann@1
|
369 |
|
yann@1
|
370 |
- n = res_search (name, C_IN, type, host_buffer.buf, sizeof (host_buffer.buf));
|
yann@1
|
371 |
+ host_buffer = (querybuf *) malloc (sizeof (querybuf));
|
yann@1
|
372 |
+ if (host_buffer == NULL)
|
yann@1
|
373 |
+ return NSS_STATUS_UNAVAIL;
|
yann@1
|
374 |
+
|
yann@1
|
375 |
+ n = res_search (name, C_IN, type, host_buffer->buf, sizeof (host_buffer->buf));
|
yann@1
|
376 |
if (n < 0)
|
yann@1
|
377 |
{
|
yann@1
|
378 |
*h_errnop = h_errno;
|
yann@1
|
379 |
+ free (host_buffer);
|
yann@1
|
380 |
return errno == ECONNREFUSED ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
|
yann@1
|
381 |
}
|
yann@1
|
382 |
|
yann@1
|
383 |
- return getanswer_r (&host_buffer, n, name, type, result, buffer, buflen,
|
yann@1
|
384 |
- h_errnop);
|
yann@1
|
385 |
+ status = getanswer_r (host_buffer, n, name, type, result, buffer, buflen,
|
yann@1
|
386 |
+ h_errnop);
|
yann@1
|
387 |
+ free (host_buffer);
|
yann@1
|
388 |
+ return status;
|
yann@1
|
389 |
}
|
yann@1
|
390 |
|
yann@1
|
391 |
|
yann@1
|
392 |
@@ -200,7 +208,7 @@ _nss_dns_gethostbyaddr_r (const char *ad
|
yann@1
|
393 |
char *h_addr_ptrs[MAX_NR_ADDRS + 1];
|
yann@1
|
394 |
char linebuffer[0];
|
yann@1
|
395 |
} *host_data = (struct host_data *) buffer;
|
yann@1
|
396 |
- querybuf host_buffer;
|
yann@1
|
397 |
+ querybuf *host_buffer;
|
yann@1
|
398 |
char qbuf[MAXDNAME+1], *qp;
|
yann@1
|
399 |
int size, n, status;
|
yann@1
|
400 |
|
yann@1
|
401 |
@@ -251,16 +259,22 @@ _nss_dns_gethostbyaddr_r (const char *ad
|
yann@1
|
402 |
/* Cannot happen. */
|
yann@1
|
403 |
}
|
yann@1
|
404 |
|
yann@1
|
405 |
- n = res_query (qbuf, C_IN, T_PTR, (u_char *)host_buffer.buf,
|
yann@1
|
406 |
- sizeof host_buffer);
|
yann@1
|
407 |
+ host_buffer = (querybuf *) malloc (sizeof (querybuf));
|
yann@1
|
408 |
+ if (host_buffer == NULL)
|
yann@1
|
409 |
+ return NSS_STATUS_UNAVAIL;
|
yann@1
|
410 |
+
|
yann@1
|
411 |
+ n = res_query (qbuf, C_IN, T_PTR, host_buffer->buf,
|
yann@1
|
412 |
+ sizeof (host_buffer->buf));
|
yann@1
|
413 |
if (n < 0)
|
yann@1
|
414 |
{
|
yann@1
|
415 |
*h_errnop = h_errno;
|
yann@1
|
416 |
+ free (host_buffer);
|
yann@1
|
417 |
return errno == ECONNREFUSED ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
|
yann@1
|
418 |
}
|
yann@1
|
419 |
|
yann@1
|
420 |
- status = getanswer_r (&host_buffer, n, qbuf, T_PTR, result, buffer, buflen,
|
yann@1
|
421 |
+ status = getanswer_r (host_buffer, n, qbuf, T_PTR, result, buffer, buflen,
|
yann@1
|
422 |
h_errnop);
|
yann@1
|
423 |
+ free (host_buffer);
|
yann@1
|
424 |
if (status != NSS_STATUS_SUCCESS)
|
yann@1
|
425 |
{
|
yann@1
|
426 |
*h_errnop = h_errno;
|
yann@1
|
427 |
--- libc/glibc-compat/nss_dns/dns-network.c.jj Mon Jan 3 20:07:08 2000
|
yann@1
|
428 |
+++ libc/glibc-compat/nss_dns/dns-network.c Thu Oct 10 12:46:24 2002
|
yann@1
|
429 |
@@ -107,21 +107,32 @@ _nss_dns_getnetbyname_r (const char *nam
|
yann@1
|
430 |
char *buffer, size_t buflen)
|
yann@1
|
431 |
{
|
yann@1
|
432 |
/* Return entry for network with NAME. */
|
yann@1
|
433 |
- querybuf net_buffer;
|
yann@1
|
434 |
+ querybuf *net_buffer;
|
yann@1
|
435 |
int anslen;
|
yann@1
|
436 |
char *qbuf;
|
yann@1
|
437 |
+ enum nss_status status;
|
yann@1
|
438 |
|
yann@1
|
439 |
qbuf = strdupa (name);
|
yann@1
|
440 |
- anslen = res_search (qbuf, C_IN, T_PTR, (u_char *) &net_buffer,
|
yann@1
|
441 |
- sizeof (querybuf));
|
yann@1
|
442 |
+
|
yann@1
|
443 |
+ net_buffer = (querybuf *) malloc (sizeof (querybuf));
|
yann@1
|
444 |
+ if (net_buffer == NULL)
|
yann@1
|
445 |
+ return NSS_STATUS_UNAVAIL;
|
yann@1
|
446 |
+
|
yann@1
|
447 |
+ anslen = res_search (qbuf, C_IN, T_PTR, net_buffer->buf,
|
yann@1
|
448 |
+ sizeof (net_buffer->buf));
|
yann@1
|
449 |
if (anslen < 0)
|
yann@1
|
450 |
- /* Nothing found. */
|
yann@1
|
451 |
- return (errno == ECONNREFUSED
|
yann@1
|
452 |
- || errno == EPFNOSUPPORT
|
yann@1
|
453 |
- || errno == EAFNOSUPPORT)
|
yann@1
|
454 |
- ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
|
yann@1
|
455 |
+ {
|
yann@1
|
456 |
+ free (net_buffer);
|
yann@1
|
457 |
+ /* Nothing found. */
|
yann@1
|
458 |
+ return (errno == ECONNREFUSED
|
yann@1
|
459 |
+ || errno == EPFNOSUPPORT
|
yann@1
|
460 |
+ || errno == EAFNOSUPPORT)
|
yann@1
|
461 |
+ ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
|
yann@1
|
462 |
+ }
|
yann@1
|
463 |
|
yann@1
|
464 |
- return getanswer_r (&net_buffer, anslen, result, buffer, buflen, BYNAME);
|
yann@1
|
465 |
+ status = getanswer_r (net_buffer, anslen, result, buffer, buflen, BYNAME);
|
yann@1
|
466 |
+ free (net_buffer);
|
yann@1
|
467 |
+ return status;
|
yann@1
|
468 |
}
|
yann@1
|
469 |
|
yann@1
|
470 |
|
yann@1
|
471 |
@@ -131,7 +142,7 @@ _nss_dns_getnetbyaddr_r (long net, int t
|
yann@1
|
472 |
{
|
yann@1
|
473 |
/* Return entry for network with NAME. */
|
yann@1
|
474 |
enum nss_status status;
|
yann@1
|
475 |
- querybuf net_buffer;
|
yann@1
|
476 |
+ querybuf *net_buffer;
|
yann@1
|
477 |
unsigned int net_bytes[4];
|
yann@1
|
478 |
char qbuf[MAXDNAME];
|
yann@1
|
479 |
int cnt, anslen;
|
yann@1
|
480 |
@@ -167,16 +178,24 @@ _nss_dns_getnetbyaddr_r (long net, int t
|
yann@1
|
481 |
break;
|
yann@1
|
482 |
}
|
yann@1
|
483 |
|
yann@1
|
484 |
- anslen = res_query (qbuf, C_IN, T_PTR, (u_char *) &net_buffer,
|
yann@1
|
485 |
- sizeof (querybuf));
|
yann@1
|
486 |
+ net_buffer = (querybuf *) malloc (sizeof (querybuf));
|
yann@1
|
487 |
+ if (net_buffer == NULL)
|
yann@1
|
488 |
+ return NSS_STATUS_UNAVAIL;
|
yann@1
|
489 |
+
|
yann@1
|
490 |
+ anslen = res_query (qbuf, C_IN, T_PTR, net_buffer->buf,
|
yann@1
|
491 |
+ sizeof (net_buffer->buf));
|
yann@1
|
492 |
if (anslen < 0)
|
yann@1
|
493 |
- /* Nothing found. */
|
yann@1
|
494 |
- return (errno == ECONNREFUSED
|
yann@1
|
495 |
- || errno == EPFNOSUPPORT
|
yann@1
|
496 |
- || errno == EAFNOSUPPORT)
|
yann@1
|
497 |
- ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
|
yann@1
|
498 |
+ {
|
yann@1
|
499 |
+ free (net_buffer);
|
yann@1
|
500 |
+ /* Nothing found. */
|
yann@1
|
501 |
+ return (errno == ECONNREFUSED
|
yann@1
|
502 |
+ || errno == EPFNOSUPPORT
|
yann@1
|
503 |
+ || errno == EAFNOSUPPORT)
|
yann@1
|
504 |
+ ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
|
yann@1
|
505 |
+ }
|
yann@1
|
506 |
|
yann@1
|
507 |
- status = getanswer_r (&net_buffer, anslen, result, buffer, buflen, BYADDR);
|
yann@1
|
508 |
+ status = getanswer_r (net_buffer, anslen, result, buffer, buflen, BYADDR);
|
yann@1
|
509 |
+ free (net_buffer);
|
yann@1
|
510 |
if (status == NSS_STATUS_SUCCESS)
|
yann@1
|
511 |
{
|
yann@1
|
512 |
/* Strip trailing zeros. */
|