git: aeff6867a4df - stable/14 - mountd(8): parsecred(): uid:gid:... loop: Simplify a bit

From: Olivier Certner <olce_at_FreeBSD.org>
Date: Thu, 16 Jan 2025 18:08:19 UTC
The branch stable/14 has been updated by olce:

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

commit aeff6867a4df37bdb3058aa9530480c59699783a
Author:     Olivier Certner <olce@FreeBSD.org>
AuthorDate: 2024-09-26 16:16:16 +0000
Commit:     Olivier Certner <olce@FreeBSD.org>
CommitDate: 2025-01-16 18:06:57 +0000

    mountd(8): parsecred(): uid:gid:... loop: Simplify a bit
    
    No functional change intended.
    
    Reviewed by:    rmacklem (older version)
    Approved by:    markj (mentor)
    MFC after:      2 weeks
    Sponsored by:   The FreeBSD Foundation
    Differential Revision:  https://reviews.freebsd.org/D46919
    
    (cherry picked from commit ae22a4bb7437019e34fc593e101a6ac14c9d7959)
---
 usr.sbin/mountd/mountd.c | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/usr.sbin/mountd/mountd.c b/usr.sbin/mountd/mountd.c
index fa270f3a42d4..e01140593c11 100644
--- a/usr.sbin/mountd/mountd.c
+++ b/usr.sbin/mountd/mountd.c
@@ -3686,7 +3686,9 @@ parsecred(char *namelist, struct expcred *cr)
 		cr->cr_uid = name_ul;
 	}
 	cr->cr_ngroups = 0;
-	while (names != NULL && *names != '\0' && cr->cr_ngroups < NGROUPS_MAX) {
+	while (names != NULL && *names != '\0') {
+		gid_t group;
+
 		name = strsep_quote(&names, ":");
 		name_ul = strtoul(name, &end, 10);
 		if (*end != '\0' || end == name) {
@@ -3694,13 +3696,16 @@ parsecred(char *namelist, struct expcred *cr)
 				syslog(LOG_ERR, "unknown group: %s", name);
 				continue;
 			}
-			groups[cr->cr_ngroups++] = gr->gr_gid;
+			group = gr->gr_gid;
 		} else {
-			groups[cr->cr_ngroups++] = name_ul;
+			group = name_ul;
+		}
+		if (cr->cr_ngroups == NGROUPS_MAX) {
+			syslog(LOG_ERR, "too many groups");
+			break;
 		}
+		groups[cr->cr_ngroups++] = group;
 	}
-	if (names != NULL && *names != '\0' && cr->cr_ngroups == NGROUPS_MAX)
-		syslog(LOG_ERR, "too many groups");
 	if (cr->cr_ngroups > SMALLNGROUPS)
 		cr->cr_groups = malloc(cr->cr_ngroups * sizeof(gid_t));
 	memcpy(cr->cr_groups, groups, cr->cr_ngroups * sizeof(gid_t));