diff options
author | David Nugent <davidn@FreeBSD.org> | 1997-01-05 07:15:37 +0000 |
---|---|---|
committer | David Nugent <davidn@FreeBSD.org> | 1997-01-05 07:15:37 +0000 |
commit | 3f5e90cd330e96e54e53d75397bb6bef56153218 (patch) | |
tree | a3695319f1002ddb2670e9ddeb2b2bdd63d09e3a /pw/pw_user.c | |
parent | 9267b33e5ec61946f68b0c8333bca3bceb33385c (diff) | |
download | pw-darwin-3f5e90cd330e96e54e53d75397bb6bef56153218.tar.gz pw-darwin-3f5e90cd330e96e54e53d75397bb6bef56153218.tar.zst pw-darwin-3f5e90cd330e96e54e53d75397bb6bef56153218.zip |
Adds optional NIS passwd file updating and optionally rebuilding
NIS maps.
Suggested by: Peter Wemm
Diffstat (limited to 'pw/pw_user.c')
-rw-r--r-- | pw/pw_user.c | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/pw/pw_user.c b/pw/pw_user.c index 14b618f..9f95fee 100644 --- a/pw/pw_user.c +++ b/pw/pw_user.c @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: pw_user.c,v 1.10 1996/12/30 11:52:34 davidn Exp $ + * $Id: pw_user.c,v 1.11 1997/01/03 04:42:18 davidn Exp $ */ #include <unistd.h> @@ -87,6 +87,7 @@ static void rmskey(char const * name); int pw_user(struct userconf * cnf, int mode, struct cargs * args) { + int r, r1; char *p = NULL; struct carg *a_name; struct carg *a_uid; @@ -191,6 +192,9 @@ pw_user(struct userconf * cnf, int mode, struct cargs * args) if ((arg = getarg(args, 'e')) != NULL) cnf->expire_days = atoi(arg->val); + if ((arg = getarg(args, 'y')) != NULL) + cnf->nispasswd = arg->val; + if ((arg = getarg(args, 'p')) != NULL && arg->val) cnf->password_days = atoi(arg->val); @@ -332,6 +336,10 @@ pw_user(struct userconf * cnf, int mode, struct cargs * args) if (!delpwent(pwd)) cmderr(EX_IOERR, "Error updating passwd file: %s\n", strerror(errno)); + + if (cnf->nispasswd && *cnf->nispasswd=='/' && !delnispwent(cnf->nispasswd, a_name->val)) + perror("WARNING: NIS passwd update"); + editgroups(a_name->val, NULL); pw_log(cnf, mode, W_USER, "%s(%ld) account removed", a_name->val, (long) uid); @@ -498,11 +506,25 @@ pw_user(struct userconf * cnf, int mode, struct cargs * args) if (getarg(args, 'N') != NULL) return print_user(pwd, getarg(args, 'P') != NULL); - if ((mode == M_ADD && !addpwent(pwd)) || - (mode == M_UPDATE && !chgpwent(a_name->val, pwd))) { + r = r1 = 1; + if (mode == M_ADD) { + r = addpwent(pwd); + if (r && cnf->nispasswd && *cnf->nispasswd=='/') + r1 = addnispwent(cnf->nispasswd, pwd); + } else if (mode == M_UPDATE) { + r = chgpwent(a_name->val, pwd); + if (r && cnf->nispasswd && *cnf->nispasswd=='/') + r1 = chgnispwent(cnf->nispasswd, a_name->val, pwd); + } + + if (!r) { perror("password update"); return EX_IOERR; + } else if (!r1) { + perror("WARNING: NIS password update"); + /* Keep on trucking */ } + /* * Ok, user is created or changed - now edit group file */ |