From 5de80315012cb77807cb8e4c86602cddf2a0f86f Mon Sep 17 00:00:00 2001 From: Mark Eichin Date: Wed, 13 Nov 1996 05:21:16 +0000 Subject: [PATCH] * 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 --- src/kadmin/dbutil/ChangeLog | 5 +++++ src/kadmin/dbutil/dump.c | 20 ++++++++++++++++++++ 2 files changed, 25 insertions(+) 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 + + * 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 * 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)); -- 2.26.2