Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 21 Mar 1995 21:52:13 +1000
From:      Bruce Evans <bde@zeta.org.au>
To:        hackers@FreeBSD.org, luigi@labinfo.iet.unipi.it
Subject:   Re: vipw feature (and fix)
Message-ID:  <199503211152.VAA14006@godzilla.zeta.org.au>

next in thread | raw e-mail | index | archive | help
>was actually changed. I thought it was me, but look at this fragment
>of vipw.c where the check is made for changes to the password
>file...

>        ...
>	if (stat(tempname, &begin))
>		pw_error(tempname, 1, 1);
>	pw_edit(0);  
>	if (stat(tempname, &end))
>		pw_error(tempname, 1, 1);
>	if (begin.st_mtime == end.st_mtime) {
>		warnx("no changes made");
>		pw_error((char *)NULL, 0, 0);
>	}
>	...

>so, if the changes to the password file are done faster than the st_mtime
>resolution (is that one second ?), then no changes are assumed.

>A better way would be needed for the check. On 2.1 the stat structure
>actually uses "struct timespec" for the times. I propose to modify line
>95 of vipw.c from

>		if (begin.st_mtime == end.st_mtime) {

>to
>		if (begin.st_mtimespec == end.st_mtimespec) {

This wouldn't help if the file system is the current or older ufs.  The
nanonseconds field is always 0.

The problem could be fixed by adding `sleep(1)' before calling pw_edit()
(assuming sleep(1) is guaranteed to take >= 1 second).

Bruce



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