diff options
| author | Mark Eichin <eichin@mit.edu> | 1996-11-13 05:21:16 +0000 |
|---|---|---|
| committer | Mark Eichin <eichin@mit.edu> | 1996-11-13 05:21:16 +0000 |
| commit | 5de80315012cb77807cb8e4c86602cddf2a0f86f (patch) | |
| tree | 9bb6ac4052af6ebfaaa321dc28579b5698d8194d | |
| parent | 31610f32e317e8b61123212c7d879a2b3abb0460 (diff) | |
| download | krb5-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/ChangeLog | 5 | ||||
| -rw-r--r-- | src/kadmin/dbutil/dump.c | 20 |
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)); |
