summaryrefslogtreecommitdiffstats
path: root/src/slave
diff options
context:
space:
mode:
authorJohn Carr <jfc@mit.edu>1992-02-23 12:29:25 +0000
committerJohn Carr <jfc@mit.edu>1992-02-23 12:29:25 +0000
commite91e2a575a8569512bd6c07a0e1a55e11bca4f6e (patch)
tree145243be6d383c295cd3c48d54e4d087235a92ad /src/slave
parentc97bed3c9de56a87f26ba8b4a66003169e705428 (diff)
downloadkrb5-e91e2a575a8569512bd6c07a0e1a55e11bca4f6e.tar.gz
krb5-e91e2a575a8569512bd6c07a0e1a55e11bca4f6e.tar.xz
krb5-e91e2a575a8569512bd6c07a0e1a55e11bca4f6e.zip
Support POSIX file locking.
Use fstat() instead of stat(). git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@2245 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/slave')
-rw-r--r--src/slave/kprop.c29
1 files changed, 22 insertions, 7 deletions
diff --git a/src/slave/kprop.c b/src/slave/kprop.c
index 70a3f2c09..04472f7c2 100644
--- a/src/slave/kprop.c
+++ b/src/slave/kprop.c
@@ -176,7 +176,7 @@ void get_tickets()
{
char my_host_name[MAXHOSTNAMELEN];
char buf[BUFSIZ];
- char *cp, *strcpy(), *krb_get_phost();
+ char *cp;
struct hostent *hp;
krb5_address **my_addresses;
krb5_error_code retval;
@@ -408,18 +408,33 @@ open_database(data_fn, size)
struct stat stbuf, stbuf_ok;
char *data_ok_fn;
static char ok[] = ".dump_ok";
-
+
if ((fd = open(data_fn, O_RDONLY)) < 0) {
- com_err(progname, 0, "While trying to open %s",
+ com_err(progname, errno, "while trying to open %s",
data_fn);
exit(1);
}
- if (flock(fd, LOCK_SH | LOCK_NB)) {
- com_err(progname, errno, "while trying to flock %s",
- data_fn);
+
+#ifdef POSIX_FILE_LOCKS
+ if (lockf(fd, LOCK_SH | LOCK_NB, 0) < 0) {
+ if (errno == EWOULDBLOCK || errno == EAGAIN)
+ com_err(progname, 0, "database locked");
+ else
+ com_err(progname, errno, "while trying to flock %s",
+ data_fn);
+ exit(1);
+ }
+#else
+ if (flock(fd, LOCK_SH | LOCK_NB) < 0) {
+ if (errno == EWOULDBLOCK || errno == EAGAIN)
+ com_err(progname, 0, "database locked");
+ else
+ com_err(progname, errno, "while trying to flock %s",
+ data_fn);
exit(1);
}
- if (stat(data_fn, &stbuf)) {
+#endif
+ if (fstat(fd, &stbuf)) {
com_err(progname, errno, "while trying to stat %s",
data_fn);
exit(1);