X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=nis%2Fnss_nis%2Fnis-initgroups.c;h=ec13dbd1400a4abeb0fc3d7c282afa486525396d;hb=cf9e9ad98feb55d11f93aa4e069c81ee06c2a6a3;hp=9e18a2027a4cab6d8ffe8178027a4c67c726ea1a;hpb=945b22ed04767342dac1654f7e92ad5f8870361b;p=platform%2Fupstream%2Fglibc.git diff --git a/nis/nss_nis/nis-initgroups.c b/nis/nss_nis/nis-initgroups.c index 9e18a20..ec13dbd 100644 --- a/nis/nss_nis/nis-initgroups.c +++ b/nis/nss_nis/nis-initgroups.c @@ -137,15 +137,15 @@ internal_getgrent_r (struct group *grp, char *buffer, size_t buflen, } enum nss_status -_nss_nis_initgroups (const char *user, gid_t group, long int *start, - long int *size, gid_t *groups, long int limit, - int *errnop) +_nss_nis_initgroups_dyn (const char *user, gid_t group, long int *start, + long int *size, gid_t **groupsp, int *errnop) { struct group grpbuf, *g; size_t buflen = sysconf (_SC_GETPW_R_SIZE_MAX); char *tmpbuf; enum nss_status status; intern_t intern = { NULL, NULL }; + gid_t *groups = *groupsp; status = internal_setgrent (&intern); if (status != NSS_STATUS_SUCCESS) @@ -177,22 +177,20 @@ _nss_nis_initgroups (const char *user, gid_t group, long int *start, if (strcmp (*m, user) == 0) { /* Matches user. Insert this group. */ - if (*start == *size && limit <= 0) + if (*start == *size) { /* Need a bigger buffer. */ - groups = realloc (groups, 2 * *size * sizeof (*groups)); - if (groups == NULL) + gid_t *newgroups; + newgroups = realloc (groups, 2 * *size * sizeof (*groups)); + if (newgroups == NULL) goto done; + *groupsp = groups = newgroups; *size *= 2; } groups[*start] = g->gr_gid; *start += 1; - if (*start == limit) - /* Can't take any more groups; stop searching. */ - goto done; - break; } }