summaryrefslogtreecommitdiff
path: root/src/lib/libc/net/getnetnamadr.c
diff options
context:
space:
mode:
authoritojun <>2002-08-27 08:53:13 +0000
committeritojun <>2002-08-27 08:53:13 +0000
commit69e635aa5ff8682829c1dabe85f07036fe78a8d8 (patch)
tree3604890584cae1bff5aea913e0b4e8dc699ee452 /src/lib/libc/net/getnetnamadr.c
parent1da97f9d763891c390b0295da95f556484c36d8f (diff)
downloadopenbsd-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.c37
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";
77static char sccsid_[] = "from getnetnamadr.c 1.4 (Coimbra) 93/06/03"; 77static char sccsid_[] = "from getnetnamadr.c 1.4 (Coimbra) 93/06/03";
78static char rcsid[] = "$From: getnetnamadr.c,v 8.7 1996/08/05 08:31:35 vixie Exp $"; 78static char rcsid[] = "$From: getnetnamadr.c,v 8.7 1996/08/05 08:31:35 vixie Exp $";
79#else 79#else
80static char rcsid[] = "$OpenBSD: getnetnamadr.c,v 1.17 2002/07/25 21:13:45 deraadt Exp $"; 80static 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
98extern int h_errno; 99extern 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
115typedef union { 112typedef 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;