summaryrefslogtreecommitdiffstats
path: root/lib/libutil/pw_util.c
diff options
context:
space:
mode:
authorn_hibma <n_hibma@FreeBSD.org>2002-06-23 19:23:46 +0000
committern_hibma <n_hibma@FreeBSD.org>2002-06-23 19:23:46 +0000
commite8868912ebc0f9a4fc346f88d3a4a2315e9c341a (patch)
treed4f3dad50318a48b583be18687183dee9edd5bdf /lib/libutil/pw_util.c
parent383e92b79afec1037da724af750d9cf1074aa34b (diff)
downloadFreeBSD-src-e8868912ebc0f9a4fc346f88d3a4a2315e9c341a.zip
FreeBSD-src-e8868912ebc0f9a4fc346f88d3a4a2315e9c341a.tar.gz
Be more clear in error messages.
Distinguish between a held lock and a failed lock op. If rpc.lockd is not running on a diskless client this makes clearer what the problem is.
Diffstat (limited to 'lib/libutil/pw_util.c')
-rw-r--r--lib/libutil/pw_util.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/lib/libutil/pw_util.c b/lib/libutil/pw_util.c
index 72c47230..444140d 100644
--- a/lib/libutil/pw_util.c
+++ b/lib/libutil/pw_util.c
@@ -185,16 +185,21 @@ pw_lock(void)
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))
- errx(1, "the password db file is busy");
+ if (flock(lockfd, LOCK_EX|LOCK_NB) == -1) {
+ if (errno == EWOULDBLOCK) {
+ errx(1, "the password db file is busy");
+ } else {
+ err(1, "could not lock the passwd file: ");
+ }
+ }
/*
* If the password file was replaced while we were trying to
* get the lock, our hardlink count will be 0 and we have to
* close and retry.
*/
- if (fstat(lockfd, &st) < 0)
- errx(1, "fstat() failed");
+ if (fstat(lockfd, &st) == -1)
+ err(1, "fstat() failed: ");
if (st.st_nlink != 0)
break;
close(lockfd);
OpenPOWER on IntegriCloud