krb5 commit: Avoid using tmpnam(3) in db2's hash.c

Greg Hudson ghudson at mit.edu
Fri Apr 14 12:14:36 EDT 2017


https://github.com/krb5/krb5/commit/bb0100296dea0a3b2f4b80235c21a1ca19d006f6
commit bb0100296dea0a3b2f4b80235c21a1ca19d006f6
Author: Robbie Harwood <rharwood at redhat.com>
Date:   Wed Mar 29 18:34:37 2017 -0400

    Avoid using tmpnam(3) in db2's hash.c
    
    As we do not rely on anonymous db2 databases, get rid of the code
    using tmpnam() for hash databases and reporting EINVAL if a filename
    is not specified.
    
    [ghudson at mit.edu: rewrote commit message; condensed conditionals]

 src/plugins/kdb/db2/libdb2/hash/hash.c |   19 +++----------------
 1 files changed, 3 insertions(+), 16 deletions(-)

diff --git a/src/plugins/kdb/db2/libdb2/hash/hash.c b/src/plugins/kdb/db2/libdb2/hash/hash.c
index 76f5d47..862dbb1 100644
--- a/src/plugins/kdb/db2/libdb2/hash/hash.c
+++ b/src/plugins/kdb/db2/libdb2/hash/hash.c
@@ -103,26 +103,15 @@ __kdb2_hash_open(file, flags, mode, info, dflags)
 	DB *dbp;
 	DBT mpool_key;
 	HTAB *hashp;
-	int32_t bpages, csize, new_table, save_errno, specified_file;
+	int32_t bpages, csize, new_table, save_errno;
 
-	if ((flags & O_ACCMODE) == O_WRONLY) {
+	if (!file || (flags & O_ACCMODE) == O_WRONLY) {
 		errno = EINVAL;
 		return (NULL);
 	}
 	if (!(hashp = (HTAB *)calloc(1, sizeof(HTAB))))
 		return (NULL);
 	hashp->fp = -1;
-
-	/* set this now, before file goes away... */
-	specified_file = (file != NULL);
-	if (!file) {
-		file = tmpnam(NULL);
-		/* store the file name so that we can unlink it later */
-		hashp->fname = file;
-#ifdef DEBUG
-		fprintf(stderr, "Using file name %s.\n", file);
-#endif
-	}
 	/*
 	 * Even if user wants write only, we need to be able to read
 	 * the actual file, so we need to open it read/write. But, the
@@ -130,7 +119,7 @@ __kdb2_hash_open(file, flags, mode, info, dflags)
 	 * we can check accesses.
 	 */
 	hashp->flags = flags;
-	hashp->save_file = specified_file && (hashp->flags & O_RDWR);
+	hashp->save_file = hashp->flags & O_RDWR;
 
 	new_table = 0;
 	if (!file || (flags & O_TRUNC) ||
@@ -542,8 +531,6 @@ hdestroy(hashp)
 		/* we need to chmod the file to allow it to be deleted... */
 		chmod(hashp->fname, 0700);
 		unlink(hashp->fname);
-		/* destroy the temporary name */
-		tmpnam(NULL);
 	}
 	free(hashp);
 


More information about the cvs-krb5 mailing list