diff options
author | itojun <> | 2002-08-27 08:53:13 +0000 |
---|---|---|
committer | itojun <> | 2002-08-27 08:53:13 +0000 |
commit | 69e635aa5ff8682829c1dabe85f07036fe78a8d8 (patch) | |
tree | 3604890584cae1bff5aea913e0b4e8dc699ee452 /src/lib/libc/net/getnetnamadr.c | |
parent | 1da97f9d763891c390b0295da95f556484c36d8f (diff) | |
download | openbsd-69e635aa5ff8682829c1dabe85f07036fe78a8d8.tar.gz openbsd-69e635aa5ff8682829c1dabe85f07036fe78a8d8.tar.bz2 openbsd-69e635aa5ff8682829c1dabe85f07036fe78a8d8.zip |
allocate 64K recieve buffer for DNS responses.
Diffstat (limited to 'src/lib/libc/net/getnetnamadr.c')
-rw-r--r-- | src/lib/libc/net/getnetnamadr.c | 37 |
1 files changed, 22 insertions, 15 deletions
diff --git a/src/lib/libc/net/getnetnamadr.c b/src/lib/libc/net/getnetnamadr.c index 44810337bd..abbfdbd64c 100644 --- a/src/lib/libc/net/getnetnamadr.c +++ b/src/lib/libc/net/getnetnamadr.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: getnetnamadr.c,v 1.17 2002/07/25 21:13:45 deraadt Exp $ */ | 1 | /* $OpenBSD: getnetnamadr.c,v 1.18 2002/08/27 08:53:13 itojun Exp $ */ |
2 | 2 | ||
3 | /* | 3 | /* |
4 | * Copyright (c) 1997, Jason Downs. All rights reserved. | 4 | * Copyright (c) 1997, Jason Downs. All rights reserved. |
@@ -77,7 +77,7 @@ static char sccsid[] = "@(#)getnetbyaddr.c 8.1 (Berkeley) 6/4/93"; | |||
77 | static char sccsid_[] = "from getnetnamadr.c 1.4 (Coimbra) 93/06/03"; | 77 | static char sccsid_[] = "from getnetnamadr.c 1.4 (Coimbra) 93/06/03"; |
78 | static char rcsid[] = "$From: getnetnamadr.c,v 8.7 1996/08/05 08:31:35 vixie Exp $"; | 78 | static char rcsid[] = "$From: getnetnamadr.c,v 8.7 1996/08/05 08:31:35 vixie Exp $"; |
79 | #else | 79 | #else |
80 | static char rcsid[] = "$OpenBSD: getnetnamadr.c,v 1.17 2002/07/25 21:13:45 deraadt Exp $"; | 80 | static char rcsid[] = "$OpenBSD: getnetnamadr.c,v 1.18 2002/08/27 08:53:13 itojun Exp $"; |
81 | #endif | 81 | #endif |
82 | #endif /* LIBC_SCCS and not lint */ | 82 | #endif /* LIBC_SCCS and not lint */ |
83 | 83 | ||
@@ -94,6 +94,7 @@ static char rcsid[] = "$OpenBSD: getnetnamadr.c,v 1.17 2002/07/25 21:13:45 deraa | |||
94 | #include <ctype.h> | 94 | #include <ctype.h> |
95 | #include <errno.h> | 95 | #include <errno.h> |
96 | #include <string.h> | 96 | #include <string.h> |
97 | #include <stdlib.h> | ||
97 | 98 | ||
98 | extern int h_errno; | 99 | extern int h_errno; |
99 | 100 | ||
@@ -106,11 +107,7 @@ int _hokchar(const char *); | |||
106 | #define BYNAME 1 | 107 | #define BYNAME 1 |
107 | #define MAXALIASES 35 | 108 | #define MAXALIASES 35 |
108 | 109 | ||
109 | #if PACKETSZ > 1024 | 110 | #define MAXPACKET (64*1024) |
110 | #define MAXPACKET PACKETSZ | ||
111 | #else | ||
112 | #define MAXPACKET 1024 | ||
113 | #endif | ||
114 | 111 | ||
115 | typedef union { | 112 | typedef union { |
116 | HEADER hdr; | 113 | HEADER hdr; |
@@ -252,7 +249,7 @@ getnetbyaddr(net, net_type) | |||
252 | { | 249 | { |
253 | unsigned int netbr[4]; | 250 | unsigned int netbr[4]; |
254 | int nn, anslen; | 251 | int nn, anslen; |
255 | querybuf buf; | 252 | querybuf *buf; |
256 | char qbuf[MAXDNAME]; | 253 | char qbuf[MAXDNAME]; |
257 | in_addr_t net2; | 254 | in_addr_t net2; |
258 | struct netent *net_entry = NULL; | 255 | struct netent *net_entry = NULL; |
@@ -300,16 +297,21 @@ getnetbyaddr(net, net_type) | |||
300 | netbr[3], netbr[2], netbr[1], netbr[0]); | 297 | netbr[3], netbr[2], netbr[1], netbr[0]); |
301 | break; | 298 | break; |
302 | } | 299 | } |
303 | anslen = res_query(qbuf, C_IN, T_PTR, (u_char *)&buf, | 300 | buf = malloc(sizeof(*buf)); |
304 | sizeof(buf)); | 301 | if (buf == NULL) |
302 | break; | ||
303 | anslen = res_query(qbuf, C_IN, T_PTR, buf->buf, | ||
304 | sizeof(buf->buf)); | ||
305 | if (anslen < 0) { | 305 | if (anslen < 0) { |
306 | free(buf); | ||
306 | #ifdef DEBUG | 307 | #ifdef DEBUG |
307 | if (_res.options & RES_DEBUG) | 308 | if (_res.options & RES_DEBUG) |
308 | printf("res_query failed\n"); | 309 | printf("res_query failed\n"); |
309 | #endif | 310 | #endif |
310 | break; | 311 | break; |
311 | } | 312 | } |
312 | net_entry = getnetanswer(&buf, anslen, BYADDR); | 313 | net_entry = getnetanswer(buf, anslen, BYADDR); |
314 | free(buf); | ||
313 | if (net_entry != NULL) { | 315 | if (net_entry != NULL) { |
314 | unsigned u_net = net; /* maybe net should be unsigned ? */ | 316 | unsigned u_net = net; /* maybe net should be unsigned ? */ |
315 | 317 | ||
@@ -336,7 +338,7 @@ getnetbyname(net) | |||
336 | register const char *net; | 338 | register const char *net; |
337 | { | 339 | { |
338 | int anslen; | 340 | int anslen; |
339 | querybuf buf; | 341 | querybuf *buf; |
340 | char qbuf[MAXDNAME]; | 342 | char qbuf[MAXDNAME]; |
341 | struct netent *net_entry = NULL; | 343 | struct netent *net_entry = NULL; |
342 | char lookups[MAXDNSLUS]; | 344 | char lookups[MAXDNSLUS]; |
@@ -358,16 +360,21 @@ getnetbyname(net) | |||
358 | #endif /* YP */ | 360 | #endif /* YP */ |
359 | case 'b': | 361 | case 'b': |
360 | strlcpy(qbuf, net, sizeof qbuf); | 362 | strlcpy(qbuf, net, sizeof qbuf); |
361 | anslen = res_search(qbuf, C_IN, T_PTR, (u_char *)&buf, | 363 | buf = malloc(sizeof(*buf)); |
362 | sizeof(buf)); | 364 | if (buf == NULL) |
365 | break; | ||
366 | anslen = res_search(qbuf, C_IN, T_PTR, buf->buf, | ||
367 | sizeof(buf->buf)); | ||
363 | if (anslen < 0) { | 368 | if (anslen < 0) { |
369 | free(buf); | ||
364 | #ifdef DEBUG | 370 | #ifdef DEBUG |
365 | if (_res.options & RES_DEBUG) | 371 | if (_res.options & RES_DEBUG) |
366 | printf("res_query failed\n"); | 372 | printf("res_query failed\n"); |
367 | #endif | 373 | #endif |
368 | break; | 374 | break; |
369 | } | 375 | } |
370 | net_entry = getnetanswer(&buf, anslen, BYNAME); | 376 | net_entry = getnetanswer(buf, anslen, BYNAME); |
377 | free(buf); | ||
371 | if (net_entry != NULL) | 378 | if (net_entry != NULL) |
372 | return (net_entry); | 379 | return (net_entry); |
373 | break; | 380 | break; |