summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorGreg Hudson <ghudson@mit.edu>2011-09-07 19:10:25 +0000
committerGreg Hudson <ghudson@mit.edu>2011-09-07 19:10:25 +0000
commitce0fb6678a4402fa1a41c88e1097e7501f4a4fef (patch)
treecef3524f06727496794f0136e52faf1fe046af13 /src
parent6e0bfbc787509dbaac4947a76e07a2bd6ba7956d (diff)
downloadkrb5-ce0fb6678a4402fa1a41c88e1097e7501f4a4fef.tar.gz
krb5-ce0fb6678a4402fa1a41c88e1097e7501f4a4fef.tar.xz
krb5-ce0fb6678a4402fa1a41c88e1097e7501f4a4fef.zip
Fix some error-handling bugs in cc_dir.c
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@25168 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src')
-rw-r--r--src/lib/krb5/ccache/cc_dir.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/lib/krb5/ccache/cc_dir.c b/src/lib/krb5/ccache/cc_dir.c
index 6cd192a710..83427860f7 100644
--- a/src/lib/krb5/ccache/cc_dir.c
+++ b/src/lib/krb5/ccache/cc_dir.c
@@ -184,7 +184,7 @@ write_primary_file(const char *primary_path, const char *contents)
krb5_error_code ret = KRB5_CC_IO;
char *newpath = NULL;
FILE *fp = NULL;
- int fd = -1;
+ int fd = -1, status;
if (asprintf(&newpath, "%s.XXXXXX", primary_path) < 0)
return ENOMEM;
@@ -200,7 +200,9 @@ write_primary_file(const char *primary_path, const char *contents)
fd = -1;
if (fprintf(fp, "%s\n", contents) < 0)
goto cleanup;
- if (fclose(fp) == EOF)
+ status = fclose(fp);
+ fp = NULL;
+ if (status == EOF)
goto cleanup;
fp = NULL;
if (rename(newpath, primary_path) != 0)
@@ -365,7 +367,7 @@ dcc_gen_new(krb5_context context, krb5_ccache *cache_out)
{
krb5_error_code ret;
char *dirname = NULL, *template = NULL, *residual = NULL;
- krb5_ccache fcc;
+ krb5_ccache fcc = NULL;
*cache_out = NULL;
ret = get_context_default_dir(context, &dirname);
@@ -390,9 +392,12 @@ dcc_gen_new(krb5_context context, krb5_ccache *cache_out)
}
ret = make_cache(residual, fcc, cache_out);
if (ret)
- krb5_fcc_ops.destroy(context, fcc);
+ goto cleanup;
+ fcc = NULL;
cleanup:
+ if (fcc != NULL)
+ krb5_fcc_ops.destroy(context, fcc);
free(dirname);
free(template);
free(residual);