]> git.pld-linux.org Git - packages/glibc.git/blame - glibc-maxpacket.patch
- merged sparc64 updates from AC-branch (enhanced for ppc64,s390x)
[packages/glibc.git] / glibc-maxpacket.patch
CommitLineData
7b1c77f9 12002-10-09 Jakub Jelinek <jakub@redhat.com>
2
3 * resolv/nss_dns/dns-host.c (_nss_dns_gethostbyname2_r,
4 _nss_dns_gethostbyaddr_r): Use malloc for host_buffer.
5 * resolv/nss_dns/dns-network.c (_nss_dns_getnetbyname_r,
6 _nss_dns_getnetbyaddr_r): Use malloc for net_buffer.
7 * resolv/res_query.c (res_nquery): Use malloc for buf.
8 * resolv/gethnamaddr.c (gethostbyname2, gethostbyaddr): Likewise.
9
10--- libc/resolv/nss_dns/dns-host.c.jj Thu Dec 27 14:34:02 2001
11+++ libc/resolv/nss_dns/dns-host.c Wed Oct 9 11:23:19 2002
12@@ -132,11 +132,12 @@ _nss_dns_gethostbyname2_r (const char *n
13 char *buffer, size_t buflen, int *errnop,
14 int *h_errnop)
15 {
16- querybuf host_buffer;
17+ querybuf *host_buffer;
18 char tmp[NS_MAXDNAME];
19 int size, type, n;
20 const char *cp;
21 int map = 0;
22+ enum nss_status status;
23
24 if ((_res.options & RES_INIT) == 0 && __res_ninit (&_res) == -1)
25 return NSS_STATUS_UNAVAIL;
26@@ -168,8 +169,15 @@ _nss_dns_gethostbyname2_r (const char *n
27 && (cp = res_hostalias (&_res, name, tmp, sizeof (tmp))) != NULL)
28 name = cp;
29
30- n = res_nsearch (&_res, name, C_IN, type, host_buffer.buf,
31- sizeof (host_buffer.buf));
32+ host_buffer = (querybuf *) malloc (sizeof (querybuf));
33+ if (host_buffer == NULL)
34+ {
35+ *errnop = ENOMEM;
36+ return NSS_STATUS_UNAVAIL;
37+ }
38+
39+ n = res_nsearch (&_res, name, C_IN, type, host_buffer->buf,
40+ sizeof (host_buffer->buf));
41 if (n < 0)
42 {
43 enum nss_status status = (errno == ECONNREFUSED
44@@ -181,11 +189,14 @@ _nss_dns_gethostbyname2_r (const char *n
45 by having the RES_USE_INET6 bit in _res.options set, we try
46 another lookup. */
47 if (af == AF_INET6 && (_res.options & RES_USE_INET6))
48- n = res_nsearch (&_res, name, C_IN, T_A, host_buffer.buf,
49- sizeof (host_buffer.buf));
50+ n = res_nsearch (&_res, name, C_IN, T_A, host_buffer->buf,
51+ sizeof (host_buffer->buf));
52
53 if (n < 0)
54- return status;
55+ {
56+ free (host_buffer);
57+ return status;
58+ }
59
60 map = 1;
61
62@@ -193,8 +204,10 @@ _nss_dns_gethostbyname2_r (const char *n
63 result->h_length = INADDRSZ;;
64 }
65
66- return getanswer_r (&host_buffer, n, name, type, result, buffer, buflen,
67- errnop, h_errnop, map);
68+ status = getanswer_r (host_buffer, n, name, type, result, buffer, buflen,
69+ errnop, h_errnop, map);
70+ free (host_buffer);
71+ return status;
72 }
73
74
75@@ -232,7 +245,7 @@ _nss_dns_gethostbyaddr_r (const void *ad
76 char *h_addr_ptrs[MAX_NR_ADDRS + 1];
77 char linebuffer[0];
78 } *host_data = (struct host_data *) buffer;
79- querybuf host_buffer;
80+ querybuf *host_buffer;
81 char qbuf[MAXDNAME+1], *qp;
82 size_t size;
83 int n, status;
84@@ -289,17 +302,26 @@ _nss_dns_gethostbyaddr_r (const void *ad
85 break;
86 }
87
88- n = res_nquery (&_res, qbuf, C_IN, T_PTR, (u_char *)host_buffer.buf,
89- sizeof host_buffer);
90+ host_buffer = (querybuf *) malloc (sizeof (querybuf));
91+ if (host_buffer == NULL)
92+ {
93+ *errnop = ENOMEM;
94+ return NSS_STATUS_UNAVAIL;
95+ }
96+
97+ n = res_nquery (&_res, qbuf, C_IN, T_PTR, host_buffer->buf,
98+ sizeof (host_buffer->buf));
99 if (n < 0)
100 {
101 *h_errnop = h_errno;
102 *errnop = errno;
103+ free (host_buffer);
104 return errno == ECONNREFUSED ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
105 }
106
107- status = getanswer_r (&host_buffer, n, qbuf, T_PTR, result, buffer, buflen,
108+ status = getanswer_r (host_buffer, n, qbuf, T_PTR, result, buffer, buflen,
109 errnop, h_errnop, 0 /* XXX */);
110+ free (host_buffer);
111 if (status != NSS_STATUS_SUCCESS)
112 {
113 *h_errnop = h_errno;
114--- libc/resolv/nss_dns/dns-network.c.jj Mon Jul 9 14:57:48 2001
115+++ libc/resolv/nss_dns/dns-network.c Thu Oct 10 07:27:19 2002
116@@ -110,27 +110,39 @@ _nss_dns_getnetbyname_r (const char *nam
117 int *herrnop)
118 {
119 /* Return entry for network with NAME. */
120- querybuf net_buffer;
121+ querybuf *net_buffer;
122 int anslen;
123 char *qbuf;
124+ enum nss_status status;
125
126 if ((_res.options & RES_INIT) == 0 && __res_ninit (&_res) == -1)
127 return NSS_STATUS_UNAVAIL;
128
129 qbuf = strdupa (name);
130- anslen = res_nsearch (&_res, qbuf, C_IN, T_PTR, (u_char *) &net_buffer,
131- sizeof (querybuf));
132+
133+ net_buffer = (querybuf *) malloc (sizeof (querybuf));
134+ if (net_buffer == NULL)
135+ {
136+ *errnop = ENOMEM;
137+ return NSS_STATUS_UNAVAIL;
138+ }
139+
140+ anslen = res_nsearch (&_res, qbuf, C_IN, T_PTR, net_buffer->buf,
141+ sizeof (net_buffer->buf));
142 if (anslen < 0)
143 {
144 /* Nothing found. */
145 *errnop = errno;
146+ free (net_buffer);
147 return (errno == ECONNREFUSED
148 || errno == EPFNOSUPPORT
149 || errno == EAFNOSUPPORT)
150 ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
151 }
152
153- return getanswer_r (&net_buffer, anslen, result, buffer, buflen, BYNAME);
154+ status = getanswer_r (net_buffer, anslen, result, buffer, buflen, BYNAME);
155+ free (net_buffer);
156+ return status;
157 }
158
159
160@@ -141,7 +153,7 @@ _nss_dns_getnetbyaddr_r (uint32_t net, i
161 {
162 /* Return entry for network with NAME. */
163 enum nss_status status;
164- querybuf net_buffer;
165+ querybuf *net_buffer;
166 unsigned int net_bytes[4];
167 char qbuf[MAXDNAME];
168 int cnt, anslen;
169@@ -180,19 +192,28 @@ _nss_dns_getnetbyaddr_r (uint32_t net, i
170 break;
171 }
172
173- anslen = res_nquery (&_res, qbuf, C_IN, T_PTR, (u_char *) &net_buffer,
174- sizeof (querybuf));
175+ net_buffer = (querybuf *) malloc (sizeof (querybuf));
176+ if (net_buffer == NULL)
177+ {
178+ *errnop = ENOMEM;
179+ return NSS_STATUS_UNAVAIL;
180+ }
181+
182+ anslen = res_nquery (&_res, qbuf, C_IN, T_PTR, net_buffer->buf,
183+ sizeof (net_buffer->buf));
184 if (anslen < 0)
185 {
186 /* Nothing found. */
187 *errnop = errno;
188+ free (net_buffer);
189 return (errno == ECONNREFUSED
190 || errno == EPFNOSUPPORT
191 || errno == EAFNOSUPPORT)
192 ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
193 }
194
195- status = getanswer_r (&net_buffer, anslen, result, buffer, buflen, BYADDR);
196+ status = getanswer_r (net_buffer, anslen, result, buffer, buflen, BYADDR);
197+ free (net_buffer);
198 if (status == NSS_STATUS_SUCCESS)
199 {
200 /* Strip trailing zeros. */
201--- libc/resolv/res_query.c.jj Wed Jan 10 11:04:04 2001
202+++ libc/resolv/res_query.c Wed Oct 9 15:10:46 2002
203@@ -108,28 +108,36 @@ res_nquery(res_state statp,
204 u_char *answer, /* buffer to put answer */
205 int anslen) /* size of answer buffer */
206 {
207- u_char buf[MAXPACKET];
208+ u_char *buf;
209 HEADER *hp = (HEADER *) answer;
210 int n;
211
212 hp->rcode = NOERROR; /* default */
213
214+ buf = malloc (MAXPACKET);
215+ if (buf == NULL) {
216+ __set_h_errno (NETDB_INTERNAL);
217+ return -1;
218+ }
219+
220 #ifdef DEBUG
221 if (statp->options & RES_DEBUG)
222 printf(";; res_query(%s, %d, %d)\n", name, class, type);
223 #endif
224
225 n = res_nmkquery(statp, QUERY, name, class, type, NULL, 0, NULL,
226- buf, sizeof(buf));
227+ buf, MAXPACKET);
228 if (n <= 0) {
229 #ifdef DEBUG
230 if (statp->options & RES_DEBUG)
231 printf(";; res_query: mkquery failed\n");
232 #endif
233 RES_SET_H_ERRNO(statp, NO_RECOVERY);
234+ free (buf);
235 return (n);
236 }
237 n = res_nsend(statp, buf, n, answer, anslen);
238+ free (buf);
239 if (n < 0) {
240 #ifdef DEBUG
241 if (statp->options & RES_DEBUG)
242--- libc/resolv/gethnamaddr.c.jj Thu Dec 27 14:34:00 2001
243+++ libc/resolv/gethnamaddr.c Thu Oct 10 10:05:44 2002
244@@ -510,10 +510,11 @@ gethostbyname2(name, af)
245 const char *name;
246 int af;
247 {
248- querybuf buf;
249+ querybuf *buf;
250 register const char *cp;
251 char *bp;
252 int n, size, type, len;
253+ struct hostent *ret;
254 extern struct hostent *_gethtbyname2();
255
256 if ((_res.options & RES_INIT) == 0 && __res_ninit(&_res) == -1) {
257@@ -615,13 +616,22 @@ gethostbyname2(name, af)
258 break;
259 }
260
261- if ((n = res_nsearch(&_res, name, C_IN, type, buf.buf, sizeof(buf.buf))) < 0) {
262+ buf = (querybuf *) malloc (sizeof (*buf));
263+ if (buf == NULL) {
264+ __set_h_errno (NETDB_INTERNAL);
265+ return NULL;
266+ }
267+
268+ if ((n = res_nsearch(&_res, name, C_IN, type, buf->buf, sizeof(buf->buf))) < 0) {
269+ free (buf);
270 dprintf("res_nsearch failed (%d)\n", n);
271 if (errno == ECONNREFUSED)
272 return (_gethtbyname2(name, af));
273 return (NULL);
274 }
275- return (getanswer(&buf, n, name, type));
276+ ret = getanswer(buf, n, name, type);
277+ free (buf);
278+ return ret;
279 }
280
281 struct hostent *
282@@ -634,7 +644,7 @@ gethostbyaddr(addr, len, af)
283 static const u_char mapped[] = { 0,0, 0,0, 0,0, 0,0, 0,0, 0xff,0xff };
284 static const u_char tunnelled[] = { 0,0, 0,0, 0,0, 0,0, 0,0, 0,0 };
285 int n, size;
286- querybuf buf;
287+ querybuf *buf;
288 register struct hostent *hp;
289 char qbuf[MAXDNAME+1], *qp;
290 #ifdef SUNSECURITY
291@@ -695,14 +705,22 @@ gethostbyaddr(addr, len, af)
292 default:
293 abort();
294 }
295- n = res_nquery(&_res, qbuf, C_IN, T_PTR, (u_char *)buf.buf, sizeof buf.buf);
296+ buf = (querybuf *) malloc (sizeof (*buf));
297+ if (buf == NULL) {
298+ __set_h_errno (NETDB_INTERNAL);
299+ return NULL;
300+ }
301+ n = res_nquery(&_res, qbuf, C_IN, T_PTR, buf->buf, sizeof buf->buf);
302 if (n < 0) {
303+ free (buf);
304 dprintf("res_nquery failed (%d)\n", n);
305 if (errno == ECONNREFUSED)
306 return (_gethtbyaddr(addr, len, af));
307 return (NULL);
308 }
309- if (!(hp = getanswer(&buf, n, qbuf, T_PTR)))
310+ hp = getanswer(buf, n, qbuf, T_PTR);
311+ free (buf);
312+ if (!hp)
313 return (NULL); /* h_errno was set by getanswer() */
314 #ifdef SUNSECURITY
315 if (af == AF_INET) {
This page took 0.087059 seconds and 4 git commands to generate.