This is the mail archive of the libc-alpha@sourceware.cygnus.com mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: [bill@kayhay.com] libc/1625: resolver ignores "multi on" in /etc/host.conf


On Fri, Mar 03, 2000 at 07:06:37PM -0800, H . J . Lu wrote:
> On Fri, Mar 03, 2000 at 09:29:16AM +0100, Andreas Jaeger wrote:
> > 
> > Hi glibc folks,
> > 
> > we received the appended bug report.  IMHO we cannot support "multi on"
> > at all with glibc (at least not in /etc/hosts) - and should remove the
> > support for parsing "multi on" from res_hconf.c.  We parse this
> > correctly - but never use it at all.
> > 
> > Does somebody see a way to fix this?
> > 
> 
> Here is a patch. It seems to work for me.
> 
> 

My last patch is incomplete. Here is a new one. It passed "make check"
on glibc 2.1.3.


H.J.
----
2000-03-04  H.J. Lu  <hjl@gnu.org>

	* resolv/Versions (_res_hconf): Added to libc for GLIBC_2.1.3.

	* nss/nss_files/files-parse.c (parse_line): Take one more arg
	to return the buffer end.
	(parse_list): Likewise.

	* grp/fgetgrent_r.c (__fgetgrent_r): Pass NULL to parse_line ().
	* pwd/fgetpwent_r.c (__fgetpwent_r): Likewise. 
	* shadow/fgetspent_r.c (__fgetspent_r): Likewise. 
	* shadow/sgetspent_r.c (__sgetspent_r): Likewise. 
	* hesiod/nss_hesiod/hesiod-service.c (lookup): Likewise.

	* hesiod/nss_hesiod/hesiod-grp.c (lookup): Passs NULL to
	_nss_files_parse_XXent ().
	* hesiod/nss_hesiod/hesiod-pwd.c (lookup): Likewise.
	* nis/nss_compat/compat-grp.c (getgrent_next_nis): Likewise.
	(getgrnam_plusgroup): Likewise.
	(getgrent_next_file): Likewise.
	(internal_getgrnam_r): Likewise.
	(getgrgid_plusgroup): Likewise.
	(internal_getgrgid_r): Likewise.
	* nis/nss_compat/compat-initgroups.c (getgrent_next_nis):
	Likewise.
	(getgrnam_plusgroup): Likewise.
	(getgrent_next_file): Likewise.
	* nis/nss_compat/compat-pwd.c (getpwent_next_nis_netgr):
	Likewise.
	(getpwent_next_nis): Likewise.
	(getpwnam_plususer): Likewise.
	(getpwent_next_file): Likewise.
	(internal_getpwnam_r): Likewise.
	(getpwuid_plususer): Likewise.
	(internal_getpwuid_r): Likewise.
	* nis/nss_compat/compat-spwd.c (getspent_next_nis_netgr):
	Likewise.
	(getspent_next_nis): Likewise.
	(getspnam_plususer): Likewise.
	(getspent_next_file): Likewise.
	(internal_getspnam_r): Likewise.
	nis/nss_nis/nis-ethers.c (internal_nis_getetherent_r):
	Likewise.
	(_nss_nis_gethostton_r): Likewise.
	(_nss_nis_getntohost_r): Likewise.
	* nis/nss_nis/nis-grp.c (internal_nis_getgrent_r): Likewise.
	(_nss_nis_getgrnam_r): Likewise.
	(_nss_nis_getgrgid_r): Likewise.
	* nis/nss_nis/nis-hosts.c (internal_nis_gethostent_r):
	Likewise.
	(_nss_nis_gethostbyname2_r): Likewise.
	(_nss_nis_gethostbyaddr_r): Likewise.
	(_nss_nis_gethostbyaddr_r): Likewise.
	* nis/nss_nis/nis-initgroups.c (internal_getgrent_r): Likewise.
	* nis/nss_nis/nis-network.c (internal_nis_getnetent_r):
	Likewise.
	(_nss_nis_getnetbyname_r): Likewise.
	(_nss_nis_getnetbyaddr_r): Likewise.
	* nis/nss_nis/nis-proto.c (internal_nis_getprotoent_r):
	Likewise.
	(_nss_nis_getprotobyname_r): Likewise.
	(_nss_nis_getprotobynumber_r): Likewise.
	* nis/nss_nis/nis-pwd.c (internal_nis_getpwent_r): Likewise.
	(_nss_nis_getpwnam_r): Likewise.
	(_nss_nis_getpwuid_r): Likewise.
	* nis/nss_nis/nis-rpc.c (internal_nis_getrpcent_r): Likewise.
	(_nss_nis_getrpcbynumber_r): Likewise.
	* nis/nss_nis/nis-service.c (internal_nis_getservent_r):
	Likewise.
	(_nss_nis_getservbyname_r): Likewise.
	(_nss_nis_getservbyport_r): Likewise.
	* nis/nss_nis/nis-spwd.c (internal_nis_getspent_r): Likewise.
	(_nss_nis_getspnam_r): Likewise.

	* nss/nss_db/db-XXX.c (DB_LOOKUP): Add prologue and epilogue.

	* nss/nss_files/files-XXX.c (internal_getent): Add bufend to
	return the buffer end.
	(DB_LOOKUP): Add prologue and epilogue. Used by gethostbyname.

	* nss/nss_files/files-ethers.c: Pass empty prologue and
	epilogue to DB_LOOKUP.
	* nss/nss_files/files-grp.c: Likewise.
	* nss/nss_files/files-network.c: Likewise.
	* nss/nss_files/files-proto.c: Likewise.
	* nss/nss_files/files-pwd.c: Likewise.
	* nss/nss_files/files-rpc.c: Likewise.
	* nss/nss_files/files-service.c: Likewise.
	* nss/nss_files/files-spwd.c: Likewise.

	* nss/nss_files/files-hosts.c: Include <resolv/res_hconf.h>.
	(hostent_data): Use IN6ADDRSZ instead of 16 to hold IPv4/IPv6
	address.
	(PROLOGUE): New.
	(EPILOGUE): New.
	(COPY_H_ADDR_LIST): New.
	Pass PROLOGUE/EPILOGUE to DB_LOOKUP and replace
	LOOKUP_NAME_CASE with COPY_H_ADDR_LIST.

