diff options
author | Ken Raeburn <raeburn@mit.edu> | 2007-01-08 22:41:01 +0000 |
---|---|---|
committer | Ken Raeburn <raeburn@mit.edu> | 2007-01-08 22:41:01 +0000 |
commit | 58c8b838040557cba501f6b6e7bd585f18c0f3cc (patch) | |
tree | 5951e632cb3004062f6b6ed2abf65f46a9477c5b /src/plugins/kdb/db2/kdb_db2.c | |
parent | b0d429bc871cd63508341010fed24689a9caa460 (diff) | |
download | krb5-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.c | 33 |
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); |