summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMark Eichin <eichin@mit.edu>1994-11-18 00:27:10 +0000
committerMark Eichin <eichin@mit.edu>1994-11-18 00:27:10 +0000
commit729cddb254f24bf289084e0a7fc71980a35a91bd (patch)
treed0e3c80f03a522b833d93a8bb24a5231362fc720 /src
parent8513f430766e651134f0b651000185f48622635f (diff)
downloadkrb5-729cddb254f24bf289084e0a7fc71980a35a91bd.tar.gz
krb5-729cddb254f24bf289084e0a7fc71980a35a91bd.tar.xz
krb5-729cddb254f24bf289084e0a7fc71980a35a91bd.zip
* kdb_dbm.c (krb5_dbm_db_unlock): Use krb5_lock_file.
(krb5_dbm_db_lock): Same. (Changes from jtkohl@mit.edu.) the rest of [txn 497]. git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@4674 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src')
-rw-r--r--src/lib/kdb/ChangeLog5
-rw-r--r--src/lib/kdb/kdb_dbm.c83
2 files changed, 30 insertions, 58 deletions
diff --git a/src/lib/kdb/ChangeLog b/src/lib/kdb/ChangeLog
index a5b1d7dfe..4b5cb2aa0 100644
--- a/src/lib/kdb/ChangeLog
+++ b/src/lib/kdb/ChangeLog
@@ -1,3 +1,8 @@
+Thu Nov 17 19:22:16 1994 Mark Eichin (eichin@cygnus.com)
+
+ * kdb_dbm.c (krb5_dbm_db_unlock): Use krb5_lock_file.
+ (krb5_dbm_db_lock): Same. (Changes from jtkohl@mit.edu.)
+
Thu Nov 10 17:20:42 1994 Theodore Y. Ts'o (tytso@dcl)
* decrypt_key.c (krb5_kdb_decrypt_key): Set the keyblock's magic
diff --git a/src/lib/kdb/kdb_dbm.c b/src/lib/kdb/kdb_dbm.c
index ab836e41f..43be0ea6e 100644
--- a/src/lib/kdb/kdb_dbm.c
+++ b/src/lib/kdb/kdb_dbm.c
@@ -32,16 +32,13 @@
#include <krb5/kdb_dbm.h>
#include <krb5/ext-proto.h>
#include <krb5/sysincl.h>
+#include <krb5/libos.h>
#include <stdio.h>
#include <errno.h>
#include <sys/types.h>
#include <utime.h>
#include <krb5/config.h>
-#ifdef POSIX_FILE_LOCKS
-#include <fcntl.h>
-#endif
-
#define OLD_COMPAT_VERSION_1
#ifdef OLD_COMPAT_VERSION_1
@@ -60,7 +57,8 @@ extern long krb5_dbm_db_debug;
extern char *progname;
#endif
-static int dblfd = -1;
+static FILE *dblfp = 0;
+static char *dblfname = 0;
static int mylock = 0;
static int lockmode = 0;
static int inited = 0;
@@ -190,24 +188,22 @@ krb5_dbm_db_init()
filename = gen_dbsuffix (current_db_name, ".ok");
if (!filename)
return ENOMEM;
-#ifdef POSIX_FILE_LOCKS
/*
- * needs be open read/write so that write locking can work with
+ * should be open read/write so that write locking can work with
* POSIX systems
*/
- if ((dblfd = open(filename, O_RDWR, 0)) == -1) {
+ dblfp = fopen(filename, "r+");
+ if ((dblfp = fopen(filename, "r+")) == 0) {
if (errno == EACCES) {
- if ((dblfd = open(filename, O_RDONLY, 0)) == -1)
+ if ((dblfp = fopen(filename, "r")) == 0)
goto err_out;
} else
goto err_out;
}
-#else
- if ((dblfd = open(filename, 0, 0)) == -1)
- goto err_out;
-#endif
inited++;
+ dblfname = filename;
errno = 0;
+ return 0;
err_out:
free(filename);
@@ -235,11 +231,13 @@ krb5_dbm_db_fini()
current_db_ptr = 0;
}
- if (close(dblfd) == -1)
+ if (fclose(dblfp) == EOF)
retval = errno;
else
retval = 0;
- dblfd = -1;
+ dblfp = 0;
+ free(dblfname);
+ dblfname = 0;
inited = 0;
mylock = 0;
return retval;
@@ -831,52 +829,32 @@ krb5_error_code
krb5_dbm_db_lock(mode)
int mode;
{
-#ifdef POSIX_FILE_LOCKS
- struct flock fl;
-#else
- int flock_mode;
-#endif
+ int krb5_lock_mode;
+ int error;
if (mylock && (lockmode >= mode)) {
mylock++; /* No need to upgrade lock, just return */
return(0);
}
-#ifdef POSIX_FILE_LOCKS
- if (mode == KRB5_DBM_EXCLUSIVE)
- fl.l_type = F_WRLCK;
- else if (mode == KRB5_DBM_SHARED)
- fl.l_type = F_RDLCK;
- else
- return KRB5_KDB_BADLOCKMODE;
- fl.l_whence = 0;
- fl.l_start = 0;
- fl.l_len = 0;
- if (fcntl(dblfd, non_blocking ? F_SETLK : F_SETLKW, &fl) == -1) {
- if (errno == EBADF && mode == KRB5_DBM_EXCLUSIVE) {
- /* tried to exclusive-lock something we don't have write access
- to. */
- return KRB5_KDB_CANTLOCK_DB;
- }
- return errno;
- }
-#else
switch (mode) {
case KRB5_DBM_EXCLUSIVE:
- flock_mode = LOCK_EX;
+ krb5_lock_mode = KRB5_LOCKMODE_EXCLUSIVE;
break;
case KRB5_DBM_SHARED:
- flock_mode = LOCK_SH;
+ krb5_lock_mode = KRB5_LOCKMODE_SHARED;
break;
default:
return KRB5_KDB_BADLOCKMODE;
}
- lockmode = mode;
if (non_blocking)
- flock_mode |= LOCK_NB;
+ flock_mode |= KRB5_LOCKMODE_DONTBLOCK;
- if (flock(dblfd, flock_mode) < 0)
- return errno;
-#endif
+ error = krb5_lock_file(dblfp, dblfname, krb5_lock_mode);
+
+ if (error == EBADF && mode == KRB5_DBM_EXCLUSIVE)
+ return KRB5_KDB_CANTLOCK_DB;
+ if (error)
+ return error;
mylock++;
return 0;
}
@@ -888,18 +866,7 @@ krb5_dbm_db_unlock()
return KRB5_KDB_NOTLOCKED;
if (--mylock == 0) {
-#ifdef POSIX_FILE_LOCKS
- struct flock fl;
- fl.l_type = F_UNLCK;
- fl.l_whence = 0;
- fl.l_start = 0;
- fl.l_len = 0;
- if (fcntl(dblfd, F_SETLK, &fl) == -1)
- return errno;
-#else
- if (flock(dblfd, LOCK_UN) < 0)
- return errno;
-#endif
+ return krb5_lock_file(dblfp, dblfname, KRB5_LOCKMODE_UNLOCK);
}
return 0;
}