]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Fix nscd lookup for innetgr when netgroup has wildcards (BZ #16758)
authorSiddhesh Poyarekar <siddhesh@redhat.com>
Thu, 27 Mar 2014 01:45:22 +0000 (07:15 +0530)
committerSiddhesh Poyarekar <siddhesh@redhat.com>
Thu, 27 Mar 2014 01:45:22 +0000 (07:15 +0530)
nscd works correctly when the request in innetgr is a wildcard,
i.e. when one or more of host, user or domain parameters is NULL.
However, it does not work when the the triplet in the netgroup
definition has a wildcard.  This is easy to reproduce for a triplet
defined as follows:

    foonet (,foo,)

Here, an innetgr call that looks like this:

    innetgr ("foonet", "foohost", "foo", NULL);

should succeed and so should:

    innetgr ("foonet", NULL, "foo", "foodomain");

It does succeed with nscd disabled, but not with nscd enabled.  This
fix adds this additional check for all three parts of the triplet so
that it gives the correct result.

[BZ #16758]
* nscd/netgroupcache.c (addinnetgrX): Succeed if triplet has
blank values.

ChangeLog
NEWS
nscd/netgroupcache.c

index 2cc0bce42adb5a4a2ce1eb8bf48d0b10d9e73c0c..404ef7af2b60e37a578fac8f57ed7a05279ac456 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2014-03-27  Siddhesh Poyarekar  <siddhesh@redhat.com>
+
+       [BZ #16758]
+       * nscd/netgroupcache.c (addinnetgrX): Succeed if triplet has
+       blank values.
+
 2014-03-26  Paul Pluzhnikov  <ppluzhnikov@google.com>
 
        * elf/dl-load.c: Convert __builtin_expect into __glibc_{un}likely.
diff --git a/NEWS b/NEWS
index 6f16584a5f345d3e21c89fd034446f8e0b8882e6..895c640c5ea1406fa57303f45c2d33fc51536abe 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -12,7 +12,7 @@ Version 2.20
   15347, 15804, 15894, 16002, 16198, 16284, 16357, 16447, 16532, 16545,
   16574, 16599, 16600, 16609, 16610, 16611, 16613, 16623, 16632, 16634,
   16639, 16642, 16649, 16670, 16674, 16677, 16680, 16683, 16689, 16695,
-  16701, 16706, 16707, 16712, 16713, 16714, 16731, 16743.
+  16701, 16706, 16707, 16712, 16713, 16714, 16731, 16743, 16758.
 
 * Running the testsuite no longer terminates as soon as a test fails.
   Instead, a file tests.sum (xtests.sum from "make xcheck") is generated,
index 5ba1e1f27752961895a1cad5ecbd493b39ed8fc3..5d15aa49f416bdc11137b6ac47ffdd8a21ac746d 100644 (file)
@@ -560,15 +560,19 @@ addinnetgrX (struct database_dyn *db, int fd, request_header *req,
        {
          bool success = true;
 
-         if (host != NULL)
+         /* For the host, user and domain in each triplet, we assume success
+            if the value is blank because that is how the wildcard entry to
+            match anything is stored in the netgroup cache.  */
+         if (host != NULL && *triplets != '\0')
            success = strcmp (host, triplets) == 0;
          triplets = (const char *) rawmemchr (triplets, '\0') + 1;
 
-         if (success && user != NULL)
+         if (success && user != NULL && *triplets != '\0')
            success = strcmp (user, triplets) == 0;
          triplets = (const char *) rawmemchr (triplets, '\0') + 1;
 
-         if (success && (domain == NULL || strcmp (domain, triplets) == 0))
+         if (success && (domain == NULL || *triplets == '\0'
+                         || strcmp (domain, triplets) == 0))
            {
              dataset->resp.result = 1;
              break;