]> git.pld-linux.org Git - packages/glibc.git/blob - glibc-maxpacket.patch
- merged update to 2.3.6 from AC-branch
[packages/glibc.git] / glibc-maxpacket.patch
1 2002-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.082951 seconds and 3 git commands to generate.