summaryrefslogtreecommitdiffstats
path: root/usr.sbin/pw/fileupd.c
diff options
context:
space:
mode:
authordavidn <davidn@FreeBSD.org>1999-02-23 07:15:11 +0000
committerdavidn <davidn@FreeBSD.org>1999-02-23 07:15:11 +0000
commitaea1f6bc3cb4963dbd48dcd9f051919520f70f2b (patch)
treeb3bd7501edb165799eda61bf2ac5d8202c789a5d /usr.sbin/pw/fileupd.c
parentf6416f79a6b9a2eb5c485e8af421d3d570a95d25 (diff)
downloadFreeBSD-src-aea1f6bc3cb4963dbd48dcd9f051919520f70f2b.zip
FreeBSD-src-aea1f6bc3cb4963dbd48dcd9f051919520f70f2b.tar.gz
1) Do not blindly ignore file update errors which may occur due to concurrent
updating 2) Add -V <etcdir>, which allows maintaining user/group database in alternate locations other than /etc.
Diffstat (limited to 'usr.sbin/pw/fileupd.c')
-rw-r--r--usr.sbin/pw/fileupd.c15
1 files changed, 5 insertions, 10 deletions
diff --git a/usr.sbin/pw/fileupd.c b/usr.sbin/pw/fileupd.c
index fe46480..d76259b 100644
--- a/usr.sbin/pw/fileupd.c
+++ b/usr.sbin/pw/fileupd.c
@@ -26,7 +26,7 @@
#ifndef lint
static const char rcsid[] =
- "$Id: fileupd.c,v 1.5 1997/10/10 06:23:31 charnier Exp $";
+ "$Id: fileupd.c,v 1.6 1998/07/16 17:18:24 nate Exp $";
#endif /* not lint */
#include <stdio.h>
@@ -175,16 +175,11 @@ fileupdate(char const * filename, mode_t fmode, char const * newline, char const
* corrupted the original file
* Unfortunately, it will lose the inode
* and hence the lock.
- *
- * The implications of this is that this invocation of pw
- * won't have the file locked and concurrent copies
- * of pw, vipw etc could clobber what this one is doing.
- *
- * It should probably just return an error instead
- * of going on like nothing is wrong.
*/
- if (fflush(infp) == EOF || ferror(infp))
- rc = rename(file, filename) == 0;
+ if (fflush(infp) == EOF || ferror(infp)) {
+ rc = errno; /* Preserve errno for return */
+ rename(file, filename);
+ }
else
ftruncate(infd, ftell(infp));
}
OpenPOWER on IntegriCloud