Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 11 Jul 2002 12:50:12 -0700
From:      "Crist J. Clark" <crist.clark@attbi.com>
To:        Doug Barton <dougb@FreeBSD.org>
Cc:        freebsd-bugs@FreeBSD.org
Subject:   Re: bin/39919: chpass no longer edits existing entries
Message-ID:  <20020711195012.GD40486@blossom.cjclark.org>
In-Reply-To: <200207062016.g66KGZhN050936@freefall.freebsd.org>
References:  <200207062016.g66KGZhN050936@freefall.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
How does this patch look?

Index: chpass.c
===================================================================
RCS file: /export/freebsd/ncvs/src/usr.bin/chpass/chpass.c,v
retrieving revision 1.16.2.2
diff -u -r1.16.2.2 chpass.c
--- chpass.c	24 Mar 2002 09:00:03 -0000	1.16.2.2
+++ chpass.c	11 Jul 2002 19:45:28 -0000
@@ -40,7 +40,7 @@
 #ifndef lint
 static const char sccsid[] = "From: @(#)chpass.c	8.4 (Berkeley) 4/2/94";
 static const char rcsid[] =
-  "$FreeBSD: src/usr.bin/chpass/chpass.c,v 1.16.2.2 2002/03/24 09:00:03 cjc Exp $";
+  "$FreeBSD: src/usr.bin/chpass/chpass.c,v 1.16.2.2 2002/03/24 05:35:51 cjc Exp $";
 #endif /* not lint */
 
 #include <sys/param.h>
@@ -83,7 +83,7 @@
 	char **argv;
 {
 	enum { NEWSH, LOADENTRY, EDITENTRY, NEWPW, NEWEXP } op;
-	struct passwd *pw = NULL, lpw, old_pw;
+	struct passwd *pw = NULL, lpw, old_pw, *pold_pw;
 	char *username = NULL;
 	int ch, pfd, tfd;
 	char *arg = NULL;
@@ -190,6 +190,7 @@
 		/* Make a copy for later verification */
 		old_pw = *pw;
 		old_pw.pw_gecos = strdup(old_pw.pw_gecos);
+		pold_pw = &old_pw;
 	}
 
 	if (op == NEWSH) {
@@ -213,6 +214,10 @@
 		pw = &lpw;
 		if (!pw_scan(arg, pw))
 			exit(1);
+		if ((pold_pw = getpwnam(pw->pw_name)) != NULL) {
+			old_pw = *pold_pw;
+			old_pw.pw_gecos = strdup(old_pw.pw_gecos);
+		}
 	}
 	username = pw->pw_name;
 
@@ -268,7 +273,7 @@
 	} else {
 #endif /* YP */
 	pfd = pw_lock();
-	pw_copy(pfd, tfd, pw, &old_pw);
+	pw_copy(pfd, tfd, pw, pold_pw);
 
 	if (!pw_mkdb(username))
 		pw_error((char *)NULL, 0, 1);

-- 
Crist J. Clark                     |     cjclark@alum.mit.edu
                                   |     cjclark@jhu.edu
http://people.freebsd.org/~cjc/    |     cjc@freebsd.org

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020711195012.GD40486>