aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/kdb/db2/kdb_db2.c
diff options
context:
space:
mode:
authorKen Raeburn <raeburn@mit.edu>2007-01-08 22:41:01 +0000
committerKen Raeburn <raeburn@mit.edu>2007-01-08 22:41:01 +0000
commit58c8b838040557cba501f6b6e7bd585f18c0f3cc (patch)
tree5951e632cb3004062f6b6ed2abf65f46a9477c5b /src/plugins/kdb/db2/kdb_db2.c
parentb0d429bc871cd63508341010fed24689a9caa460 (diff)
downloadkrb5-58c8b838040557cba501f6b6e7bd585f18c0f3cc.zip
krb5-58c8b838040557cba501f6b6e7bd585f18c0f3cc.tar.gz
krb5-58c8b838040557cba501f6b6e7bd585f18c0f3cc.tar.bz2
crash creating db2 database in non-existent directory
* kdb_db2.c (krb5_db2_db_create): If the creation of the first database file fails, return the error, instead of attempting to create the second (and using a null pointer as an input string in formatting a filename). Reported by Jeff Blaine. ticket: new git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@19038 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/plugins/kdb/db2/kdb_db2.c')
-rw-r--r--src/plugins/kdb/db2/kdb_db2.c33
1 files changed, 15 insertions, 18 deletions
diff --git a/src/plugins/kdb/db2/kdb_db2.c b/src/plugins/kdb/db2/kdb_db2.c
index 9a0254d..d438171 100644
--- a/src/plugins/kdb/db2/kdb_db2.c
+++ b/src/plugins/kdb/db2/kdb_db2.c
@@ -702,25 +702,22 @@ krb5_db2_db_create(krb5_context context, char *db_name, krb5_int32 flags)
}
db = k5db2_dbopen(db_ctx, db_name, O_RDWR | O_CREAT | O_EXCL, 0600, db_ctx->tempdb);
if (db == NULL)
- retval = errno;
- else
- (*db->close) (db);
- if (retval == 0) {
+ return errno;
+ (*db->close) (db);
- db_name2 = db_ctx->tempdb ? gen_dbsuffix(db_name, "~") : strdup(db_name);
- if (db_name2 == NULL)
- return ENOMEM;
- okname = gen_dbsuffix(db_name2, KDB2_LOCK_EXT);
- if (!okname)
- retval = ENOMEM;
- else {
- fd = open(okname, O_CREAT | O_RDWR | O_TRUNC, 0600);
- if (fd < 0)
- retval = errno;
- else
- close(fd);
- free_dbsuffix(okname);
- }
+ db_name2 = db_ctx->tempdb ? gen_dbsuffix(db_name, "~") : strdup(db_name);
+ if (db_name2 == NULL)
+ return ENOMEM;
+ okname = gen_dbsuffix(db_name2, KDB2_LOCK_EXT);
+ if (!okname)
+ retval = ENOMEM;
+ else {
+ fd = open(okname, O_CREAT | O_RDWR | O_TRUNC, 0600);
+ if (fd < 0)
+ retval = errno;
+ else
+ close(fd);
+ free_dbsuffix(okname);
}
sprintf(policy_db_name, "%s.kadm5", db_name2);