diff options
author | Greg Hudson <ghudson@mit.edu> | 2016-06-27 17:49:57 -0400 |
---|---|---|
committer | Tom Yu <tlyu@mit.edu> | 2016-09-02 14:49:37 -0400 |
commit | 843ffd81a9fc7899d9d3ee8615f054fbfa1b81a4 (patch) | |
tree | 614a5aa77ce7755b8f694cb9808b5e72cbad17a4 | |
parent | 8295084b039637fbedaea5e6b5c43f557c1ff998 (diff) | |
download | krb5-843ffd81a9fc7899d9d3ee8615f054fbfa1b81a4.zip krb5-843ffd81a9fc7899d9d3ee8615f054fbfa1b81a4.tar.gz krb5-843ffd81a9fc7899d9d3ee8615f054fbfa1b81a4.tar.bz2 |
Fix leaks on error in krb5 gss_acquire_cred()
In acquire_cred_context(), when releasing the partially constructed
cred on error, make sure to free the password and impersonator fields,
and to destroy the ccache if we created it.
(cherry picked from commit ee7315964e52fe351ddb6884e0e8baf1ecce2144)
ticket: 8437
version_fixed: 1.14.4
-rw-r--r-- | src/lib/gssapi/krb5/acquire_cred.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/lib/gssapi/krb5/acquire_cred.c b/src/lib/gssapi/krb5/acquire_cred.c index 6e83fb9..4505ba5 100644 --- a/src/lib/gssapi/krb5/acquire_cred.c +++ b/src/lib/gssapi/krb5/acquire_cred.c @@ -847,8 +847,12 @@ krb_error_out: error_out: if (cred != NULL) { - if (cred->ccache) - krb5_cc_close(context, cred->ccache); + if (cred->ccache) { + if (cred->destroy_ccache) + krb5_cc_destroy(context, cred->ccache); + else + krb5_cc_close(context, cred->ccache); + } if (cred->client_keytab) krb5_kt_close(context, cred->client_keytab); #ifndef LEAN_CLIENT @@ -859,6 +863,8 @@ error_out: krb5_rc_close(context, cred->rcache); if (cred->name) kg_release_name(context, &cred->name); + krb5_free_principal(context, cred->impersonator); + zapfreestr(cred->password); k5_mutex_destroy(&cred->lock); xfree(cred); } |