diff options
Diffstat (limited to 'usr.bin/ssh/groupaccess.c')
-rw-r--r-- | usr.bin/ssh/groupaccess.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/usr.bin/ssh/groupaccess.c b/usr.bin/ssh/groupaccess.c index 69fd007fe15..5303688ba03 100644 --- a/usr.bin/ssh/groupaccess.c +++ b/usr.bin/ssh/groupaccess.c @@ -1,4 +1,4 @@ -/* $OpenBSD: groupaccess.c,v 1.17 2019/03/06 22:14:23 dtucker Exp $ */ +/* $OpenBSD: groupaccess.c,v 1.18 2024/11/04 21:59:15 jca Exp $ */ /* * Copyright (c) 2001 Kevin Steves. All rights reserved. * @@ -48,15 +48,18 @@ int ga_init(const char *user, gid_t base) { gid_t groups_bygid[NGROUPS_MAX + 1]; - int i, j; + int i, j, maxgroups; struct group *gr; if (ngroups > 0) ga_free(); - ngroups = sizeof(groups_bygid) / sizeof(gid_t); - if (getgrouplist(user, base, groups_bygid, &ngroups) == -1) + maxgroups = ngroups = sizeof(groups_bygid) / sizeof(gid_t); + if (getgrouplist(user, base, groups_bygid, &ngroups) == -1) { logit("getgrouplist: groups list too small"); + /* Truncate group list */ + ngroups = maxgroups; + } for (i = 0, j = 0; i < ngroups; i++) if ((gr = getgrgid(groups_bygid[i])) != NULL) groups_byname[j++] = xstrdup(gr->gr_name); |