* dump.c (load_db): lock the database directly (having fixed the
authorMark Eichin <eichin@mit.edu>
Wed, 13 Nov 1996 05:21:16 +0000 (05:21 +0000)
committerMark Eichin <eichin@mit.edu>
Wed, 13 Nov 1996 05:21:16 +0000 (05:21 +0000)
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
src/kadmin/dbutil/dump.c

index 4d529ed548a5c66635a40b9b1e2bd50043126631..4d29322d9edba998ded08ff7d8d57fe814314e20 100644 (file)
@@ -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
index 64522f6c9684dd13ec525ed204ccca38248dcebb..4289cd7d602a9275983d94f992f907ce1a19e5bb 100644 (file)
@@ -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));