From 79722705d4a9a042b75ce7f3045746de143af1ba Mon Sep 17 00:00:00 2001 From: Nate Williams Date: Tue, 4 Aug 1998 22:31:26 +0000 Subject: - On second thought, attempt to get the read-only lock, but don't consider it a exit failure if it doesn't work. This means that root processes can safely get the lock, but normal processes can still use the 'pw' utility to get information (which may change out from under them.) --- pw/pw.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'pw') diff --git a/pw/pw.c b/pw/pw.c index 184f5e2..3dc9276 100644 --- a/pw/pw.c +++ b/pw/pw.c @@ -26,11 +26,12 @@ #ifndef lint static const char rcsid[] = - "$Id: pw.c,v 1.7 1997/10/10 06:23:34 charnier Exp $"; + "$Id: pw.c,v 1.8 1998/07/16 17:18:25 nate Exp $"; #endif /* not lint */ #include "pw.h" #include +#include #include #include @@ -49,6 +50,7 @@ static struct cargs arglist; static int getindex(const char *words[], const char *word); static void cmdhelp(int mode, int which); +static void filelock(const char *filename); int @@ -147,6 +149,13 @@ main(int argc, char *argv[]) * Now, let's do the common initialisation */ cnf = read_userconfig(getarg(&arglist, 'C') ? getarg(&arglist, 'C')->val : NULL); + + /* + * Try to lock the master passowrd and group files right away (we + * don't care if it works, since this is just advisory locking. + */ + filelock(_PATH_GROUP); + filelock(_PATH_MASTERPASSWD); ch = funcs[which] (cnf, mode, &arglist); /* @@ -177,6 +186,12 @@ main(int argc, char *argv[]) return ch; } +static void +filelock(const char *filename) +{ + open(filename, O_RDONLY | O_EXLOCK, 0); +} + static int getindex(const char *words[], const char *word) { -- cgit v1.2.3-56-ge451