git: 48a186863431 - main - libc/nss: Ensure that setgroupent(3) actually works as advertised

Mark Johnston markj at FreeBSD.org
Thu Jan 21 19:30:54 UTC 2021


The branch main has been updated by markj:

URL: https://cgit.FreeBSD.org/src/commit/?id=48a186863431ec7a23c6174bc376cafa59dd5fbf

commit 48a186863431ec7a23c6174bc376cafa59dd5fbf
Author:     Mark Johnston <markj at FreeBSD.org>
AuthorDate: 2021-01-21 19:30:19 +0000
Commit:     Mark Johnston <markj at FreeBSD.org>
CommitDate: 2021-01-21 19:30:19 +0000

    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
---
 lib/libc/gen/getgrent.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/lib/libc/gen/getgrent.c b/lib/libc/gen/getgrent.c
index 6abccea30c6b..afb89cab308b 100644
--- a/lib/libc/gen/getgrent.c
+++ b/lib/libc/gen/getgrent.c
@@ -824,6 +824,7 @@ files_setgrent(void *retval, void *mdata, va_list ap)
 			rewind(st->fp);
 		else if (stayopen)
 			st->fp = fopen(_PATH_GROUP, "re");
+		st->stayopen = stayopen;
 		break;
 	case ENDGRENT:
 		if (st->fp != NULL) {
@@ -1271,6 +1272,7 @@ compat_setgrent(void *retval, void *mdata, va_list ap)
 			rewind(st->fp);
 		else if (stayopen)
 			st->fp = fopen(_PATH_GROUP, "re");
+		st->stayopen = stayopen;
 		set_setent(dtab, mdata);
 		(void)_nsdispatch(NULL, dtab, NSDB_GROUP_COMPAT, "setgrent",
 		    compatsrc, 0);


More information about the dev-commits-src-main mailing list