Mercurial > hg > toybox
changeset 1505:3fa0b2931082 draft
Cleanup pass on groupdel.
author | Rob Landley <rob@landley.net> |
---|---|
date | Sat, 27 Sep 2014 21:04:47 -0500 |
parents | c86e27992c4a |
children | 448e47e2ad46 |
files | toys/pending/groupdel.c |
diffstat | 1 files changed, 10 insertions(+), 31 deletions(-) [+] |
line wrap: on
line diff
--- a/toys/pending/groupdel.c Sat Sep 27 20:31:16 2014 -0500 +++ b/toys/pending/groupdel.c Sat Sep 27 21:04:47 2014 -0500 @@ -12,8 +12,7 @@ bool "groupdel" default n help - usage: delgroup [USER] GROUP - usage: groupdel GROUP + usage: groupdel [USER] GROUP Delete a group or remove a user from a group */ @@ -21,40 +20,22 @@ #define FOR_groupdel #include "toys.h" -char *comma_find(char *name, char *list) -{ - int len = strlen(name); - - while (*list) { - while (*list == ',') list++; - if (!strncmp(name, list, len) && (!list[len] || list[len]==',')) - return list; - while (*list && *list!=',') list++; - } - - return 0; -} - void groupdel_main(void) { - struct group *grp = getgrnam(toys.optargs[toys.optc-1]); + struct group *grp = xgetgrnam(toys.optargs[toys.optc-1]); char *entry = 0; - if (!grp) perror_exit("group '%s'", toys.optargs[toys.optc-1]); - // delete user from group if (toys.optc == 2) { - int i, len = 0, found = -1; + int i, len = 0, found = 0; char *s; xgetpwnam(*toys.optargs); - if (grp->gr_mem) { - for (i = 0; grp->gr_mem[i]; i++) { - if (found == -1 && !strcmp(*toys.optargs, grp->gr_mem[i])) found = i; - else len += strlen(grp->gr_mem[i]) + 1; - } + if (grp->gr_mem) for (i = 0; grp->gr_mem[i]; i++) { + if (!found && !strcmp(*toys.optargs, grp->gr_mem[i])) found++; + else len += strlen(grp->gr_mem[i]) + 1; } - if (found == -1) + if (!found) error_exit("user '%s' not in group '%s'", *toys.optargs, toys.optargs[1]); entry = s = xmalloc(len); @@ -67,13 +48,11 @@ } else { struct passwd *pw; - endpwent(); // possibly this should be in toy_init()? - for (;;) { - if (!(pw = getpwent())) break; + for (endpwent(); (pw = getpwent());) if (pw->pw_gid == grp->gr_gid) break; - } + if (pw) error_exit("can't remove primary group of user '%s'", pw->pw_name); - endpwent(); + if (CFG_TOYBOX_FREE) endpwent(); } update_password("/etc/group", grp->gr_name, entry);