Use an MD5 checksum to test for file changes; the previous method
of using file mtimes could result in chpasss(1) erroneously detecting that no changes were made for non-interactive edits. PR: 4238 Reported by: Jens Schweikhardt <schweikh@noc.dfn.de> Submitted by: Daniel Hagan <dhagan@cs.vt.edu>
This commit is contained in:
parent
a365f1d25a
commit
0875731adb
@ -27,8 +27,8 @@ COPTS+= -DYP -I. -I${.CURDIR}/../../libexec/ypxfr \
|
||||
#Some people need this, uncomment to activate
|
||||
#COPTS+= -DRESTRICT_FULLNAME_CHANGE
|
||||
|
||||
DPADD= ${LIBRPCSVC} ${LIBCRYPT}
|
||||
LDADD+= -lrpcsvc -lcrypt
|
||||
DPADD= ${LIBRPCSVC} ${LIBCRYPT} ${LIBMD}
|
||||
LDADD+= -lrpcsvc -lcrypt -lmd
|
||||
|
||||
CLEANFILES= ${GENSRCS}
|
||||
|
||||
|
@ -43,6 +43,7 @@ static const char sccsid[] = "@(#)edit.c 8.3 (Berkeley) 4/2/94";
|
||||
#include <ctype.h>
|
||||
#include <err.h>
|
||||
#include <errno.h>
|
||||
#include <md5.h>
|
||||
#include <paths.h>
|
||||
#include <pwd.h>
|
||||
#include <stdio.h>
|
||||
@ -65,17 +66,23 @@ edit(pw)
|
||||
struct passwd *pw;
|
||||
{
|
||||
struct stat begin, end;
|
||||
char *begin_sum, *end_sum;
|
||||
|
||||
for (;;) {
|
||||
if (stat(tempname, &begin))
|
||||
pw_error(tempname, 1, 1);
|
||||
begin_sum = MD5File(tempname, (char *)NULL);
|
||||
pw_edit(1);
|
||||
if (stat(tempname, &end))
|
||||
pw_error(tempname, 1, 1);
|
||||
if (begin.st_mtime == end.st_mtime) {
|
||||
end_sum = MD5File(tempname, (char *)NULL);
|
||||
if ((begin.st_mtime == end.st_mtime) &&
|
||||
(strcmp(begin_sum, end_sum) == 0)) {
|
||||
warnx("no changes made");
|
||||
pw_error(NULL, 0, 0);
|
||||
}
|
||||
free(begin_sum);
|
||||
free(end_sum);
|
||||
if (verify(pw))
|
||||
break;
|
||||
pw_prompt();
|
||||
|
Loading…
Reference in New Issue
Block a user