libc/nss: Ensure that setgroupent(3) actually works as advertised
Because the "files" and "compat" implementations failed to set the "stayopen", keyed lookups would close the database handle, contrary to the purpose of setgroupent(3). setpassent(3)'s implementation does not have this bug. PR: 165527 Submitted by: Andrey Simonenko MFC after: 1 month
This commit is contained in:
parent
6e411d8b14
commit
48a1868634
@ -824,6 +824,7 @@ files_setgrent(void *retval, void *mdata, va_list ap)
|
|||||||
rewind(st->fp);
|
rewind(st->fp);
|
||||||
else if (stayopen)
|
else if (stayopen)
|
||||||
st->fp = fopen(_PATH_GROUP, "re");
|
st->fp = fopen(_PATH_GROUP, "re");
|
||||||
|
st->stayopen = stayopen;
|
||||||
break;
|
break;
|
||||||
case ENDGRENT:
|
case ENDGRENT:
|
||||||
if (st->fp != NULL) {
|
if (st->fp != NULL) {
|
||||||
@ -1271,6 +1272,7 @@ compat_setgrent(void *retval, void *mdata, va_list ap)
|
|||||||
rewind(st->fp);
|
rewind(st->fp);
|
||||||
else if (stayopen)
|
else if (stayopen)
|
||||||
st->fp = fopen(_PATH_GROUP, "re");
|
st->fp = fopen(_PATH_GROUP, "re");
|
||||||
|
st->stayopen = stayopen;
|
||||||
set_setent(dtab, mdata);
|
set_setent(dtab, mdata);
|
||||||
(void)_nsdispatch(NULL, dtab, NSDB_GROUP_COMPAT, "setgrent",
|
(void)_nsdispatch(NULL, dtab, NSDB_GROUP_COMPAT, "setgrent",
|
||||||
compatsrc, 0);
|
compatsrc, 0);
|
||||||
|
Loading…
Reference in New Issue
Block a user