about summary refs log tree commit diff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2006-04-28 19:07:15 +0000
committerUlrich Drepper <drepper@redhat.com>2006-04-28 19:07:15 +0000
commitee821689eb2a2db7d303d4e3efa7ef54f502c854 (patch)
treea45cdbba22edb575dd855ff46532eec61f6d7b81
parent4718026de2ecab773d21b25efc989e18b9c4dc99 (diff)
downloadglibc-ee821689eb2a2db7d303d4e3efa7ef54f502c854.tar.gz
glibc-ee821689eb2a2db7d303d4e3efa7ef54f502c854.tar.xz
glibc-ee821689eb2a2db7d303d4e3efa7ef54f502c854.zip
* nis/nss-default.c (init): Rewrite parse to get the variables
	from a table.
-rw-r--r--ChangeLog3
-rw-r--r--nis/nss-default.c40
2 files changed, 26 insertions, 17 deletions
diff --git a/ChangeLog b/ChangeLog
index a3ffca49c5..f4d7139292 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2006-04-28  Ulrich Drepper  <drepper@redhat.com>
 
+	* nis/nss-default.c (init): Rewrite parse to get the variables
+	from a table.
+
 	* nis/nss_nis/nis-service.c: Avoid passing pointer to static
 	variable around.  Reduce number of memory allocations by creating
 	list of memory pools.
diff --git a/nis/nss-default.c b/nis/nss-default.c
index 3287e68b86..e3a228da71 100644
--- a/nis/nss-default.c
+++ b/nis/nss-default.c
@@ -35,6 +35,20 @@ static int default_nss_flags;
 /* Code to make sure we call 'init' once.  */
 __libc_once_define (static, once);
 
+/* Table of the recognized variables.  */
+static const struct
+{
+  char name[23];
+  unsigned int len;
+  int flag;
+} vars[] =
+  {
+#define STRNLEN(s) s, sizeof (s) - 1
+    { STRNLEN ("NETID_AUTHORITATIVE"), NSS_FLAG_NETID_AUTHORITATIVE },
+    { STRNLEN ("SERVICES_AUTHORITATIVE"), NSS_FLAG_SERVICES_AUTHORITATIVE }
+  };
+#define nvars (sizeof (vars) / sizeof (vars[0]))
+
 
 static void
 init (void)
@@ -53,11 +67,9 @@ init (void)
 	  if (n <= 0)
 	    break;
 
-	  /* There currently are only two variables we expect, so
-	     simplify the parsing.  Recognize only
+	  /* Recognize only
 
-	       NETID_AUTHORITATIVE = TRUE
-	       SERVICES_AUTHORITATIVE = TRUE
+	       <THE-VARIABLE> = TRUE
 
 	     with arbitrary white spaces.  */
 	  char *cp = line;
@@ -68,18 +80,14 @@ init (void)
 	  if (*cp == '#')
 	    continue;
 
-	  static const char netid_authoritative[] = "NETID_AUTHORITATIVE";
-	  static const char services_authoritative[]
-	    = "SERVICES_AUTHORITATIVE";
-	  size_t flag_len;
-	  if (strncmp (cp, netid_authoritative,
-		       flag_len = sizeof (netid_authoritative) - 1) != 0
-	      && strncmp (cp, services_authoritative,
-			  flag_len = sizeof (services_authoritative) - 1)
-		 != 0)
+	  int idx;
+	  for (idx = 0; idx < nvars; ++idx)
+	    if (strncmp (cp, vars[idx].name, vars[idx].len) == 0)
+	      break;
+	  if (idx == nvars)
 	    continue;
 
-	  cp += flag_len;
+	  cp += vars[idx].len;
 	  while (isspace (*cp))
 	    ++cp;
 	  if (*cp++ != '=')
@@ -95,9 +103,7 @@ init (void)
 	    ++cp;
 
 	  if (*cp == '\0')
-	    default_nss_flags |= (flag_len == sizeof (netid_authoritative) - 1
-				  ? NSS_FLAG_NETID_AUTHORITATIVE
-				  : NSS_FLAG_SERVICES_AUTHORITATIVE);
+	    default_nss_flags |= vars[idx].flag;
 	}
 
       free (line);