summaryrefslogtreecommitdiffstats
path: root/usr.sbin/pw/pw_group.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr.sbin/pw/pw_group.c')
-rw-r--r--usr.sbin/pw/pw_group.c25
1 files changed, 20 insertions, 5 deletions
diff --git a/usr.sbin/pw/pw_group.c b/usr.sbin/pw/pw_group.c
index 3385752f..54125d8 100644
--- a/usr.sbin/pw/pw_group.c
+++ b/usr.sbin/pw/pw_group.c
@@ -44,12 +44,13 @@ static gid_t gr_gidpolicy(struct userconf * cnf, struct cargs * args);
int
pw_group(struct userconf * cnf, int mode, struct cargs * args)
{
+ int rc;
struct carg *a_name = getarg(args, 'n');
struct carg *a_gid = getarg(args, 'g');
struct carg *arg;
struct group *grp = NULL;
int grmembers = 0;
- char **members = NULL;
+ char **members = NULL;
static struct group fakegroup =
{
@@ -116,8 +117,13 @@ pw_group(struct userconf * cnf, int mode, struct cargs * args)
if (mode == M_DELETE) {
gid_t gid = grp->gr_gid;
- if (delgrent(grp) == -1)
- err(EX_IOERR, "error updating group file");
+ rc = delgrent(grp);
+ if (rc == -1)
+ err(EX_IOERR, "group '%s' not available (NIS?)", grp->gr_name);
+ else if (rc != 0) {
+ warnc(rc, "group update");
+ return EX_IOERR;
+ }
pw_log(cnf, mode, W_GROUP, "%s(%ld) removed", a_name->val, (long) gid);
return EXIT_SUCCESS;
} else if (mode == M_PRINT)
@@ -231,8 +237,17 @@ pw_group(struct userconf * cnf, int mode, struct cargs * args)
if (getarg(args, 'N') != NULL)
return print_group(grp, getarg(args, 'P') != NULL);
- if ((mode == M_ADD && !addgrent(grp)) || (mode == M_UPDATE && !chggrent(a_name->val, grp))) {
- warn("group update");
+ if (mode == M_ADD && (rc = addgrent(grp)) != 0) {
+ if (rc == -1)
+ warnx("group '%s' already exists", grp->gr_name);
+ else
+ warn("group update");
+ return EX_IOERR;
+ } else if (mode == M_UPDATE && (rc = chggrent(a_name->val, grp)) != 0) {
+ if (rc == -1)
+ warnx("group '%s' not available (NIS?)", grp->gr_name);
+ else
+ warnc(rc, "group update");
return EX_IOERR;
}
/* grp may have been invalidated */
OpenPOWER on IntegriCloud