diff options
author | David Nugent <davidn@FreeBSD.org> | 1999-10-26 04:27:14 +0000 |
---|---|---|
committer | David Nugent <davidn@FreeBSD.org> | 1999-10-26 04:27:14 +0000 |
commit | a1f21c386dbe541a822f224ae7bdedc71ed3ec70 (patch) | |
tree | d014ed41896e364c56fd8b48ffe4aedbf76acf52 /pw/pw_group.c | |
parent | 94dc05fe8b863b3148807bd3c0c9ae4b5a216c39 (diff) | |
download | pw-darwin-a1f21c386dbe541a822f224ae7bdedc71ed3ec70.tar.gz pw-darwin-a1f21c386dbe541a822f224ae7bdedc71ed3ec70.tar.zst pw-darwin-a1f21c386dbe541a822f224ae7bdedc71ed3ec70.zip |
Clean up error handling in fileupdate(), which now returns 0 on success
instead of a boolean. This replicated through he front-end sub-functions
relating to add, delete, modify entries in passwd & group files
Errno is now preserved so output of errc()/warnc() will be less obfuscated
by subsequent errors when reporting the problem.
Add more intelligent error handling when attempting to modify/delete NIS
entries with no corresponding local database entry.
[MFC to stable in a couple of weeks to keep both in sync]
Diffstat (limited to 'pw/pw_group.c')
-rw-r--r-- | pw/pw_group.c | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/pw/pw_group.c b/pw/pw_group.c index 3385752..54125d8 100644 --- a/pw/pw_group.c +++ b/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 */ |