=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/passwd/local_passwd.c,v retrieving revision 1.31 retrieving revision 1.32 diff -c -r1.31 -r1.32 *** src/usr.bin/passwd/local_passwd.c 2004/03/10 21:23:17 1.31 --- src/usr.bin/passwd/local_passwd.c 2004/04/20 23:21:23 1.32 *************** *** 1,4 **** ! /* $OpenBSD: local_passwd.c,v 1.31 2004/03/10 21:23:17 millert Exp $ */ /*- * Copyright (c) 1990 The Regents of the University of California. --- 1,4 ---- ! /* $OpenBSD: local_passwd.c,v 1.32 2004/04/20 23:21:23 millert Exp $ */ /*- * Copyright (c) 1990 The Regents of the University of California. *************** *** 31,37 **** #ifndef lint /*static const char sccsid[] = "from: @(#)local_passwd.c 5.5 (Berkeley) 5/6/91";*/ ! static const char rcsid[] = "$OpenBSD: local_passwd.c,v 1.31 2004/03/10 21:23:17 millert Exp $"; #endif /* not lint */ #include --- 31,37 ---- #ifndef lint /*static const char sccsid[] = "from: @(#)local_passwd.c 5.5 (Berkeley) 5/6/91";*/ ! static const char rcsid[] = "$OpenBSD: local_passwd.c,v 1.32 2004/04/20 23:21:23 millert Exp $"; #endif /* not lint */ #include *************** *** 63,69 **** int local_passwd(char *uname, int authenticated) { ! struct passwd *pw; login_cap_t *lc; sigset_t fullset; time_t period; --- 63,69 ---- int local_passwd(char *uname, int authenticated) { ! struct passwd *pw, *opw; login_cap_t *lc; sigset_t fullset; time_t period; *************** *** 78,83 **** --- 78,87 ---- warnx("unknown user %s.", uname); return(1); } + if ((opw = pw_dup(pw)) == NULL) { + warn(NULL); + return(1); + } if ((lc = login_getclass(pw->pw_class)) == NULL) { warnx("unable to get login class for user %s.", uname); return(1); *************** *** 133,139 **** pw_error(_PATH_MASTERPASSWD, 1, 1); /* Update master.passwd file and rebuild spwd.db. */ ! pw_copy(pfd, tfd, pw); if (pw_mkdb(uname, pwflags) < 0) pw_error(NULL, 0, 1); --- 137,144 ---- pw_error(_PATH_MASTERPASSWD, 1, 1); /* Update master.passwd file and rebuild spwd.db. */ ! pw_copy(pfd, tfd, pw, opw); ! free(opw); if (pw_mkdb(uname, pwflags) < 0) pw_error(NULL, 0, 1);