Index: nss/nss_db/db-XXX.c
===================================================================
RCS file: /work/cvs/gnu/glibc-2.1/nss/nss_db/db-XXX.c,v
retrieving revision 1.1.1.11
diff -u -p -r1.1.1.11 db-XXX.c
--- nss/nss_db/db-XXX.c	1998/11/19 18:45:50	1.1.1.11
+++ nss/nss_db/db-XXX.c	2000/03/04 18:21:43
@@ -211,7 +211,7 @@ lookup (DBT *key, struct STRUCTURE *resu
       while (isspace (*p))
 	++p;
 
-      err = parse_line (p, result, buffer, buflen, errnop);
+      err = parse_line (p, result, buffer, buflen, NULL, errnop);
 
       if (err == 0)
 	{
@@ -259,9 +259,13 @@ lookup (DBT *key, struct STRUCTURE *resu
    PROTO describes the arguments for the lookup key;
    e.g. `const char *name'.
 
+   PROLOGUE ignored here but used by ../nss_files/files-XXX.c.
+
+   EPILOGUE ignored here but used by ../nss_files/files-XXX.c.
+
    BREAK_IF_MATCH is ignored, but used by ../nss_files/files-XXX.c.  */
 
-#define DB_LOOKUP(name, keysize, keypattern, break_if_match, proto...)	      \
+#define DB_LOOKUP(name, keysize, keypattern, prologue, epilogue, break_if_match, proto...) \
 enum nss_status								      \
 _nss_db_get##name##_r (proto,						      \
 		       struct STRUCTURE *result,			      \
Index: nss/nss_files/files-XXX.c
===================================================================
RCS file: /work/cvs/gnu/glibc-2.1/nss/nss_files/files-XXX.c,v
retrieving revision 1.1.1.13
diff -u -p -r1.1.1.13 files-XXX.c
--- nss/nss_files/files-XXX.c	1999/02/14 17:07:28	1.1.1.13
+++ nss/nss_files/files-XXX.c	2000/03/04 18:52:28
@@ -161,7 +161,8 @@ CONCAT(_nss_files_end,ENTNAME) (void)
 
 static enum nss_status
 internal_getent (struct STRUCTURE *result,
-		 char *buffer, size_t buflen, int *errnop H_ERRNO_PROTO)
+		 char *buffer, size_t buflen, char **bufend,
+		 int *errnop H_ERRNO_PROTO)
 {
   char *p;
   struct parser_data *data = (void *) buffer;
@@ -204,7 +205,8 @@ internal_getent (struct STRUCTURE *resul
   while (*p == '\0' || *p == '#' /* Ignore empty and comment lines.  */
 	 /* Parse the line.  If it is invalid, loop to get the next
 	    line of the file to parse.  */
-	 || ! (parse_result = parse_line (p, result, data, buflen, errnop)));
+	 || ! (parse_result = parse_line (p, result, data, buflen,
+					  bufend, errnop)));
 
   /* Filled in RESULT with the next entry from the database file.  */
   return parse_result == -1 ? NSS_STATUS_TRYAGAIN : NSS_STATUS_SUCCESS;
@@ -248,8 +250,8 @@ CONCAT(_nss_files_get,ENTNAME_r) (struct
 
       if (status == NSS_STATUS_SUCCESS)
 	{
-	  status = internal_getent (result, buffer, buflen, errnop
-				    H_ERRNO_ARG);
+	  status = internal_getent (result, buffer, buflen, NULL,
+	  			    errnop H_ERRNO_ARG);
 
 	  /* Remember this position if we were successful.  If the
 	     operation failed we give the user a chance to repeat the
@@ -276,10 +278,14 @@ CONCAT(_nss_files_get,ENTNAME_r) (struct
    PROTO describes the arguments for the lookup key;
    e.g. `const char *hostname'.
 
+   PROLOGUE is the function prologue.
+
+   EPILOGUE is the function epilogue.
+
    BREAK_IF_MATCH is a block of code which compares `struct STRUCTURE *result'
    to the lookup key arguments and does `break;' if they match.  */
 
-#define DB_LOOKUP(name, keysize, keypattern, break_if_match, proto...)	      \
+#define DB_LOOKUP(name, keysize, keypattern, prologue, epilogue, break_if_match, proto...) \
 enum nss_status								      \
 _nss_files_get##name##_r (proto,					      \
 			  struct STRUCTURE *result, char *buffer,	      \
@@ -287,6 +293,8 @@ _nss_files_get##name##_r (proto,					   
 {									      \
   enum nss_status status;						      \
 									      \
+  prologue								      \
+									      \
   __libc_lock_lock (lock);						      \
 									      \
   /* Reset file pointer to beginning or open file.  */			      \
@@ -294,11 +302,12 @@ _nss_files_get##name##_r (proto,					   
 									      \
   if (status == NSS_STATUS_SUCCESS)					      \
     {									      \
+      char *buffree;							      \
       /* Tell getent function that we have repositioned the file pointer.  */ \
       last_use = getby;							      \
 									      \
-      while ((status = internal_getent (result, buffer, buflen, errnop	      \
-					H_ERRNO_ARG))			      \
+      while ((status = internal_getent (result, buffer, buflen, &buffree,     \
+					errnop H_ERRNO_ARG))		      \
 	     == NSS_STATUS_SUCCESS)					      \
 	{ break_if_match }						      \
 									      \
@@ -307,6 +316,8 @@ _nss_files_get##name##_r (proto,					   
     }									      \
 									      \
   __libc_lock_unlock (lock);						      \
+									      \
+  epilogue								      \
 									      \
   return status;							      \
 }
Index: nss/nss_files/files-ethers.c
===================================================================
RCS file: /work/cvs/gnu/glibc-2.1/nss/nss_files/files-ethers.c,v
retrieving revision 1.1.1.1
diff -u -p -r1.1.1.1 files-ethers.c
--- nss/nss_files/files-ethers.c	1997/02/25 17:48:12	1.1.1.1
+++ nss/nss_files/files-ethers.c	2000/03/04 17:36:44
@@ -59,6 +59,7 @@ LINE_PARSER
 #include GENERIC
 
 DB_LOOKUP (hostton, 1 + strlen (name), (".%s", name),
+	   ,,
 	   {
 	     if (strcmp (result->e_name, name) == 0)
 	       break;
@@ -68,6 +69,7 @@ DB_LOOKUP (ntohost, 18, ("=%x:%x:%x:%x:%
 			 addr->ether_addr_octet[0], addr->ether_addr_octet[1],
 			 addr->ether_addr_octet[2], addr->ether_addr_octet[3],
 			 addr->ether_addr_octet[4], addr->ether_addr_octet[5]),
+	   ,,
 	   {
 	     if (memcmp (&result->e_addr, addr,
 			 sizeof (struct ether_addr)) == 0)
Index: nss/nss_files/files-grp.c
===================================================================
RCS file: /work/cvs/gnu/glibc-2.1/nss/nss_files/files-grp.c,v
retrieving revision 1.1.1.1
diff -u -p -r1.1.1.1 files-grp.c
--- nss/nss_files/files-grp.c	1997/02/25 17:48:12	1.1.1.1
+++ nss/nss_files/files-grp.c	2000/03/04 17:36:59
@@ -31,6 +31,7 @@ struct grent_data {};
 #include GENERIC
 
 DB_LOOKUP (grnam, 1 + strlen (name), (".%s", name),
+	   ,,
 	   {
 	     if (name[0] != '-' && name[0] != '+'
 		 && ! strcmp (name, result->gr_name))
@@ -38,6 +39,7 @@ DB_LOOKUP (grnam, 1 + strlen (name), (".
 	   }, const char *name)
 
 DB_LOOKUP (grgid, 20, ("=%lu", (unsigned long int) gid),
+	   ,,
 	   {
 	     if (result->gr_gid == gid && result->gr_name[0] != '+'
 		 && result->gr_name[0] != '-')
Index: nss/nss_files/files-hosts.c
===================================================================
RCS file: /work/cvs/gnu/glibc-2.1/nss/nss_files/files-hosts.c,v
retrieving revision 1.1.1.6
diff -u -p -r1.1.1.6 files-hosts.c
--- nss/nss_files/files-hosts.c	1998/01/21 18:33:22	1.1.1.6
+++ nss/nss_files/files-hosts.c	2000/03/04 18:01:56
@@ -22,6 +22,7 @@
 #include <arpa/nameser.h>
 #include <netdb.h>
 #include <resolv.h>
+#include <resolv/res_hconf.h>
 
 
 /* Get implementation for some internal functions.  */
@@ -35,7 +36,7 @@
 #define ENTDATA hostent_data
 struct hostent_data
   {
-    unsigned char host_addr[16]; /* IPv4 or IPv6 address.  */
+    unsigned char host_addr[IN6ADDRSZ]; /* IPv4 or IPv6 address.  */
     char *h_addr_ptrs[2];	/* Points to that and null terminator.  */
   };
 
@@ -82,24 +83,109 @@ LINE_PARSER
    STRING_FIELD (result->h_name, isspace, 1);
  })
 
+#define PROLOGUE							      \
+  enum nss_status found = NSS_STATUS_NOTFOUND;				      \
+  struct STRUCTURE entry;						      \
+  char *bufend = buffer + buflen;					      \
+  int multi = _res_hconf.flags & HCONF_FLAG_MULTI;			      \
+									      \
+  if (multi)								      \
+    {									      \
+      memset (&entry, 0, sizeof entry);					      \
+      bufend -= __alignof__ (char *) - 1;				      \
+      bufend += (bufend - (char *) 0) % __alignof__ (char *);		      \
+      buflen = bufend - buffer;						      \
+    }
+
+#define EPILOGUE							      \
+  if (multi && found == NSS_STATUS_SUCCESS) 				      \
+    {									      \
+      status = found;							      \
+      *result = entry;							      \
+    }
+
+#define COPY_H_ADDR_LIST						      \
+  if (multi)								      \
+    {									      \
+      int match = 1;							      \
+      while (1)								      \
+	{								      \
+	  LOOKUP_NAME_CASE (h_name, h_aliases)				      \
+	  match = 0;							      \
+	  break;							      \
+	}								      \
+      if (match)							      \
+	{								      \
+	  buflen -= buffree - buffer;					      \
+	  buffer = buffree;						      \
+									      \
+	  if (entry.h_addr_list == NULL)				      \
+	    {								      \
+	      entry = *result;						      \
+	      found = status;						      \
+	    }								      \
+	  else								      \
+	    {								      \
+	      int n;							      \
+	      char **h_addr_ptrs;					      \
+									      \
+	      for (n = 0; entry.h_addr_list [n] != NULL; n++);		      \
+									      \
+	      if (n == 1)						      \
+		{							      \
+		  /* It is the first time. We have to copy 3 pointers. */     \
+		  if (buflen < sizeof (char *) * 3)			      \
+		    {							      \
+		    memory:						      \
+		      *errnop = ERANGE;					      \
+		      H_ERRNO_SET (NETDB_INTERNAL);			      \
+		      return NSS_STATUS_TRYAGAIN;			      \
+		    }							      \
+		  bufend -= sizeof (char *) * 3;			      \
+		  buflen -= sizeof (char *) * 3;			      \
+		  h_addr_ptrs = (char **) bufend;			      \
+		  h_addr_ptrs [1] = entry.h_addr_list [0];		      \
+		  h_addr_ptrs [2] = NULL;				      \
+		}							      \
+	      else							      \
+		{							      \
+		  /* Allocate one pointer in buffer for host address.  */     \
+		  if (buflen < sizeof (char *))				      \
+		    goto memory;					      \
+		  bufend -= sizeof (char *);				      \
+		  buflen -= sizeof (char *);				      \
+		  h_addr_ptrs = (char **) bufend;			      \
+		}							      \
+									      \
+	      h_addr_ptrs [0] = result->h_addr_list [0];		      \
+	      entry.h_addr_list = h_addr_ptrs;				      \
+	    }								      \
+	}								      \
+    }									      \
+  else									      \
+    LOOKUP_NAME_CASE (h_name, h_aliases)
+
 #include "files-XXX.c"
 
 DB_LOOKUP (hostbyname, ,,
+	   PROLOGUE, EPILOGUE,
 	   {
 	     if (result->h_addrtype != ((_res.options & RES_USE_INET6)
 					? AF_INET6 : AF_INET))
 	       continue;
-	     LOOKUP_NAME_CASE (h_name, h_aliases)
+	     COPY_H_ADDR_LIST
 	   }, const char *name)
 
 DB_LOOKUP (hostbyname2, ,,
+	   PROLOGUE, EPILOGUE,
 	   {
 	     if (result->h_addrtype != af)
 	       continue;
-	     LOOKUP_NAME_CASE (h_name, h_aliases)
+	     COPY_H_ADDR_LIST
 	   }, const char *name, int af)
 
 DB_LOOKUP (hostbyaddr, ,,
+	   ,,
 	   {
 	     if (result->h_addrtype == type && result->h_length == len &&
 		 ! memcmp (addr, result->h_addr_list[0], len))
Index: nss/nss_files/files-network.c
===================================================================
RCS file: /work/cvs/gnu/glibc-2.1/nss/nss_files/files-network.c,v
retrieving revision 1.1.1.3
diff -u -p -r1.1.1.3 files-network.c
--- nss/nss_files/files-network.c	1998/01/27 18:53:30	1.1.1.3
+++ nss/nss_files/files-network.c	2000/03/04 17:37:17
@@ -45,10 +45,12 @@ LINE_PARSER
 #include "files-XXX.c"
 
 DB_LOOKUP (netbyname, ,,
+	   ,,
 	   LOOKUP_NAME_CASE (n_name, n_aliases),
 	   const char *name)
 
 DB_LOOKUP (netbyaddr, ,,
+	   ,,
 	   {
 	     if (result->n_addrtype == type && result->n_net == net)
 	       /* Bingo!  */
Index: nss/nss_files/files-parse.c
===================================================================
RCS file: /work/cvs/gnu/glibc-2.1/nss/nss_files/files-parse.c,v
retrieving revision 1.1.1.6
diff -u -p -r1.1.1.6 files-parse.c
--- nss/nss_files/files-parse.c	1998/07/29 23:55:06	1.1.1.6
+++ nss/nss_files/files-parse.c	2000/03/04 05:41:17
@@ -69,7 +69,8 @@ struct parser_data
 
 /* The parser is defined in a different module.  */
 extern int parse_line (char *line, struct STRUCTURE *result,
-		       struct parser_data *data, size_t datalen, int *errnop);
+		       struct parser_data *data, size_t datalen,
+		       char **bufend, int *errnop);
 
 # define LINE_PARSER(EOLSET, BODY) /* Do nothing */
 
@@ -80,7 +81,8 @@ extern int parse_line (char *line, struc
 # define LINE_PARSER(EOLSET, BODY)					      \
 parser_stclass int							      \
 parse_line (char *line, struct STRUCTURE *result,			      \
-	    struct parser_data *data, size_t datalen, int *errnop)	      \
+	    struct parser_data *data, size_t datalen,			      \
+	    char **bufend, int *errnop)					      \
 {									      \
   ENTDATA_DECL (data)							      \
   char *p = strpbrk (line, EOLSET "\n");				      \
@@ -148,7 +150,7 @@ parse_line (char *line, struct STRUCTURE
 
 #  define TRAILING_LIST_PARSER						      \
 {									      \
-  char **list = parse_list (line, data, datalen, errnop);		      \
+  char **list = parse_list (line, data, datalen, bufend, errnop);	      \
   if (list)								      \
     result->TRAILING_LIST_MEMBER = list;				      \
   else 									      \
@@ -156,7 +158,8 @@ parse_line (char *line, struct STRUCTURE
 }
 
 static inline char **
-parse_list (char *line, struct parser_data *data, size_t datalen, int *errnop)
+parse_list (char *line, struct parser_data *data, size_t datalen,
+	    char **bufend, int *errnop)
 {
   char *eol, **list, **p;
 
@@ -212,6 +215,9 @@ parse_list (char *line, struct parser_da
 	}
     }
   *p = NULL;
+
+  if (bufend)
+    *bufend = (char *) &(p [1]);
 
   return list;
 }
Index: nss/nss_files/files-proto.c
===================================================================
RCS file: /work/cvs/gnu/glibc-2.1/nss/nss_files/files-proto.c,v
retrieving revision 1.1.1.1
diff -u -p -r1.1.1.1 files-proto.c
--- nss/nss_files/files-proto.c	1997/02/25 17:48:12	1.1.1.1
+++ nss/nss_files/files-proto.c	2000/03/04 17:37:29
@@ -37,10 +37,12 @@ LINE_PARSER
 #include GENERIC
 
 DB_LOOKUP (protobyname, 1 + strlen (name), (".%s", name),
+	   ,,
 	   LOOKUP_NAME (p_name, p_aliases),
 	   const char *name)
 
 DB_LOOKUP (protobynumber, 20, ("=%d", proto),
+	   ,,
 	   {
 	     if (result->p_proto == proto)
 	       break;
Index: nss/nss_files/files-pwd.c
===================================================================
RCS file: /work/cvs/gnu/glibc-2.1/nss/nss_files/files-pwd.c,v
retrieving revision 1.1.1.1
diff -u -p -r1.1.1.1 files-pwd.c
--- nss/nss_files/files-pwd.c	1997/02/25 17:48:12	1.1.1.1
+++ nss/nss_files/files-pwd.c	2000/03/04 17:37:38
@@ -31,6 +31,7 @@ struct pwent_data {};
 #include GENERIC
 
 DB_LOOKUP (pwnam, 1 + strlen (name), (".%s", name),
+	   ,,
 	   {
 	     if (name[0] != '+' && name[0] != '-'
 		 && ! strcmp (name, result->pw_name))
@@ -38,6 +39,7 @@ DB_LOOKUP (pwnam, 1 + strlen (name), (".
 	   }, const char *name)
 
 DB_LOOKUP (pwuid, 20, ("=%lu", (unsigned long int) uid),
+	   ,,
 	   {
 	     if (result->pw_uid == uid && result->pw_name[0] != '+'
 		 && result->pw_name[0] != '-')
Index: nss/nss_files/files-rpc.c
===================================================================
RCS file: /work/cvs/gnu/glibc-2.1/nss/nss_files/files-rpc.c,v
retrieving revision 1.1.1.1
diff -u -p -r1.1.1.1 files-rpc.c
--- nss/nss_files/files-rpc.c	1997/02/25 17:48:12	1.1.1.1
+++ nss/nss_files/files-rpc.c	2000/03/04 17:37:48
@@ -37,10 +37,12 @@ LINE_PARSER
 #include GENERIC
 
 DB_LOOKUP (rpcbyname, 1 + strlen (name), (".%s", name),
+	   ,,
 	   LOOKUP_NAME (r_name, r_aliases),
 	   const char *name)
 
 DB_LOOKUP (rpcbynumber, 20, ("=%d", number),
+	   ,,
 	   {
 	     if (result->r_number == number)
 	       break;
Index: nss/nss_files/files-service.c
===================================================================
RCS file: /work/cvs/gnu/glibc-2.1/nss/nss_files/files-service.c,v
retrieving revision 1.1.1.5
diff -u -p -r1.1.1.5 files-service.c
--- nss/nss_files/files-service.c	1998/02/01 23:56:55	1.1.1.5
+++ nss/nss_files/files-service.c	2000/03/04 17:42:22
@@ -41,6 +41,7 @@ LINE_PARSER
 
 DB_LOOKUP (servbyname, 2 + strlen (name) + (proto ? strlen (proto) : 0),
 	   (".%s/%s", name, proto ?: ""),
+	   ,,
 	   {
 	     /* Must match both protocol (if specified) and name.  */
 	     if (proto != NULL && strcmp (result->s_proto, proto))
@@ -51,6 +52,7 @@ DB_LOOKUP (servbyname, 2 + strlen (name)
 
 DB_LOOKUP (servbyport, 21 + (proto ? strlen (proto) : 0),
 	   ("=%d/%s", ntohs (port), proto ?: ""),
+	   ,,
 	   {
 	     /* Must match both port and protocol.  */
 	     if (result->s_port == port
Index: nss/nss_files/files-spwd.c
===================================================================
RCS file: /work/cvs/gnu/glibc-2.1/nss/nss_files/files-spwd.c,v
retrieving revision 1.1.1.1
diff -u -p -r1.1.1.1 files-spwd.c
--- nss/nss_files/files-spwd.c	1997/02/25 17:48:12	1.1.1.1
+++ nss/nss_files/files-spwd.c	2000/03/04 17:38:07
@@ -31,6 +31,7 @@ struct spent_data {};
 #include GENERIC
 
 DB_LOOKUP (spnam, 1 + strlen (name), (".%s", name),
+	   ,,
 	   {
 	     if (name[0] != '+' && name[0] != '-'
 		 && ! strcmp (name, result->sp_namp))
Index: shadow/fgetspent_r.c
===================================================================
RCS file: /work/cvs/gnu/glibc-2.1/shadow/fgetspent_r.c,v
retrieving revision 1.1.1.9
diff -u -p -r1.1.1.9 fgetspent_r.c
--- shadow/fgetspent_r.c	1999/06/17 15:38:21	1.1.1.9
+++ shadow/fgetspent_r.c	2000/03/04 05:40:07
@@ -70,7 +70,7 @@ __fgetspent_r (FILE *stream, struct spwd
     } while (*p == '\0' || *p == '#' ||	/* Ignore empty and comment lines.  */
 	     /* Parse the line.  If it is invalid, loop to
 		get the next line of the file to parse.  */
-	     ! parse_line (buffer, (void *) resbuf, NULL, 0, &errno));
+	     ! parse_line (buffer, (void *) resbuf, NULL, 0, NULL, errno));
 
   funlockfile (stream);
 
Index: shadow/sgetspent_r.c
===================================================================
RCS file: /work/cvs/gnu/glibc-2.1/shadow/sgetspent_r.c,v
retrieving revision 1.1.1.5
diff -u -p -r1.1.1.5 sgetspent_r.c
--- shadow/sgetspent_r.c	1998/06/02 20:47:37	1.1.1.5
+++ shadow/sgetspent_r.c	2000/03/04 05:39:17
@@ -92,7 +92,7 @@ __sgetspent_r (const char *string, struc
 	       size_t buflen, struct spwd **result)
 {
   int parse_result = parse_line (strncpy (buffer, string, buflen),
-				 resbuf, NULL, 0, &errno);
+				 resbuf, NULL, 0, NULL, &errno);
   *result = parse_result > 0 ? resbuf : NULL;
 
   return *result == NULL ? errno : 0;
Index: pwd/fgetpwent_r.c
===================================================================
RCS file: /work/cvs/gnu/glibc-2.1/pwd/fgetpwent_r.c,v
retrieving revision 1.1.1.8
diff -u -p -r1.1.1.8 fgetpwent_r.c
--- pwd/fgetpwent_r.c	1999/06/17 15:38:18	1.1.1.8
+++ pwd/fgetpwent_r.c	2000/03/04 05:38:25
@@ -103,7 +103,7 @@ __fgetpwent_r (FILE *stream, struct pass
     } while (*p == '\0' || *p == '#' ||	/* Ignore empty and comment lines.  */
 	     /* Parse the line.  If it is invalid, loop to
 		get the next line of the file to parse.  */
-	     ! parse_line (p, resbuf, (void *) buffer, buflen, &errno));
+	     ! parse_line (p, resbuf, (void *) buffer, buflen, NULL, &errno));
 
   funlockfile (stream);
 
Index: grp/fgetgrent_r.c
===================================================================
RCS file: /work/cvs/gnu/glibc-2.1/grp/fgetgrent_r.c,v
retrieving revision 1.1.1.8
diff -u -p -r1.1.1.8 fgetgrent_r.c
--- grp/fgetgrent_r.c	1999/06/17 15:37:27	1.1.1.8
+++ grp/fgetgrent_r.c	2000/03/04 05:37:35
@@ -93,7 +93,7 @@ __fgetgrent_r (FILE *stream, struct grou
 		get the next line of the file to parse.  */
 	     || ! (parse_result = parse_line (p, resbuf,
 					      (void *) buffer, buflen,
-					      &errno)));
+					      NULL, &errno)));
 
   funlockfile (stream);
 
Index: hesiod/nss_hesiod/hesiod-grp.c
===================================================================
RCS file: /work/cvs/gnu/glibc-2.1/hesiod/nss_hesiod/hesiod-grp.c,v
retrieving revision 1.1.1.2
diff -u -p -r1.1.1.2 hesiod-grp.c
--- hesiod/nss_hesiod/hesiod-grp.c	1997/12/08 17:13:53	1.1.1.2
+++ hesiod/nss_hesiod/hesiod-grp.c	2000/03/04 18:47:34
@@ -110,7 +110,8 @@ lookup (const char *name, const char *ty
   memcpy (data->linebuffer, *list, len);
   hesiod_free_list (context, list);
 
-  parse_res = _nss_files_parse_grent (buffer, grp, data, buflen, errnop);
+  parse_res = _nss_files_parse_grent (buffer, grp, data, buflen, NULL,
+				      errnop);
   if (parse_res < 1)
     return parse_res == -1 ? NSS_STATUS_TRYAGAIN : NSS_STATUS_NOTFOUND;
 
Index: hesiod/nss_hesiod/hesiod-pwd.c
===================================================================
RCS file: /work/cvs/gnu/glibc-2.1/hesiod/nss_hesiod/hesiod-pwd.c,v
retrieving revision 1.1.1.2
diff -u -p -r1.1.1.2 hesiod-pwd.c
--- hesiod/nss_hesiod/hesiod-pwd.c	1997/12/08 17:13:53	1.1.1.2
+++ hesiod/nss_hesiod/hesiod-pwd.c	2000/03/04 18:47:51
@@ -110,7 +110,8 @@ lookup (const char *name, const char *ty
   memcpy (data->linebuffer, *list, len);
   hesiod_free_list (context, list);
 
-  parse_res = _nss_files_parse_pwent (buffer, pwd, data, buflen, errnop);
+  parse_res = _nss_files_parse_pwent (buffer, pwd, data, buflen, NULL,
+				      errnop);
   if (parse_res < 1)
     return parse_res == -1 ? NSS_STATUS_TRYAGAIN : NSS_STATUS_NOTFOUND;
 
Index: hesiod/nss_hesiod/hesiod-service.c
===================================================================
RCS file: /work/cvs/gnu/glibc-2.1/hesiod/nss_hesiod/hesiod-service.c,v
retrieving revision 1.1.1.2
diff -u -p -r1.1.1.2 hesiod-service.c
--- hesiod/nss_hesiod/hesiod-service.c	1997/12/08 17:13:53	1.1.1.2
+++ hesiod/nss_hesiod/hesiod-service.c	2000/03/04 18:48:08
@@ -131,7 +131,8 @@ lookup (const char *name, const char *pr
 
       memcpy (data->linebuffer, *item, len);
 
-      parse_res = parse_line (buffer, serv, data, buflen, errnop);
+      parse_res = parse_line (buffer, serv, data, buflen, NULL,
+			      errnop);
       if (parse_res == -1)
 	{
 	  hesiod_free_list (context, list);
Index: nis/nss_compat/compat-grp.c
===================================================================
RCS file: /work/cvs/gnu/glibc-2.1/nis/nss_compat/compat-grp.c,v
retrieving revision 1.1.1.18
diff -u -p -r1.1.1.18 compat-grp.c
--- nis/nss_compat/compat-grp.c	2000/01/12 16:46:36	1.1.1.18
+++ nis/nss_compat/compat-grp.c	2000/03/04 18:42:09
@@ -313,7 +313,8 @@ getgrent_next_nis (struct group *result,
       while (isspace (*p))
 	++p;
 
-      parse_res = _nss_files_parse_grent (p, result, data, buflen, errnop);
+      parse_res = _nss_files_parse_grent (p, result, data, buflen,
+					  NULL, errnop);
       if (parse_res == -1)
 	{
 	  free (ent->oldkey);
@@ -464,7 +465,8 @@ getgrnam_plusgroup (const char *name, st
       free (outval);
       while (isspace (*p))
         ++p;
-      parse_res = _nss_files_parse_grent (p, result, data, buflen, errnop);
+      parse_res = _nss_files_parse_grent (p, result, data, buflen,
+					  NULL, errnop);
       if (parse_res == -1)
 	return NSS_STATUS_TRYAGAIN;
     }
@@ -514,7 +516,8 @@ getgrent_next_file (struct group *result
       while (*p == '\0' || *p == '#' || /* Ignore empty and comment lines. */
       /* Parse the line.  If it is invalid, loop to
          get the next line of the file to parse.  */
-	     !(parse_res = _nss_files_parse_grent (p, result, data, buflen,
+	     !(parse_res = _nss_files_parse_grent (p, result, data,
+						   buflen, NULL,
 						   errnop)));
 
       if (parse_res == -1)
@@ -657,7 +660,8 @@ internal_getgrnam_r (const char *name, s
       while (*p == '\0' || *p == '#' || /* Ignore empty and comment lines. */
       /* Parse the line.  If it is invalid, loop to
          get the next line of the file to parse.  */
-	     !(parse_res = _nss_files_parse_grent (p, result, data, buflen,
+	     !(parse_res = _nss_files_parse_grent (p, result, data,
+						   buflen, NULL,
 						   errnop)));
 
       if (parse_res == -1)
@@ -818,7 +822,8 @@ getgrgid_plusgroup (gid_t gid, struct gr
 
       while (isspace (*p))
         p++;
-      parse_res = _nss_files_parse_grent (p, result, data, buflen, errnop);
+      parse_res = _nss_files_parse_grent (p, result, data, buflen,
+					  NULL, errnop);
       if (parse_res == -1)
 	return NSS_STATUS_TRYAGAIN;
     }
@@ -869,7 +874,8 @@ internal_getgrgid_r (gid_t gid, struct g
       while (*p == '\0' || *p == '#' || /* Ignore empty and comment lines. */
       /* Parse the line.  If it is invalid, loop to
          get the next line of the file to parse.  */
-	     !(parse_res = _nss_files_parse_grent (p, result, data, buflen,
+	     !(parse_res = _nss_files_parse_grent (p, result, data,
+						   buflen, NULL,
 						   errnop)));
 
       if (parse_res == -1)
Index: nis/nss_compat/compat-initgroups.c
===================================================================
RCS file: /work/cvs/gnu/glibc-2.1/nis/nss_compat/compat-initgroups.c,v
retrieving revision 1.1.1.5
diff -u -p -r1.1.1.5 compat-initgroups.c
--- nis/nss_compat/compat-initgroups.c	2000/01/12 16:46:36	1.1.1.5
+++ nis/nss_compat/compat-initgroups.c	2000/03/04 18:46:23
@@ -300,7 +300,8 @@ getgrent_next_nis (struct group *result,
       while (isspace (*p))
         ++p;
 
-      parse_res = _nss_files_parse_grent (p, result, data, buflen, errnop);
+      parse_res = _nss_files_parse_grent (p, result, data, buflen,
+					  NULL, errnop);
       if (parse_res == -1)
 	{
 	  *errnop = ERANGE;
@@ -444,7 +445,8 @@ getgrnam_plusgroup (const char *name, st
       free (outval);
       while (isspace (*p))
         ++p;
-      parse_res = _nss_files_parse_grent (p, result, data, buflen, errnop);
+      parse_res = _nss_files_parse_grent (p, result, data, buflen,
+					  NULL, errnop);
       if (parse_res == -1)
 	{
 	  *errnop = ERANGE;
@@ -497,7 +499,8 @@ getgrent_next_file (struct group *result
       while (*p == '\0' || *p == '#' || /* Ignore empty and comment lines. */
       /* Parse the line.  If it is invalid, loop to
          get the next line of the file to parse.  */
-	     !(parse_res = _nss_files_parse_grent (p, result, data, buflen,
+	     !(parse_res = _nss_files_parse_grent (p, result, data,
+						   buflen, NULL,
 						   errnop)));
 
       if (parse_res == -1)
Index: nis/nss_compat/compat-pwd.c
===================================================================
RCS file: /work/cvs/gnu/glibc-2.1/nis/nss_compat/compat-pwd.c,v
retrieving revision 1.1.1.21
diff -u -p -r1.1.1.21 compat-pwd.c
--- nis/nss_compat/compat-pwd.c	1999/12/12 21:08:31	1.1.1.21
+++ nis/nss_compat/compat-pwd.c	2000/03/04 18:44:16
@@ -487,7 +487,8 @@ getpwent_next_nis_netgr (const char *nam
       while (isspace (*p))
 	p++;
       free (outval);
-      parse_res = _nss_files_parse_pwent (p, result, data, buflen, errnop);
+      parse_res = _nss_files_parse_pwent (p, result, data, buflen,
+					  NULL, errnop);
       if (parse_res == -1)
 	{
 	  ent->netgrdata.cursor = saved_cursor;
@@ -786,7 +787,8 @@ getpwent_next_nis (struct passwd *result
 
       while (isspace (*p))
 	++p;
-      parse_res = _nss_files_parse_pwent (p, result, data, buflen, errnop);
+      parse_res = _nss_files_parse_pwent (p, result, data, buflen,
+					  NULL, errnop);
       if (parse_res == -1)
 	{
 	  free (ent->oldkey);
@@ -905,7 +907,8 @@ getpwnam_plususer (const char *name, str
       while (isspace (*ptr))
 	ptr++;
 
-      parse_res = _nss_files_parse_pwent (ptr, result, data, buflen, errnop);
+      parse_res = _nss_files_parse_pwent (ptr, result, data, buflen,
+					  NULL, errnop);
       if (parse_res == -1)
 	return NSS_STATUS_TRYAGAIN;
 
@@ -970,7 +973,8 @@ getpwent_next_file (struct passwd *resul
       while (*p == '\0' || *p == '#' || /* Ignore empty and comment lines.  */
       /* Parse the line.  If it is invalid, loop to
          get the next line of the file to parse.  */
-	     !(parse_res = _nss_files_parse_pwent (p, result, data, buflen,
+	     !(parse_res = _nss_files_parse_pwent (p, result, data,
+						   buflen, NULL,
 						   errnop)));
 
       if (parse_res == -1)
@@ -1191,7 +1195,8 @@ internal_getpwnam_r (const char *name, s
       while (*p == '\0' || *p == '#' || /* Ignore empty and comment lines.  */
 	     /* Parse the line.  If it is invalid, loop to
 		get the next line of the file to parse.  */
-	     !(parse_res = _nss_files_parse_pwent (p, result, data, buflen,
+	     !(parse_res = _nss_files_parse_pwent (p, result, data,
+						   buflen, NULL,
 						   errnop)));
 
       if (parse_res == -1)
@@ -1411,7 +1416,8 @@ getpwuid_plususer (uid_t uid, struct pas
 
       while (isspace (*ptr))
         ptr++;
-      parse_res = _nss_files_parse_pwent (ptr, result, data, buflen, errnop);
+      parse_res = _nss_files_parse_pwent (ptr, result, data, buflen,
+					  NULL, errnop);
       if (parse_res == -1)
         return NSS_STATUS_TRYAGAIN;
     }
@@ -1472,7 +1478,8 @@ internal_getpwuid_r (uid_t uid, struct p
       while (*p == '\0' || *p == '#' || /* Ignore empty and comment lines.  */
              /* Parse the line.  If it is invalid, loop to
                 get the next line of the file to parse.  */
-             !(parse_res = _nss_files_parse_pwent (p, result, data, buflen,
+             !(parse_res = _nss_files_parse_pwent (p, result, data,
+						   buflen, NULL,
                                                    errnop)));
 
       if (parse_res == -1)
Index: nis/nss_compat/compat-spwd.c
===================================================================
RCS file: /work/cvs/gnu/glibc-2.1/nis/nss_compat/compat-spwd.c,v
retrieving revision 1.1.1.18
diff -u -p -r1.1.1.18 compat-spwd.c
--- nis/nss_compat/compat-spwd.c	2000/01/12 16:46:37	1.1.1.18
+++ nis/nss_compat/compat-spwd.c	2000/03/04 18:45:35
@@ -379,7 +379,8 @@ getspent_next_nis_netgr (const char *nam
       while (isspace (*p))
 	p++;
       free (outval);
-      parse_res = _nss_files_parse_spent (p, result, data, buflen, errnop);
+      parse_res = _nss_files_parse_spent (p, result, data, buflen,
+					  NULL, errnop);
       if (parse_res == -1)
 	{
 	  ent->netgrdata.cursor = saved_cursor;
@@ -662,7 +663,8 @@ getspent_next_nis (struct spwd *result, 
 
       while (isspace (*p))
 	++p;
-      parse_res = _nss_files_parse_spent (p, result, data, buflen, errnop);
+      parse_res = _nss_files_parse_spent (p, result, data, buflen,
+					  NULL, errnop);
       if (parse_res == -1)
 	{
 	  free (ent->oldkey);
@@ -767,7 +769,8 @@ getspnam_plususer (const char *name, str
       free (outval);
       while (isspace (*ptr))
         ptr++;
-      parse_res = _nss_files_parse_spent (ptr, result, data, buflen, errnop);
+      parse_res = _nss_files_parse_spent (ptr, result, data, buflen,
+					  NULL, errnop);
       if (parse_res == -1)
 	return NSS_STATUS_TRYAGAIN;
     }
@@ -824,7 +827,8 @@ getspent_next_file (struct spwd *result,
       /* Parse the line.  If it is invalid, loop to
          get the next line of the file to parse.  */
 	     || !(parse_res = _nss_files_parse_spent (p, result, data,
-						      buflen, errnop)));
+						      buflen, NULL,
+						      errnop)));
 
       if (parse_res == -1)
         {
@@ -1034,7 +1038,8 @@ internal_getspnam_r (const char *name, s
       while (*p == '\0' || *p == '#' || /* Ignore empty and comment lines.  */
 	     /* Parse the line.  If it is invalid, loop to
 		get the next line of the file to parse.  */
-	     !(parse_res = _nss_files_parse_spent (p, result, data, buflen,
+	     !(parse_res = _nss_files_parse_spent (p, result, data,
+						   buflen, NULL,
 						   errnop)));
 
       if (parse_res == -1)
Index: nis/nss_nis/nis-ethers.c
===================================================================
RCS file: /work/cvs/gnu/glibc-2.1/nis/nss_nis/nis-ethers.c,v
retrieving revision 1.1.1.12
diff -u -p -r1.1.1.12 nis-ethers.c
--- nis/nss_nis/nis-ethers.c	2000/01/12 16:46:37	1.1.1.12
+++ nis/nss_nis/nis-ethers.c	2000/03/04 18:39:09
@@ -167,7 +167,8 @@ internal_nis_getetherent_r (struct ether
       while (isspace (*p))
         ++p;
 
-      parse_res = _nss_files_parse_etherent (p, eth, data, buflen, errnop);
+      parse_res = _nss_files_parse_etherent (p, eth, data, buflen,
+					     NULL, errnop);
       if (parse_res == -1)
 	return NSS_STATUS_TRYAGAIN;
       next = next->next;
@@ -235,7 +236,8 @@ _nss_nis_gethostton_r (const char *name,
     ++p;
   free (result);
 
-  parse_res = _nss_files_parse_etherent (p, eth, data, buflen, errnop);
+  parse_res = _nss_files_parse_etherent (p, eth, data, buflen, NULL,
+					 errnop);
   if (parse_res < 1)
     {
       if (parse_res == -1)
@@ -299,7 +301,8 @@ _nss_nis_getntohost_r (struct ether_addr
     ++p;
   free (result);
 
-  parse_res = _nss_files_parse_etherent (p, eth, data, buflen, errnop);
+  parse_res = _nss_files_parse_etherent (p, eth, data, buflen, NULL,
+					 errnop);
   if (parse_res < 1)
     {
       if (parse_res == -1)
Index: nis/nss_nis/nis-grp.c
===================================================================
RCS file: /work/cvs/gnu/glibc-2.1/nis/nss_nis/nis-grp.c,v
retrieving revision 1.1.1.9
diff -u -p -r1.1.1.9 nis-grp.c
--- nis/nss_nis/nis-grp.c	2000/01/12 16:46:37	1.1.1.9
+++ nis/nss_nis/nis-grp.c	2000/03/04 18:37:00
@@ -124,7 +124,8 @@ internal_nis_getgrent_r (struct group *g
         ++p;
       free (result);
 
-      parse_res = _nss_files_parse_grent (p, grp, data, buflen, errnop);
+      parse_res = _nss_files_parse_grent (p, grp, data, buflen, NULL,
+					  errnop);
       if (parse_res == -1)
 	{
 	  free (outkey);
@@ -200,7 +201,8 @@ _nss_nis_getgrnam_r (const char *name, s
     ++p;
   free (result);
 
-  parse_res = _nss_files_parse_grent (p, grp, data, buflen, errnop);
+  parse_res = _nss_files_parse_grent (p, grp, data, buflen, NULL,
+				      errnop);
   if (parse_res < 1)
     {
       if (parse_res == -1)
@@ -254,7 +256,8 @@ _nss_nis_getgrgid_r (gid_t gid, struct g
     ++p;
   free (result);
 
-  parse_res = _nss_files_parse_grent (p, grp, data, buflen, errnop);
+  parse_res = _nss_files_parse_grent (p, grp, data, buflen, NULL,
+				      errnop);
   if (parse_res < 1)
     {
       if (parse_res == -1)
Index: nis/nss_nis/nis-hosts.c
===================================================================
RCS file: /work/cvs/gnu/glibc-2.1/nis/nss_nis/nis-hosts.c,v
retrieving revision 1.1.1.13
diff -u -p -r1.1.1.13 nis-hosts.c
--- nis/nss_nis/nis-hosts.c	2000/01/12 16:46:37	1.1.1.13
+++ nis/nss_nis/nis-hosts.c	2000/03/04 18:24:54
@@ -200,7 +200,7 @@ internal_nis_gethostent_r (struct hosten
 	++p;
       free (result);
 
-      parse_res = parse_line (p, host, data, buflen, errnop);
+      parse_res = parse_line (p, host, data, buflen, NULL, errnop);
       if (parse_res == -1)
 	{
 	  free (outkey);
@@ -302,7 +302,7 @@ _nss_nis_gethostbyname2_r (const char *n
     ++p;
   free (result);
 
-  parse_res = parse_line (p, host, data, buflen, errnop);
+  parse_res = parse_line (p, host, data, buflen, NULL, errnop);
 
   if (parse_res < 1 || host->h_addrtype != af)
     {
@@ -397,7 +397,7 @@ _nss_nis_gethostbyaddr_r (char *addr, in
     ++p;
   free (result);
 
-  parse_res = parse_line (p, host, data, buflen, errnop);
+  parse_res = parse_line (p, host, data, buflen, NULL, errnop);
   if (parse_res < 1)
     {
       if (parse_res == -1)
Index: nis/nss_nis/nis-initgroups.c
===================================================================
RCS file: /work/cvs/gnu/glibc-2.1/nis/nss_nis/nis-initgroups.c,v
retrieving revision 1.1.1.3
diff -u -p -r1.1.1.3 nis-initgroups.c
--- nis/nss_nis/nis-initgroups.c	1999/08/02 16:07:21	1.1.1.3
+++ nis/nss_nis/nis-initgroups.c	2000/03/04 18:40:07
@@ -120,7 +120,8 @@ internal_getgrent_r (struct group *grp, 
       while (isspace (*p))
         ++p;
 
-      parse_res = _nss_files_parse_grent (p, grp, data, buflen, errnop);
+      parse_res = _nss_files_parse_grent (p, grp, data, buflen, NULL,
+					  errnop);
       if (parse_res == -1)
         return NSS_STATUS_TRYAGAIN;
       intern->next = intern->next->next;
Index: nis/nss_nis/nis-network.c
===================================================================
RCS file: /work/cvs/gnu/glibc-2.1/nis/nss_nis/nis-network.c,v
retrieving revision 1.1.1.9
diff -u -p -r1.1.1.9 nis-network.c
--- nis/nss_nis/nis-network.c	1999/01/30 00:01:03	1.1.1.9
+++ nis/nss_nis/nis-network.c	2000/03/04 18:36:11
@@ -128,7 +128,8 @@ internal_nis_getnetent_r (struct netent 
         ++p;
       free (result);
 
-      parse_res = _nss_files_parse_netent (p, net, data, buflen, errnop);
+      parse_res = _nss_files_parse_netent (p, net, data, buflen, NULL,
+					   errnop);
       if (parse_res == -1)
 	{
 	  free (outkey);
@@ -229,7 +230,8 @@ _nss_nis_getnetbyname_r (const char *nam
     ++p;
   free (result);
 
-  parse_res = _nss_files_parse_netent (p, net, data, buflen, errnop);
+  parse_res = _nss_files_parse_netent (p, net, data, buflen, NULL,
+				       errnop);
 
   if (parse_res < 1)
     {
@@ -315,7 +317,8 @@ _nss_nis_getnetbyaddr_r (unsigned long a
 	  ++p;
 	free (result);
 
-	parse_res = _nss_files_parse_netent (p, net, data, buflen, errnop);
+	parse_res = _nss_files_parse_netent (p, net, data, buflen,
+					     NULL, errnop);
 
 	if (parse_res < 1)
 	  {
Index: nis/nss_nis/nis-proto.c
===================================================================
RCS file: /work/cvs/gnu/glibc-2.1/nis/nss_nis/nis-proto.c,v
retrieving revision 1.1.1.11
diff -u -p -r1.1.1.11 nis-proto.c
--- nis/nss_nis/nis-proto.c	1998/08/20 16:09:12	1.1.1.11
+++ nis/nss_nis/nis-proto.c	2000/03/04 18:50:10
@@ -159,7 +159,8 @@ internal_nis_getprotoent_r (struct proto
       while (isspace (*p))
         ++p;
 
-      parse_res = _nss_files_parse_protoent (p, proto, data, buflen, errnop);
+      parse_res = _nss_files_parse_protoent (p, proto, data, buflen,
+					     NULL, errnop);
       if (parse_res == -1)
         return NSS_STATUS_TRYAGAIN;
       next = next->next;
@@ -227,7 +228,8 @@ _nss_nis_getprotobyname_r (const char *n
     ++p;
   free (result);
 
-  parse_res = _nss_files_parse_protoent (p, proto, data, buflen, errnop);
+  parse_res = _nss_files_parse_protoent (p, proto, data, buflen, NULL,
+					 errnop);
   if (parse_res < 1)
     {
       if (parse_res == -1)
@@ -281,7 +283,8 @@ _nss_nis_getprotobynumber_r (int number,
     ++p;
   free (result);
 
-  parse_res = _nss_files_parse_protoent (p, proto, data, buflen, errnop);
+  parse_res = _nss_files_parse_protoent (p, proto, data, buflen, NULL,
+					 errnop);
   if (parse_res < 1)
     {
       if (parse_res == -1)
Index: nis/nss_nis/nis-pwd.c
===================================================================
RCS file: /work/cvs/gnu/glibc-2.1/nis/nss_nis/nis-pwd.c,v
retrieving revision 1.1.1.10
diff -u -p -r1.1.1.10 nis-pwd.c
--- nis/nss_nis/nis-pwd.c	1998/09/23 14:09:47	1.1.1.10
+++ nis/nss_nis/nis-pwd.c	2000/03/04 18:37:45
@@ -174,7 +174,8 @@ internal_nis_getpwent_r (struct passwd *
         ++p;
       free (result);
 
-      parse_res = _nss_files_parse_pwent (p, pwd, data, buflen, errnop);
+      parse_res = _nss_files_parse_pwent (p, pwd, data, buflen, NULL,
+					  errnop);
       if (parse_res == -1)
 	{
 	  free (outkey);
@@ -300,7 +301,8 @@ _nss_nis_getpwnam_r (const char *name, s
     ++p;
   free (result);
 
-  parse_res = _nss_files_parse_pwent (p, pwd, data, buflen, errnop);
+  parse_res = _nss_files_parse_pwent (p, pwd, data, buflen, NULL,
+				      errnop);
   if (parse_res < 1)
     {
       if (parse_res == -1)
@@ -404,7 +406,8 @@ _nss_nis_getpwuid_r (uid_t uid, struct p
     ++p;
   free (result);
 
-  parse_res = _nss_files_parse_pwent (p, pwd, data, buflen, errnop);
+  parse_res = _nss_files_parse_pwent (p, pwd, data, buflen, NULL,
+				      errnop);
   if (parse_res < 1)
     {
       if (parse_res == -1)
Index: nis/nss_nis/nis-rpc.c
===================================================================
RCS file: /work/cvs/gnu/glibc-2.1/nis/nss_nis/nis-rpc.c,v
retrieving revision 1.1.1.10
diff -u -p -r1.1.1.10 nis-rpc.c
--- nis/nss_nis/nis-rpc.c	1998/08/20 16:09:16	1.1.1.10
+++ nis/nss_nis/nis-rpc.c	2000/03/04 18:38:20
@@ -175,7 +175,8 @@ internal_nis_getrpcent_r (struct rpcent 
       while (isspace (*p))
         ++p;
 
-      parse_res = _nss_files_parse_rpcent (p, rpc, pdata, buflen, errnop);
+      parse_res = _nss_files_parse_rpcent (p, rpc, pdata, buflen, NULL,
+					   errnop);
       if (parse_res == -1)
 	return NSS_STATUS_TRYAGAIN;
       data->next = data->next->next;
@@ -293,7 +294,8 @@ _nss_nis_getrpcbynumber_r (int number, s
     ++p;
   free (result);
 
-  parse_res = _nss_files_parse_rpcent (p, rpc, data, buflen, errnop);
+  parse_res = _nss_files_parse_rpcent (p, rpc, data, buflen, NULL,
+				       errnop);
 
   if (parse_res < 1)
     {
Index: nis/nss_nis/nis-service.c
===================================================================
RCS file: /work/cvs/gnu/glibc-2.1/nis/nss_nis/nis-service.c,v
retrieving revision 1.1.1.13
diff -u -p -r1.1.1.13 nis-service.c
--- nis/nss_nis/nis-service.c	2000/01/12 16:46:37	1.1.1.13
+++ nis/nss_nis/nis-service.c	2000/03/04 18:50:42
@@ -175,7 +175,8 @@ internal_nis_getservent_r (struct serven
       while (isspace (*p))
         ++p;
 
-      parse_res = _nss_files_parse_servent (p, serv, pdata, buflen, errnop);
+      parse_res = _nss_files_parse_servent (p, serv, pdata, buflen,
+					    NULL, errnop);
       if (parse_res == -1)
         return NSS_STATUS_TRYAGAIN;
       data->next = data->next->next;
@@ -256,7 +257,7 @@ _nss_nis_getservbyname_r (const char *na
 	    ++p;
 	  free (result);
 	  parse_res = _nss_files_parse_servent (p, serv, pdata,
-						buflen, errnop);
+						buflen, NULL, errnop);
 	  if (parse_res < 0)
 	    {
 	      if (parse_res == -1)
@@ -350,7 +351,7 @@ _nss_nis_getservbyport_r (int port, char
 	    ++p;
 	  free (result);
 	  parse_res = _nss_files_parse_servent (p, serv, pdata,
-						buflen, errnop);
+						buflen, NULL, errnop);
 	  if (parse_res < 0)
 	    {
 	      if (parse_res == -1)
Index: nis/nss_nis/nis-spwd.c
===================================================================
RCS file: /work/cvs/gnu/glibc-2.1/nis/nss_nis/nis-spwd.c,v
retrieving revision 1.1.1.7
diff -u -p -r1.1.1.7 nis-spwd.c
--- nis/nss_nis/nis-spwd.c	1998/08/20 16:09:19	1.1.1.7
+++ nis/nss_nis/nis-spwd.c	2000/03/04 18:39:44
@@ -124,7 +124,8 @@ internal_nis_getspent_r (struct spwd *sp
         ++p;
       free (result);
 
-      parse_res = _nss_files_parse_spent (p, sp, data, buflen, errnop);
+      parse_res = _nss_files_parse_spent (p, sp, data, buflen, NULL,
+		  errnop);
       if (parse_res == -1)
 	{
 	  free (outkey);
@@ -200,7 +201,8 @@ _nss_nis_getspnam_r (const char *name, s
     ++p;
   free (result);
 
-  parse_res = _nss_files_parse_spent (p, sp, data, buflen, errnop);
+  parse_res = _nss_files_parse_spent (p, sp, data, buflen, NULL,
+				      errnop);
   if (parse_res < 1)
     {
       if (parse_res == -1)
Index: resolv/Versions
===================================================================
RCS file: /work/cvs/gnu/glibc-2.1/resolv/Versions,v
retrieving revision 1.1.1.2
diff -u -p -r1.1.1.2 Versions
--- resolv/Versions	1999/02/14 17:07:32	1.1.1.2
+++ resolv/Versions	2000/03/04 23:12:04
@@ -18,6 +18,10 @@ libc {
     # r*
     res_init;
   }
+  GLIBC_2.1.3 {
+    # Use by libnss_files.so.
+    _res_hconf;
+  }
 }
 
 libresolv {

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]