summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Eichin <eichin@mit.edu>1996-11-13 05:21:16 +0000
committerMark Eichin <eichin@mit.edu>1996-11-13 05:21:16 +0000
commit5de80315012cb77807cb8e4c86602cddf2a0f86f (patch)
tree9bb6ac4052af6ebfaaa321dc28579b5698d8194d
parent31610f32e317e8b61123212c7d879a2b3abb0460 (diff)
downloadkrb5-5de80315012cb77807cb8e4c86602cddf2a0f86f.tar.gz
krb5-5de80315012cb77807cb8e4c86602cddf2a0f86f.tar.xz
krb5-5de80315012cb77807cb8e4c86602cddf2a0f86f.zip
* dump.c (load_db): lock the database directly (having fixed the
lock/unlock code) to avoid reopening on every record. git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@9401 dc483132-0cff-0310-8789-dd5450dbe970
-rw-r--r--src/kadmin/dbutil/ChangeLog5
-rw-r--r--src/kadmin/dbutil/dump.c20
2 files changed, 25 insertions, 0 deletions
diff --git a/src/kadmin/dbutil/ChangeLog b/src/kadmin/dbutil/ChangeLog
index 4d529ed54..4d29322d9 100644
--- a/src/kadmin/dbutil/ChangeLog
+++ b/src/kadmin/dbutil/ChangeLog
@@ -1,3 +1,8 @@
+Wed Nov 13 00:06:40 1996 Mark Eichin <eichin@cygnus.com>
+
+ * dump.c (load_db): lock the database directly (having fixed the
+ lock/unlock code) to avoid reopening on every record.
+
Mon Nov 11 16:50:25 1996 Mark Eichin <eichin@cygnus.com>
* kadmin/dbutil dumpv4 expiration ("never") fixes
diff --git a/src/kadmin/dbutil/dump.c b/src/kadmin/dbutil/dump.c
index 64522f6c9..4289cd7d6 100644
--- a/src/kadmin/dbutil/dump.c
+++ b/src/kadmin/dbutil/dump.c
@@ -196,8 +196,10 @@ static const char stdin_name[] = "standard input";
static const char restfail_fmt[] = "%s: %s restore failed\n";
static const char close_err_fmt[] = "%s: cannot close database (%s)\n";
static const char dbinit_err_fmt[] = "%s: cannot initialize database (%s)\n";
+static const char dblock_err_fmt[] = "%s: cannot initialize database lock (%s)\n";
static const char dbname_err_fmt[] = "%s: cannot set database name to %s (%s)\n";
static const char dbdelerr_fmt[] = "%s: cannot delete bad database %s (%s)\n";
+static const char dbunlockerr_fmt[] = "%s: cannot unlock database %s (%s)\n";
static const char dbrenerr_fmt[] = "%s: cannot rename database %s to %s (%s)\n";
static const char dbcreaterr_fmt[] = "%s: cannot create database %s (%s)\n";
static const char dfile_err_fmt[] = "%s: cannot open %s (%s)\n";
@@ -2088,6 +2090,18 @@ load_db(argc, argv)
exit_status++;
goto error;
}
+ /*
+ * grab an extra lock, since there are no other users
+ */
+ if (!update) {
+ kret = krb5_db_lock(kcontext, KRB5_LOCKMODE_EXCLUSIVE);
+ if (kret) {
+ fprintf(stderr, dblock_err_fmt,
+ programname, error_message(kret));
+ exit_status++;
+ goto error;
+ }
+ }
if (restore_dump(programname, kcontext, (dumpfile) ? dumpfile : stdin_name,
f, verbose, load, tmppol_db)) {
@@ -2096,6 +2110,12 @@ load_db(argc, argv)
exit_status++;
}
+ if (!update && (kret = krb5_db_unlock(kcontext))) {
+ /* change this error? */
+ fprintf(stderr, dbunlockerr_fmt,
+ programname, dbname_tmp, error_message(kret));
+ exit_status++;
+ }
if (kret = krb5_db_fini(kcontext)) {
fprintf(stderr, close_err_fmt,
programname, error_message(kret));