[gnome-online-accounts/wip/kerberos] identity: don't crash if credentials are updated shortly after sign out
- From: Ray Strode <halfline src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-online-accounts/wip/kerberos] identity: don't crash if credentials are updated shortly after sign out
- Date: Mon, 20 Aug 2012 15:27:46 +0000 (UTC)
commit 0a074679295e1bdafbaec4205b9d74732a7cab6c
Author: Ray Strode <rstrode redhat com>
Date: Mon Aug 20 11:20:20 2012 -0400
identity: don't crash if credentials are updated shortly after sign out
src/goaidentity/goakerberosidentity.c | 43 +++++++++++++++++++++++++++++++++
1 files changed, 43 insertions(+), 0 deletions(-)
---
diff --git a/src/goaidentity/goakerberosidentity.c b/src/goaidentity/goakerberosidentity.c
index 2b77906..1d3ce20 100644
--- a/src/goaidentity/goakerberosidentity.c
+++ b/src/goaidentity/goakerberosidentity.c
@@ -1062,6 +1062,40 @@ on_kerberos_inquiry (krb5_context kerberos_context,
}
static gboolean
+create_credential_cache (GoaKerberosIdentity *self,
+ GError **error)
+{
+ krb5_ccache default_cache;
+ const char *cache_type;
+ krb5_error_code error_code;
+
+ error_code = krb5_cc_default (self->priv->kerberos_context, &default_cache);
+
+ if (error_code == 0)
+ {
+ cache_type = krb5_cc_get_type (self->priv->kerberos_context, default_cache);
+
+ error_code = krb5_cc_new_unique (self->priv->kerberos_context,
+ cache_type,
+ NULL,
+ &self->priv->credentials_cache);
+ }
+
+ if (error_code != 0)
+ {
+ set_error_from_krb5_error_code (self,
+ error,
+ GOA_IDENTITY_ERROR_ALLOCATING_CREDENTIALS,
+ error_code,
+ _("Could not create credential cache: %k"));
+
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static gboolean
goa_kerberos_identity_update_credentials (GoaKerberosIdentity *self,
krb5_principal principal,
krb5_creds *new_credentials,
@@ -1069,6 +1103,15 @@ goa_kerberos_identity_update_credentials (GoaKerberosIdentity *self,
{
krb5_error_code error_code;
+ if (self->priv->credentials_cache == NULL)
+ {
+ if (!create_credential_cache (self, error))
+ {
+ krb5_free_cred_contents (self->priv->kerberos_context, new_credentials);
+ goto out;
+ }
+ }
+
error_code = krb5_cc_initialize (self->priv->kerberos_context,
self->priv->credentials_cache,
principal);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]