patches/glibc/compat-2.1/rh62-12-glibc-compat-2.1.3-maxpacket.patch
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sat Jul 28 21:34:41 2007 +0000 (2007-07-28)
changeset 301 2be7232a73ac
permissions -rw-r--r--
Bump version to 0.2.2.
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.  */