Return proper status from _nss_nis_initgroups_dyn (bug 20262)

This commit is contained in:
Andreas Schwab 2016-06-16 12:44:29 +02:00
parent 3631c9742a
commit 73fb56a4d5
2 changed files with 18 additions and 5 deletions

View file

@ -1,3 +1,10 @@
2016-06-30 Andreas Schwab <schwab@suse.de>
[BZ #20262]
* nis/nss_nis/nis-initgroups.c (_nss_nis_initgroups_dyn): Return
NSS_STATUS_SUCCESS when done. Return NSS_STATUS_TRYAGAIN when out
of memory.
2016-06-29 H.J. Lu <hongjiu.lu@intel.com>
[BZ #18645]

View file

@ -266,7 +266,7 @@ _nss_nis_initgroups_dyn (const char *user, gid_t group, long int *start,
tmpbuf = __alloca (buflen);
do
while (1)
{
while ((status =
internal_getgrent_r (&grpbuf, tmpbuf, buflen, errnop,
@ -275,8 +275,11 @@ _nss_nis_initgroups_dyn (const char *user, gid_t group, long int *start,
tmpbuf = extend_alloca (tmpbuf, buflen, 2 * buflen);
if (status != NSS_STATUS_SUCCESS)
goto done;
{
if (status == NSS_STATUS_NOTFOUND)
status = NSS_STATUS_SUCCESS;
goto done;
}
g = &grpbuf;
if (g->gr_gid != group)
@ -304,7 +307,11 @@ _nss_nis_initgroups_dyn (const char *user, gid_t group, long int *start,
newgroups = realloc (groups, newsize * sizeof (*groups));
if (newgroups == NULL)
goto done;
{
status = NSS_STATUS_TRYAGAIN;
*errnop = errno;
goto done;
}
*groupsp = groups = newgroups;
*size = newsize;
}
@ -316,7 +323,6 @@ _nss_nis_initgroups_dyn (const char *user, gid_t group, long int *start,
}
}
}
while (status == NSS_STATUS_SUCCESS);
done:
while (intern.start != NULL)