patches/glibc/2.1.3/rh62-12-glibc-2.1.3-maxpacket.patch
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sat Feb 24 11:00:05 2007 +0000 (2007-02-24)
changeset 1 eeea35fbf182
permissions -rw-r--r--
Add the full crosstool-NG sources to the new repository of its own.
You might just say: 'Yeah! crosstool-NG's got its own repo!".
Unfortunately, that's because the previous repo got damaged beyond repair and I had no backup.
That means I'm putting backups in place in the afternoon.
That also means we've lost history... :-(
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.  */