summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRay Strode <rstrode@redhat.com>2016-07-14 09:14:31 -0400
committerRay Strode <rstrode@redhat.com>2016-07-14 14:56:23 -0400
commit28c2f22b8fadc78fd0adf2ba050fac573425e5f7 (patch)
tree9c164ac5e874c197d865f3c90428deab613686ad
parent36b45366835b4846e47d723e77feb05a7a4ade5e (diff)
downloadgnome-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.c8
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,