diff options
Diffstat (limited to 'usr.sbin/pw/pw.c')
-rw-r--r-- | usr.sbin/pw/pw.c | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/usr.sbin/pw/pw.c b/usr.sbin/pw/pw.c index 184f5e2..3dc9276 100644 --- a/usr.sbin/pw/pw.c +++ b/usr.sbin/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 <err.h> +#include <fcntl.h> #include <paths.h> #include <sys/wait.h> @@ -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) { |