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);
+}