2005-02-07 Jakub Jelinek <jakub@redhat.com>

[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.
This commit is contained in:
Roland McGrath 2005-02-16 11:29:47 +00:00
parent 694069d2fe
commit eae6a0b0ef
2 changed files with 18 additions and 3 deletions

View 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;

View 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: