Mercurial > hg > toybox
changeset 903:159b84d04b33
Make groups handle multiple usernames on command line.
author | Ivo van Poorten <ivopvp@gmail.com> |
---|---|
date | Sat, 18 May 2013 22:33:40 -0500 |
parents | 36993c59a3d3 |
children | 44abb9cac9d7 |
files | toys/posix/id.c |
diffstat | 1 files changed, 12 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/toys/posix/id.c Tue May 14 20:42:54 2013 -0500 +++ b/toys/posix/id.c Sat May 18 22:33:40 2013 -0500 @@ -66,7 +66,7 @@ return group; } -void id_main(void) +void do_id(char *username) { int flags, i, ngroups, cmd_groups = toys.which->name[0] == 'g'; struct passwd *pw; @@ -80,9 +80,9 @@ flags = toys.optflags; // check if a username is given - if (*toys.optargs) { - if (!(pw = getpwnam(*toys.optargs))) - error_exit("no such user '%s'", *toys.optargs); + if (username) { + if (!(pw = getpwnam(username))) + error_exit("no such user '%s'", username); uid = euid = pw->pw_uid; gid = egid = pw->pw_gid; if (cmd_groups) @@ -116,7 +116,8 @@ groups = (gid_t *)toybuf; i = sizeof(toybuf)/sizeof(gid_t); - ngroups = *toys.optargs ? getgrouplist(*toys.optargs, gid, groups, &i) : getgroups(i, groups); + ngroups = username ? getgrouplist(username, gid, groups, &i) + : getgroups(i, groups); if (0 >= ngroups) perror_exit(0); for (i = 0;;) { @@ -128,3 +129,9 @@ } xputc('\n'); } + +void id_main(void) +{ + if (toys.optc) while(*toys.optargs) do_id(*toys.optargs++); + else do_id(NULL); +}