]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
2005-02-07 Jakub Jelinek <jakub@redhat.com>
authorRoland McGrath <roland@gnu.org>
Wed, 16 Feb 2005 11:29:47 +0000 (11:29 +0000)
committerRoland McGrath <roland@gnu.org>
Wed, 16 Feb 2005 11:29:47 +0000 (11:29 +0000)
[BZ #741]
* nscd/nscd_getai.c (__nscd_getai): If ai_resp->found == -1, set
__nss_not_use_nscd_hosts and return -1.
* nscd/nscd_initgroups.c (__nscd_getgrouplist): If
initgr_resp->found == -1, set __nss_not_use_nscd_group and return -1.
Avoid leaking sockets.

nscd/nscd_getai.c
nscd/nscd_initgroups.c

index 24b374b0dc8ae7555471e7aa43ccdcf9551306bd..cfb3fe27013c854bd9722a8a1f4414242c39a117 100644 (file)
@@ -78,7 +78,7 @@ __nscd_getai (const char *key, struct nscd_ai_result **result, int *h_errnop)
                                 sizeof (ai_resp_mem));
       if (sock == -1)
        {
-         /* nscd not running or wrong version or hosts caching disabled.  */
+         /* nscd not running or wrong version.  */
          __nss_not_use_nscd_hosts = 1;
          goto out;
        }
@@ -151,6 +151,13 @@ __nscd_getai (const char *key, struct nscd_ai_result **result, int *h_errnop)
     }
   else
     {
+      if (__builtin_expect (ai_resp->found == -1, 0))
+       {
+         /* The daemon does not cache this database.  */
+         __nss_not_use_nscd_hosts = 1;
+         goto out_close;
+       }
+
       /* Store the error number.  */
       *h_errnop = ai_resp->error;
 
index 2ea9e7f86230934787aa7d70f98b6054f59ce583..a25f1fbcd7696488e8a0aae23ac5ccac8459739e 100644 (file)
@@ -75,7 +75,7 @@ __nscd_getgrouplist (const char *user, gid_t group, long int *size,
                                 sizeof (initgr_resp_mem));
       if (sock == -1)
        {
-         /* nscd not running or wrong version or hosts caching disabled.  */
+         /* nscd not running or wrong version.  */
          __nss_not_use_nscd_group = 1;
          goto out;
        }
@@ -101,7 +101,7 @@ __nscd_getgrouplist (const char *user, gid_t group, long int *size,
                                 (initgr_resp->ngrps + 1) * sizeof (gid_t));
          if (newp == NULL)
            /* We cannot increase the buffer size.  */
-           goto out;
+           goto out_close;
 
          *groupsp = newp;
          *size = initgr_resp->ngrps + 1;
@@ -125,6 +125,13 @@ __nscd_getgrouplist (const char *user, gid_t group, long int *size,
     }
   else
     {
+      if (__builtin_expect (initgr_resp->found == -1, 0))
+       {
+         /* The daemon does not cache this database.  */
+         __nss_not_use_nscd_group = 1;
+         goto out_close;
+       }
+
       /* No group found yet.   */
       retval = 0;
 
@@ -143,6 +150,7 @@ __nscd_getgrouplist (const char *user, gid_t group, long int *size,
        (*groupsp)[retval++] = group;
     }
 
+ out_close:
   if (sock != -1)
     close_not_cancel_no_status (sock);
  out: