From d1a5e99e8af30f462ac722d02f7b31b84369075c Mon Sep 17 00:00:00 2001 From: Karel Zak Date: Thu, 22 Jul 2021 11:30:22 +0200 Subject: [PATCH] lslogins: ask for supplementary groups only once [asan] Signed-off-by: Karel Zak --- login-utils/lslogins.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/login-utils/lslogins.c b/login-utils/lslogins.c index cf1b8e7ca..f07d83ecc 100644 --- a/login-utils/lslogins.c +++ b/login-utils/lslogins.c @@ -562,6 +562,9 @@ static int get_sgroups(gid_t **list, size_t *len, struct passwd *pwd) *list = xcalloc(1, ngroups * sizeof(gid_t)); +fprintf(stderr, "KZAK>>> alloc '%p' for %s\n", *list, pwd->pw_name); + + /* now for the actual list of GIDs */ if (-1 == getgrouplist(pwd->pw_name, pwd->pw_gid, *list, &ngroups)) return -1; @@ -754,7 +757,8 @@ static struct lslogins_user *get_user_info(struct lslogins_control *ctl, const c break; case COL_SGROUPS: case COL_SGIDS: - if (get_sgroups(&user->sgroups, &user->nsgroups, pwd)) + if (!user->nsgroups && + get_sgroups(&user->sgroups, &user->nsgroups, pwd) < 0) err(EXIT_FAILURE, _("failed to get supplementary groups")); break; case COL_HOME: @@ -1048,7 +1052,6 @@ static int create_usertree(struct lslogins_control *ctl) } if (rc || !user) continue; - tsearch(user, &ctl->usertree, cmp_uid); } } else {