summaryrefslogtreecommitdiffstats
path: root/pw
diff options
context:
space:
mode:
Diffstat (limited to 'pw')
-rw-r--r--pw/pw.c17
1 files changed, 16 insertions, 1 deletions
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 <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)
{