Apply ported patch
authorTom Yu <tlyu@mit.edu>
Wed, 1 Dec 2010 20:49:06 +0000 (20:49 +0000)
committerTom Yu <tlyu@mit.edu>
Wed, 1 Dec 2010 20:49:06 +0000 (20:49 +0000)
 If kdb5_util load (without -update) fails--say, due to an invalid dump
 file--it calls krb5_db_destroy to destroy the temporary DB.
 Unfortunately, this results in the destruction of the real DB instead.

 Luckily, this bug only applies to krb5 1.9, which hasn't been released
 yet.  In krb5 1.8 the destroy operation fails before it does any damage.

ticket: 6815
version_fixed: 1.9

git-svn-id: svn://anonsvn.mit.edu/krb5/branches/krb5-1-9@24548 dc483132-0cff-0310-8789-dd5450dbe970

src/plugins/kdb/db2/kdb_db2.c

index 0a35e3a710e05954f45c5e4a31a4be64aff6d28e..334e5a3a882322bbb8ebd68b0cf0cdf0695b7aa1 100644 (file)
@@ -1206,6 +1206,7 @@ krb5_db2_destroy(krb5_context context, char *conf_section, char **db_args)
 {
     krb5_error_code status = 0;
     krb5_db2_context *db_ctx;
+    char *db_name;
 
     if (k5db2_inited(context)) {
         status = krb5_db2_fini(context);
@@ -1223,7 +1224,12 @@ krb5_db2_destroy(krb5_context context, char *conf_section, char **db_args)
         return status;
 
     db_ctx = context->dal_handle->db_context;
-    return destroy_db(context, db_ctx->db_name);
+    db_name = gen_dbsuffix(db_ctx->db_name, db_ctx->tempdb ? "~" : "");
+    if (db_name == NULL)
+        return ENOMEM;
+    status = destroy_db(context, db_name);
+    free(db_name);
+    return status;
 }
 
 void   *