summaryrefslogtreecommitdiffstats
path: root/libutil/pw_util.c
diff options
context:
space:
mode:
authorNeel Natu <neel@FreeBSD.org>2013-01-04 19:28:32 +0000
committerNeel Natu <neel@FreeBSD.org>2013-01-04 19:28:32 +0000
commit6b4a28cbfbcb70df6b5b671d9d08cadfa0337c19 (patch)
treeb8509f5b136de37e7d1230bab2e3818ea997cfb9 /libutil/pw_util.c
parent1af8005a676fd422a362171657eb20e2c6659764 (diff)
parent8f1370df706a16668cc3a3f9be05d8af396c365c (diff)
downloadpw-darwin-6b4a28cbfbcb70df6b5b671d9d08cadfa0337c19.tar.gz
pw-darwin-6b4a28cbfbcb70df6b5b671d9d08cadfa0337c19.zip
IFC @ r244983.
Diffstat (limited to 'libutil/pw_util.c')
-rw-r--r--libutil/pw_util.c7
1 files changed, 2 insertions, 5 deletions
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 {