X-Git-Url: https://git.cameronkatri.com/pw-darwin.git/blobdiff_plain/955a095f02cda3bf4ac1e3bd760317addf54b19a..1191611aa1bf45ab42f08651b0234155c0e6605b:/libutil/pw_util.c diff --git a/libutil/pw_util.c b/libutil/pw_util.c index 4bf3001..befd1fb 100644 --- a/libutil/pw_util.c +++ b/libutil/pw_util.c @@ -179,11 +179,8 @@ pw_lock(void) for (;;) { struct stat st; - lockfd = open(masterpasswd, O_RDONLY, 0); - if (lockfd < 0 || fcntl(lockfd, F_SETFD, 1) == -1) - err(1, "%s", masterpasswd); - /* XXX vulnerable to race conditions */ - if (flock(lockfd, LOCK_EX|LOCK_NB) == -1) { + lockfd = flopen(masterpasswd, O_RDONLY|O_NONBLOCK|O_CLOEXEC, 0); + if (lockfd == -1) { if (errno == EWOULDBLOCK) { errx(1, "the password db file is busy"); } else {