diff options
author | Ray Strode <rstrode@redhat.com> | 2016-07-14 09:14:31 -0400 |
---|---|---|
committer | Ray Strode <rstrode@redhat.com> | 2016-07-14 14:56:23 -0400 |
commit | 28c2f22b8fadc78fd0adf2ba050fac573425e5f7 (patch) | |
tree | 9c164ac5e874c197d865f3c90428deab613686ad | |
parent | 36b45366835b4846e47d723e77feb05a7a4ade5e (diff) | |
download | gnome-online-accounts-28c2f22b8fadc78fd0adf2ba050fac573425e5f7.tar.gz |
identity: ensure unused credential cache is cleaned up
If we end up creating a temporary credential cache that we don't
need, because a new identity wasn't successfully signed in, we
should clean it up.
https://bugzilla.gnome.org/show_bug.cgi?id=768808
-rw-r--r-- | src/goaidentity/goakerberosidentitymanager.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/goaidentity/goakerberosidentitymanager.c b/src/goaidentity/goakerberosidentitymanager.c index 13f2a42..b7d2623 100644 --- a/src/goaidentity/goakerberosidentitymanager.c +++ b/src/goaidentity/goakerberosidentitymanager.c @@ -813,6 +813,7 @@ sign_in_identity (GoaKerberosIdentityManager *self, GoaIdentity *identity; GError *error; krb5_error_code error_code; + gboolean is_new_identity = FALSE; g_debug ("GoaKerberosIdentityManager: signing in identity %s", operation->identifier); @@ -845,15 +846,17 @@ sign_in_identity (GoaKerberosIdentityManager *self, identity = goa_kerberos_identity_new (self->priv->kerberos_context, credentials_cache, &error); - krb5_cc_close (self->priv->kerberos_context, credentials_cache); if (identity == NULL) { + krb5_cc_destroy (self->priv->kerberos_context, credentials_cache); g_simple_async_result_take_error (operation->result, error); g_simple_async_result_set_op_res_gpointer (operation->result, NULL, NULL); return; } + krb5_cc_close (self->priv->kerberos_context, credentials_cache); + is_new_identity = TRUE; } else { @@ -872,6 +875,9 @@ sign_in_identity (GoaKerberosIdentityManager *self, operation->cancellable, &error)) { + if (is_new_identity) + goa_kerberos_identity_erase (identity, NULL); + g_simple_async_result_set_from_error (operation->result, error); g_simple_async_result_set_op_res_gpointer (operation->result, NULL, |