summaryrefslogtreecommitdiffstats
path: root/pw/pw_group.c
diff options
context:
space:
mode:
authorBaptiste Daroussin <bapt@FreeBSD.org>2015-07-11 18:09:27 +0000
committerBaptiste Daroussin <bapt@FreeBSD.org>2015-07-11 18:09:27 +0000
commitcc424f0d3468b75718e420a691cb5e3b238804b6 (patch)
treeb1131a1c4026663026eefcdb078848e697a610cc /pw/pw_group.c
parentecf012ac29ba3e82e8b5e497ee1b80629ae5624f (diff)
downloadpw-darwin-cc424f0d3468b75718e420a691cb5e3b238804b6.tar.gz
pw-darwin-cc424f0d3468b75718e420a691cb5e3b238804b6.zip
Make separate functions to show users and groups
Diffstat (limited to 'pw/pw_group.c')
-rw-r--r--pw/pw_group.c51
1 files changed, 35 insertions, 16 deletions
diff --git a/pw/pw_group.c b/pw/pw_group.c
index 61f0a21..d87c8cc 100644
--- a/pw/pw_group.c
+++ b/pw/pw_group.c
@@ -103,6 +103,37 @@ pw_groupnext(struct userconf *cnf, bool quiet)
return (EXIT_SUCCESS);
}
+static int
+pw_groupshow(const char *name, long id, struct group *fakegroup)
+{
+ struct group *grp = NULL;
+
+ if (id < 0 && name == NULL && !conf.all)
+ errx(EX_DATAERR, "groupname or id or '-a' required");
+
+ if (conf.all) {
+ SETGRENT();
+ while ((grp = GETGRENT()) != NULL)
+ print_group(grp);
+ ENDGRENT();
+
+ return (EXIT_SUCCESS);
+ }
+
+ grp = (name != NULL) ? GETGRNAM(name) : GETGRGID(id);
+ if (grp == NULL) {
+ if (conf.force) {
+ grp = fakegroup;
+ } else {
+ if (name == NULL)
+ errx(EX_DATAERR, "unknown gid `%ld'", id);
+ errx(EX_DATAERR, "unknown group `%s'", name);
+ }
+ }
+
+ return (print_group(grp));
+}
+
int
pw_group(int mode, char *name, long id, struct cargs * args)
{
@@ -124,34 +155,22 @@ pw_group(int mode, char *name, long id, struct cargs * args)
if (mode == M_NEXT)
return (pw_groupnext(cnf, conf.quiet));
+ if (mode == M_PRINT)
+ return (pw_groupshow(name, id, &fakegroup));
+
if (mode == M_LOCK || mode == M_UNLOCK)
errx(EX_USAGE, "'lock' command is not available for groups");
- if (mode == M_PRINT && getarg(args, 'a')) {
- SETGRENT();
- while ((grp = GETGRENT()) != NULL)
- print_group(grp);
- ENDGRENT();
- return EXIT_SUCCESS;
- }
if (id < 0 && name == NULL)
errx(EX_DATAERR, "group name or id required");
grp = (name != NULL) ? GETGRNAM(name) : GETGRGID(id);
- if (mode == M_UPDATE || mode == M_DELETE || mode == M_PRINT) {
+ if (mode == M_UPDATE || mode == M_DELETE) {
if (name == NULL && grp == NULL) /* Try harder */
grp = GETGRGID(id);
if (grp == NULL) {
- if (mode == M_PRINT && getarg(args, 'F')) {
- char *fmems[1];
- fmems[0] = NULL;
- fakegroup.gr_name = name ? name : "nogroup";
- fakegroup.gr_gid = (gid_t) id;
- fakegroup.gr_mem = fmems;
- return print_group(&fakegroup);
- }
if (name == NULL)
errx(EX_DATAERR, "unknown group `%s'", name);
else