]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
su: accept group name and GID in -g and -G options
authorChristian Goeschel Ndjomouo <cgoesc2@wgu.edu>
Wed, 26 Nov 2025 03:19:12 +0000 (22:19 -0500)
committerChristian Goeschel Ndjomouo <cgoesc2@wgu.edu>
Mon, 1 Dec 2025 07:58:13 +0000 (02:58 -0500)
Signed-off-by: Christian Goeschel Ndjomouo <cgoesc2@wgu.edu>
login-utils/su-common.c

index 4d54eab31b5865e3380bb8f151d3f8084c5e8765..81ea262875a74d63f7c165c7436618bf8c4584ee 100644 (file)
@@ -267,7 +267,7 @@ static void chownmod_pty(struct su_context *su)
        const char *grname = getlogindefs_str("TTYGROUP", TTYGRPNAME);
 
        if (grname && *grname) {
-               struct group *gr = getgrnam(grname);
+               struct group *gr = ul_getgrp_str(grname);
                if (gr) /* group by name */
                        gid = gr->gr_gid;
                else    /* group by ID */
@@ -970,7 +970,7 @@ static gid_t add_supp_group(const char *name, gid_t **groups, size_t *ngroups)
                        "specifying more than %d supplemental groups is not possible",
                        NGROUPS_MAX - 1), NGROUPS_MAX - 1);
 
-       gr = getgrnam(name);
+       gr = ul_getgrp_str(name);
        if (!gr)
                errx(EXIT_FAILURE, _("group %s does not exist"), name);
 
@@ -1154,7 +1154,7 @@ int su_main(int argc, char **argv, int mode)
        logindefs_set_loader(load_config, (void *) su);
        init_tty(su);
 
-       su->pwd = xgetpwnam(su->new_user, &su->pwdbuf);
+       su->pwd = xgetuserpw(su->new_user, &su->pwdbuf);
        if (!su->pwd
            || !su->pwd->pw_passwd
            || !su->pwd->pw_name || !*su->pwd->pw_name