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
96e88366a2
commit
b9efeafc84
@ -27,8 +27,8 @@ COPTS+= -DYP -I. -I${.CURDIR}/../../libexec/ypxfr \
|
|||||||
#Some people need this, uncomment to activate
|
#Some people need this, uncomment to activate
|
||||||
#COPTS+= -DRESTRICT_FULLNAME_CHANGE
|
#COPTS+= -DRESTRICT_FULLNAME_CHANGE
|
||||||
|
|
||||||
DPADD= ${LIBRPCSVC} ${LIBCRYPT}
|
DPADD= ${LIBRPCSVC} ${LIBCRYPT} ${LIBMD}
|
||||||
LDADD+= -lrpcsvc -lcrypt
|
LDADD+= -lrpcsvc -lcrypt -lmd
|
||||||
|
|
||||||
CLEANFILES= ${GENSRCS}
|
CLEANFILES= ${GENSRCS}
|
||||||
|
|
||||||
|
@ -43,6 +43,7 @@ static const char sccsid[] = "@(#)edit.c 8.3 (Berkeley) 4/2/94";
|
|||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <err.h>
|
#include <err.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
#include <md5.h>
|
||||||
#include <paths.h>
|
#include <paths.h>
|
||||||
#include <pwd.h>
|
#include <pwd.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@ -65,17 +66,23 @@ edit(pw)
|
|||||||
struct passwd *pw;
|
struct passwd *pw;
|
||||||
{
|
{
|
||||||
struct stat begin, end;
|
struct stat begin, end;
|
||||||
|
char *begin_sum, *end_sum;
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
if (stat(tempname, &begin))
|
if (stat(tempname, &begin))
|
||||||
pw_error(tempname, 1, 1);
|
pw_error(tempname, 1, 1);
|
||||||
|
begin_sum = MD5File(tempname, (char *)NULL);
|
||||||
pw_edit(1);
|
pw_edit(1);
|
||||||
if (stat(tempname, &end))
|
if (stat(tempname, &end))
|
||||||
pw_error(tempname, 1, 1);
|
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");
|
warnx("no changes made");
|
||||||
pw_error(NULL, 0, 0);
|
pw_error(NULL, 0, 0);
|
||||||
}
|
}
|
||||||
|
free(begin_sum);
|
||||||
|
free(end_sum);
|
||||||
if (verify(pw))
|
if (verify(pw))
|
||||||
break;
|
break;
|
||||||
pw_prompt();
|
pw_prompt();
|
||||||
|
Loading…
Reference in New Issue
Block a user