FreeBSD Bugzilla – Attachment 200779 Details for
Bug 234622
[libc] getgrent() issue with large NIS groups
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch for 11.2
NIS-getgrent.patch (text/plain), 2.54 KB, created by
tcleamy
on 2019-01-04 21:33:38 UTC
(
hide
)
Description:
Patch for 11.2
Filename:
MIME Type:
Creator:
tcleamy
Created:
2019-01-04 21:33:38 UTC
Size:
2.54 KB
patch
obsolete
>*** getgrent.c.orig Fri Nov 23 10:51:52 2018 >--- getgrent.c Fri Nov 23 12:19:28 2018 >*************** >*** 1086,1091 **** >--- 1086,1092 ---- > int *errnop, keylen, resultlen, rv; > > name = NULL; >+ key = NULL; > gid = (gid_t)-1; > how = (enum nss_lookup_type)mdata; > switch (how) { >*************** >*** 1135,1153 **** > result = NULL; > if (how == nss_lt_all) { > if (st->key == NULL) >! rv = yp_first(st->domain, map, &st->key, >! &st->keylen, &result, &resultlen); > else { >! key = st->key; >! keylen = st->keylen; >! st->key = NULL; >! rv = yp_next(st->domain, map, key, keylen, >! &st->key, &st->keylen, &result, >! &resultlen); >! free(key); > } > if (rv != 0) { > free(result); > free(st->key); > st->key = NULL; > if (rv == YPERR_NOMORE) { >--- 1136,1151 ---- > result = NULL; > if (how == nss_lt_all) { > if (st->key == NULL) >! rv = yp_first(st->domain, map, &key, >! &keylen, &result, &resultlen); > else { >! rv = yp_next(st->domain, map, >! st->key, st->keylen, >! &key, &keylen, &result, &resultlen); > } > if (rv != 0) { > free(result); >+ free(key); > free(st->key); > st->key = NULL; > if (rv == YPERR_NOMORE) { >*************** >*** 1174,1179 **** >--- 1172,1180 ---- > * pointer for the member list terminator. > */ > if (resultlen >= bufsize - _ALIGNBYTES - sizeof(char *)) { >+ if (how == nss_lt_all) { >+ free(key); >+ } > free(result); > goto erange; > } >*************** >*** 1181,1190 **** > buffer[resultlen] = '\0'; > free(result); > rv = __gr_match_entry(buffer, resultlen, how, name, gid); >! if (rv == NS_SUCCESS) > rv = __gr_parse_entry(buffer, resultlen, grp, > &buffer[resultlen+1], bufsize - resultlen - 1, > errnop); > } while (how == nss_lt_all && !(rv & NS_TERMINATE)); > fin: > if (rv == NS_SUCCESS && retval != NULL) >--- 1182,1206 ---- > buffer[resultlen] = '\0'; > free(result); > rv = __gr_match_entry(buffer, resultlen, how, name, gid); >! if (rv == NS_SUCCESS) { > rv = __gr_parse_entry(buffer, resultlen, grp, > &buffer[resultlen+1], bufsize - resultlen - 1, > errnop); >+ if (*errnop == ERANGE) { >+ if (how == nss_lt_all) { >+ free(key); >+ } >+ goto erange; >+ } >+ } >+ if (how == nss_lt_all) { >+ if (st->key != NULL) { >+ free(st->key); >+ } >+ st->key = key; >+ st->keylen = keylen; >+ key = NULL; >+ } > } while (how == nss_lt_all && !(rv & NS_TERMINATE)); > fin: > if (rv == NS_SUCCESS && retval != NULL)
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 234622
: 200779