diff options
| author | Theodore Tso <tytso@mit.edu> | 1993-01-06 00:20:13 +0000 |
|---|---|---|
| committer | Theodore Tso <tytso@mit.edu> | 1993-01-06 00:20:13 +0000 |
| commit | ca750f043036002ddd8e5e64f862680359f5d4c6 (patch) | |
| tree | b488deebf942afefaaa0db8f47950ffb3c0848fe /src | |
| parent | 5162fd54409ae73cac913312bd7b5bfc3df52838 (diff) | |
Fixed initialization of krb5_scc_data's file member
Free allocated memories on error.
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@2477 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/krb5/ccache/stdio/scc_gennew.c | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/src/lib/krb5/ccache/stdio/scc_gennew.c b/src/lib/krb5/ccache/stdio/scc_gennew.c index e1e09f9d1..220ada849 100644 --- a/src/lib/krb5/ccache/stdio/scc_gennew.c +++ b/src/lib/krb5/ccache/stdio/scc_gennew.c @@ -62,6 +62,7 @@ krb5_scc_generate_new (id) { krb5_ccache lid; FILE *f; + krb5_error_code retcode = 0; char scratch[sizeof(TKT_ROOT)+6+1]; /* +6 for the scratch part, +1 for NUL */ @@ -91,6 +92,7 @@ krb5_scc_generate_new (id) } ((krb5_scc_data *) lid->data)->flags = 0; + ((krb5_scc_data *) lid->data)->file = 0; /* Set up the filename */ strcpy(((krb5_scc_data *) lid->data)->filename, scratch); @@ -101,24 +103,29 @@ krb5_scc_generate_new (id) #else f = fopen (((krb5_scc_data *) lid->data)->filename, "w+"); #endif - if (!f) - return krb5_scc_interpret (errno); - else { + if (!f) { + retcode = krb5_scc_interpret (errno); + goto err_out; + } else { krb5_int16 scc_fvno = htons(KRB5_SCC_FVNO); - int errsave; if (!fwrite((char *)&scc_fvno, sizeof(scc_fvno), 1, f)) { - errsave = errno; + retcode = krb5_scc_interpret(errno); (void) fclose(f); (void) remove(((krb5_scc_data *) lid->data)->filename); - return krb5_scc_interpret(errsave); + goto err_out; } if (fclose(f) == EOF) { - errsave = errno; + retcode = krb5_scc_interpret(errno); (void) remove(((krb5_scc_data *) lid->data)->filename); - return krb5_scc_interpret(errsave); + goto err_out; } *id = lid; return KRB5_OK; } +err_out: + xfree(((krb5_scc_data *) lid->data)->filename); + xfree(((krb5_scc_data *) lid->data)); + xfree(lid); + return retcode; } |
