[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#772078: unblock: gnome-online-accounts/3.14.2-1



Package: release.debian.org
Severity: normal
User: release.debian.org@packages.debian.org
Usertags: unblock

Dear release team,

I've uploaded gnome-online-accounts 3.14.2-1 which fixes several
memory leaks and fix several other bugs in the kerberos provider.

I've also disabled the yahoo provider which is experimental and
completely broken.

I've attached the debdiff here generated with:
debdiff gnome-online-accounts_3.14.1-1.dsc gnome-online-accounts_3.14.2-1.dsc|filterdiff -x '*/doc/*' -x '*/configure'

The detail of the patches can be found at:
https://git.gnome.org/browse/gnome-online-accounts/log/?h=gnome-3-14

Please unblock package gnome-online-accounts

unblock gnome-online-accounts/3.14.2-1

Cheers,

Laurent Bigonville

-- System Information:
Debian Release: 8.0
  APT prefers unstable
  APT policy: (500, 'unstable'), (1, 'experimental')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 3.16.0-4-amd64 (SMP w/8 CPU cores)
Locale: LANG=fr_BE.utf8, LC_CTYPE=fr_BE.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)
diff -Nru gnome-online-accounts-3.14.1/configure gnome-online-accounts-3.14.2/configure
diff -Nru gnome-online-accounts-3.14.1/configure.ac gnome-online-accounts-3.14.2/configure.ac
--- gnome-online-accounts-3.14.1/configure.ac	2014-10-16 11:15:56.000000000 +0200
+++ gnome-online-accounts-3.14.2/configure.ac	2014-11-12 15:14:53.000000000 +0100
@@ -1,6 +1,6 @@
 m4_define([goa_major_version], [3])
 m4_define([goa_minor_version], [14])
-m4_define([goa_micro_version], [1])
+m4_define([goa_micro_version], [2])
 m4_define([goa_nano_version], [0])
 
 m4_define([goa_base_version],
diff -Nru gnome-online-accounts-3.14.1/debian/changelog gnome-online-accounts-3.14.2/debian/changelog
--- gnome-online-accounts-3.14.1/debian/changelog	2014-10-20 00:29:38.000000000 +0200
+++ gnome-online-accounts-3.14.2/debian/changelog	2014-12-04 22:51:05.000000000 +0100
@@ -1,3 +1,12 @@
+gnome-online-accounts (3.14.2-1) unstable; urgency=medium
+
+  * New upstream bugfix release
+  * debian/rules: Disable yahoo provider, it is experimental, broken and
+    nothing is using it anyway (Closes: #764816)
+  * debian/control.in: Use the canonical URL for the Vcs-Svn field
+
+ -- Laurent Bigonville <bigon@debian.org>  Thu, 04 Dec 2014 22:51:04 +0100
+
 gnome-online-accounts (3.14.1-1) unstable; urgency=medium
 
   * New upstream release.
diff -Nru gnome-online-accounts-3.14.1/debian/control gnome-online-accounts-3.14.2/debian/control
--- gnome-online-accounts-3.14.1/debian/control	2014-10-20 00:34:12.000000000 +0200
+++ gnome-online-accounts-3.14.2/debian/control	2014-12-04 22:55:51.000000000 +0100
@@ -6,7 +6,7 @@
 Section: gnome
 Priority: optional
 Maintainer: Debian GNOME Maintainers <pkg-gnome-maintainers@lists.alioth.debian.org>
-Uploaders: Andreas Henriksson <andreas@fatal.se>, Emilio Pozuelo Monfort <pochu@debian.org>, Iain Lane <laney@debian.org>, Laurent Bigonville <bigon@debian.org>, Sjoerd Simons <sjoerd@debian.org>
+Uploaders: Andreas Henriksson <andreas@fatal.se>, Emilio Pozuelo Monfort <pochu@debian.org>, Laurent Bigonville <bigon@debian.org>, Sjoerd Simons <sjoerd@debian.org>
 Build-Depends: cdbs (>= 0.4.93~),
                dh-autoreconf,
                gnome-pkg-tools (>= 0.10),
@@ -30,7 +30,7 @@
                libdbus-glib-1-dev,
                libtelepathy-glib-dev
 Standards-Version: 3.9.6
-Vcs-Svn: svn://anonscm.debian.org/svn/pkg-gnome/desktop/unstable/gnome-online-accounts
+Vcs-Svn: svn://anonscm.debian.org/pkg-gnome/desktop/unstable/gnome-online-accounts
 Vcs-Browser: http://anonscm.debian.org/viewvc/pkg-gnome/desktop/unstable/gnome-online-accounts/
 Homepage: https://wiki.gnome.org/Projects/GnomeOnlineAccounts
 
diff -Nru gnome-online-accounts-3.14.1/debian/control.in gnome-online-accounts-3.14.2/debian/control.in
--- gnome-online-accounts-3.14.1/debian/control.in	2014-10-20 00:20:08.000000000 +0200
+++ gnome-online-accounts-3.14.2/debian/control.in	2014-10-20 00:39:15.000000000 +0200
@@ -26,7 +26,7 @@
                libdbus-glib-1-dev,
                libtelepathy-glib-dev
 Standards-Version: 3.9.6
-Vcs-Svn: svn://anonscm.debian.org/svn/pkg-gnome/desktop/unstable/gnome-online-accounts
+Vcs-Svn: svn://anonscm.debian.org/pkg-gnome/desktop/unstable/gnome-online-accounts
 Vcs-Browser: http://anonscm.debian.org/viewvc/pkg-gnome/desktop/unstable/gnome-online-accounts/
 Homepage: https://wiki.gnome.org/Projects/GnomeOnlineAccounts
 
diff -Nru gnome-online-accounts-3.14.1/debian/rules gnome-online-accounts-3.14.2/debian/rules
--- gnome-online-accounts-3.14.1/debian/rules	2014-10-19 23:54:27.000000000 +0200
+++ gnome-online-accounts-3.14.2/debian/rules	2014-12-04 21:55:56.000000000 +0100
@@ -23,7 +23,6 @@
   --enable-flickr \
   --enable-windows-live \
   --enable-google \
-  --enable-yahoo \
   --enable-owncloud \
   --enable-pocket \
   --enable-imap-smtp \
diff -Nru gnome-online-accounts-3.14.1/doc/goa-docs.xml gnome-online-accounts-3.14.2/doc/goa-docs.xml
diff -Nru gnome-online-accounts-3.14.1/doc/goa-sections.txt gnome-online-accounts-3.14.2/doc/goa-sections.txt
diff -Nru gnome-online-accounts-3.14.1/doc/goa.types gnome-online-accounts-3.14.2/doc/goa.types
diff -Nru gnome-online-accounts-3.14.1/doc/html/gio-hierarchy.html gnome-online-accounts-3.14.2/doc/html/gio-hierarchy.html
diff -Nru gnome-online-accounts-3.14.1/doc/html/goa.devhelp2 gnome-online-accounts-3.14.2/doc/html/goa.devhelp2
diff -Nru gnome-online-accounts-3.14.1/doc/html/GoaDocuments.html gnome-online-accounts-3.14.2/doc/html/GoaDocuments.html
diff -Nru gnome-online-accounts-3.14.1/doc/html/GoaExchange.html gnome-online-accounts-3.14.2/doc/html/GoaExchange.html
diff -Nru gnome-online-accounts-3.14.1/doc/html/GoaMaps.html gnome-online-accounts-3.14.2/doc/html/GoaMaps.html
diff -Nru gnome-online-accounts-3.14.1/doc/html/GoaMediaServer.html gnome-online-accounts-3.14.2/doc/html/GoaMediaServer.html
diff -Nru gnome-online-accounts-3.14.1/doc/html/GoaObject.html gnome-online-accounts-3.14.2/doc/html/GoaObject.html
diff -Nru gnome-online-accounts-3.14.1/doc/html/GoaPhotos.html gnome-online-accounts-3.14.2/doc/html/GoaPhotos.html
diff -Nru gnome-online-accounts-3.14.1/doc/html/GoaPrinters.html gnome-online-accounts-3.14.2/doc/html/GoaPrinters.html
diff -Nru gnome-online-accounts-3.14.1/doc/html/GoaProvider.html gnome-online-accounts-3.14.2/doc/html/GoaProvider.html
diff -Nru gnome-online-accounts-3.14.1/doc/html/GoaReadLater.html gnome-online-accounts-3.14.2/doc/html/GoaReadLater.html
diff -Nru gnome-online-accounts-3.14.1/doc/html/GoaTicketing.html gnome-online-accounts-3.14.2/doc/html/GoaTicketing.html
diff -Nru gnome-online-accounts-3.14.1/doc/html/goa-Version-Information.html gnome-online-accounts-3.14.2/doc/html/goa-Version-Information.html
diff -Nru gnome-online-accounts-3.14.1/doc/html/index.html gnome-online-accounts-3.14.2/doc/html/index.html
diff -Nru gnome-online-accounts-3.14.1/doc/html/index.sgml gnome-online-accounts-3.14.2/doc/html/index.sgml
diff -Nru gnome-online-accounts-3.14.1/doc/html/ix01.html gnome-online-accounts-3.14.2/doc/html/ix01.html
diff -Nru gnome-online-accounts-3.14.1/doc/html/ref-backend-library.html gnome-online-accounts-3.14.2/doc/html/ref-backend-library.html
diff -Nru gnome-online-accounts-3.14.1/doc/html/ref-library-generated.html gnome-online-accounts-3.14.2/doc/html/ref-library-generated.html
diff -Nru gnome-online-accounts-3.14.1/doc/html/ref-library.html gnome-online-accounts-3.14.2/doc/html/ref-library.html
diff -Nru gnome-online-accounts-3.14.1/doc/Makefile.in gnome-online-accounts-3.14.2/doc/Makefile.in
diff -Nru gnome-online-accounts-3.14.1/doc/tmpl/GoaExchange.sgml gnome-online-accounts-3.14.2/doc/tmpl/GoaExchange.sgml
diff -Nru gnome-online-accounts-3.14.1/doc/tmpl/GoaMediaServer.sgml gnome-online-accounts-3.14.2/doc/tmpl/GoaMediaServer.sgml
diff -Nru gnome-online-accounts-3.14.1/doc/tmpl/GoaPrinters.sgml gnome-online-accounts-3.14.2/doc/tmpl/GoaPrinters.sgml
diff -Nru gnome-online-accounts-3.14.1/doc/tmpl/GoaReadLater.sgml gnome-online-accounts-3.14.2/doc/tmpl/GoaReadLater.sgml
diff -Nru gnome-online-accounts-3.14.1/doc/tmpl/GoaTicketing.sgml gnome-online-accounts-3.14.2/doc/tmpl/GoaTicketing.sgml
diff -Nru gnome-online-accounts-3.14.1/NEWS gnome-online-accounts-3.14.2/NEWS
--- gnome-online-accounts-3.14.1/NEWS	2014-10-16 11:27:31.000000000 +0200
+++ gnome-online-accounts-3.14.2/NEWS	2014-11-12 15:24:12.000000000 +0100
@@ -1,3 +1,12 @@
+Overview of changes in 3.14.2
+=============================
+
+* Bugs fixed:
+ 739168 facebook: Add fallback to get presentation id
+ 739590 Memory leak fixes
+ 739593 kerberos: A pile of fixes
+
+
 Overview of changes in 3.14.1
 =============================
 
diff -Nru gnome-online-accounts-3.14.1/src/daemon/goadaemon.c gnome-online-accounts-3.14.2/src/daemon/goadaemon.c
--- gnome-online-accounts-3.14.1/src/daemon/goadaemon.c	2014-10-16 11:15:56.000000000 +0200
+++ gnome-online-accounts-3.14.2/src/daemon/goadaemon.c	2014-11-12 15:14:32.000000000 +0100
@@ -508,6 +508,7 @@
   g_object_unref (account);
   g_free (type);
   g_free (identity);
+  g_free (presentation_identity);
   return ret;
 }
 
diff -Nru gnome-online-accounts-3.14.1/src/goabackend/goabackendenums.h gnome-online-accounts-3.14.2/src/goabackend/goabackendenums.h
--- gnome-online-accounts-3.14.1/src/goabackend/goabackendenums.h	2014-09-16 15:33:08.000000000 +0200
+++ gnome-online-accounts-3.14.2/src/goabackend/goabackendenums.h	2014-11-12 15:14:32.000000000 +0100
@@ -37,6 +37,8 @@
  *   services. For example, IMAP and SMTP.
  * @GOA_PROVIDER_GROUP_TICKETING: Providers with ticketing
  *   capabilities. For example, Kerberos.
+ * @GOA_PROVIDER_GROUP_CHAT: Providers that offer chat-like messaging
+ *   capabilities. For example, XMPP, IRC.
  * @GOA_PROVIDER_GROUP_INVALID: Used for error handling. No provider
  *   should belong to this group.
  *
@@ -65,6 +67,7 @@
  * @GOA_PROVIDER_FEATURE_PHOTOS: Photos storage services (ie. Flickr).
  * @GOA_PROVIDER_FEATURE_FILES: Files storage services (ie. WebDAV).
  * @GOA_PROVIDER_FEATURE_TICKETING: Ticketing services (ie. Kerberos).
+ * @GOA_PROVIDER_FEATURE_READ_LATER: Read later services (eg. Pocket).
  * @GOA_PROVIDER_FEATURE_PRINTERS: Network printing services (e.g. Google Cloud Print).
  * @GOA_PROVIDER_FEATURE_MAPS: Maps related services (e.g. Foursquare, Facebook).
  * @GOA_PROVIDER_FEATURE_INVALID: Used for error handling. No provider
diff -Nru gnome-online-accounts-3.14.1/src/goabackend/goafacebookprovider.c gnome-online-accounts-3.14.2/src/goabackend/goafacebookprovider.c
--- gnome-online-accounts-3.14.1/src/goabackend/goafacebookprovider.c	2014-09-16 15:33:08.000000000 +0200
+++ gnome-online-accounts-3.14.2/src/goabackend/goafacebookprovider.c	2014-11-12 15:19:33.000000000 +0100
@@ -252,12 +252,16 @@
   presentation_identity = g_strdup (json_object_get_string_member (json_object, "email"));
   if (presentation_identity == NULL)
     {
-      g_warning ("Did not find email in JSON data");
-      g_set_error (error,
-                   GOA_ERROR,
-                   GOA_ERROR_FAILED,
-                   _("Could not parse response"));
-      goto out;
+      presentation_identity = g_strdup (json_object_get_string_member (json_object, "username"));
+      if (presentation_identity == NULL)
+        {
+          g_warning ("Did not find email or username in JSON data");
+          g_set_error (error,
+                       GOA_ERROR,
+                       GOA_ERROR_FAILED,
+                       _("Could not parse response"));
+          goto out;
+        }
     }
 
   ret = id;
@@ -466,11 +470,6 @@
                                                    NULL,
                                                    "photos-disabled",
                                                    _("_Photos"));
-
-  goa_util_add_row_switch_from_keyfile_with_blurb (grid, row++, object,
-                                                   NULL,
-                                                   "maps-disabled",
-                                                   _("_Maps"));
 }
 
 /* ---------------------------------------------------------------------------------------------------- */
diff -Nru gnome-online-accounts-3.14.1/src/goaidentity/goaidentityinquiry.c gnome-online-accounts-3.14.2/src/goaidentity/goaidentityinquiry.c
--- gnome-online-accounts-3.14.1/src/goaidentity/goaidentityinquiry.c	2014-09-16 15:33:08.000000000 +0200
+++ gnome-online-accounts-3.14.2/src/goaidentity/goaidentityinquiry.c	2014-11-12 15:14:32.000000000 +0100
@@ -74,6 +74,14 @@
   return GOA_IDENTITY_INQUIRY_GET_IFACE (self)->is_complete (self);
 }
 
+gboolean
+goa_identity_inquiry_is_failed (GoaIdentityInquiry *self)
+{
+  g_return_val_if_fail (GOA_IS_IDENTITY_INQUIRY (self), TRUE);
+
+  return GOA_IDENTITY_INQUIRY_GET_IFACE (self)->is_failed (self);
+}
+
 void
 goa_identity_inquiry_iter_init (GoaIdentityInquiryIter *iter,
                                 GoaIdentityInquiry     *inquiry)
diff -Nru gnome-online-accounts-3.14.1/src/goaidentity/goaidentityinquiry.h gnome-online-accounts-3.14.2/src/goaidentity/goaidentityinquiry.h
--- gnome-online-accounts-3.14.1/src/goaidentity/goaidentityinquiry.h	2014-09-16 15:33:08.000000000 +0200
+++ gnome-online-accounts-3.14.2/src/goaidentity/goaidentityinquiry.h	2014-11-12 15:14:32.000000000 +0100
@@ -79,6 +79,7 @@
                                        GoaIdentityQuery   *query);
   gboolean             (* is_answered) (GoaIdentityInquiry *inquiry,
                                         GoaIdentityQuery   *query);
+  gboolean             (* is_failed)  (GoaIdentityInquiry *inquiry);
 };
 
 GType goa_identity_inquiry_get_type (void);
@@ -87,6 +88,7 @@
 char        *goa_identity_inquiry_get_name     (GoaIdentityInquiry *inquiry);
 char        *goa_identity_inquiry_get_banner   (GoaIdentityInquiry *inquiry);
 gboolean     goa_identity_inquiry_is_complete  (GoaIdentityInquiry *inquiry);
+gboolean     goa_identity_inquiry_is_failed    (GoaIdentityInquiry *inquiry);
 void         goa_identity_inquiry_answer_query (GoaIdentityInquiry *inquiry,
                                                 GoaIdentityQuery   *query,
                                                 const char         *answer);
diff -Nru gnome-online-accounts-3.14.1/src/goaidentity/goaidentityservice.c gnome-online-accounts-3.14.2/src/goaidentity/goaidentityservice.c
--- gnome-online-accounts-3.14.1/src/goaidentity/goaidentityservice.c	2014-09-16 15:33:08.000000000 +0200
+++ gnome-online-accounts-3.14.2/src/goaidentity/goaidentityservice.c	2014-11-12 15:14:32.000000000 +0100
@@ -1601,8 +1601,9 @@
       GoaIdentity *identity = node->data;
       const char  *principal;
       GoaObject   *object;
+      char        *object_path;
 
-      export_identity (self, identity);
+      object_path = export_identity (self, identity);
 
       principal = goa_identity_get_identifier (identity);
 
@@ -1612,6 +1613,8 @@
         add_temporary_account (self, identity);
       else
         g_object_unref (object);
+
+      g_free (object_path);
     }
 
  out:
diff -Nru gnome-online-accounts-3.14.1/src/goaidentity/goakerberosidentity.c gnome-online-accounts-3.14.2/src/goaidentity/goakerberosidentity.c
--- gnome-online-accounts-3.14.1/src/goaidentity/goakerberosidentity.c	2014-09-16 15:33:08.000000000 +0200
+++ gnome-online-accounts-3.14.2/src/goaidentity/goakerberosidentity.c	2014-11-12 15:14:32.000000000 +0100
@@ -105,9 +105,7 @@
   GoaKerberosIdentity *self = GOA_KERBEROS_IDENTITY (object);
 
   G_LOCK (identity_lock);
-  g_clear_object (&self->priv->renewal_alarm);
-  g_clear_object (&self->priv->expiring_alarm);
-  g_clear_object (&self->priv->expiration_alarm);
+  clear_alarms (self);
   G_UNLOCK (identity_lock);
 
   G_OBJECT_CLASS (goa_kerberos_identity_parent_class)->dispose (object);
@@ -319,6 +317,7 @@
   va_start (args, format);
   literal_message = g_strdup_vprintf (expanded_format, args);
   va_end (args);
+  g_free (expanded_format);
 
   g_set_error_literal (error, GOA_IDENTITY_ERROR, code, literal_message);
   g_free (literal_message);
@@ -529,25 +528,32 @@
 set_expiration_time (GoaKerberosIdentity *self,
                      krb5_timestamp       expiration_time)
 {
+  G_LOCK (identity_lock);
   if (self->priv->expiration_time != expiration_time)
     {
       self->priv->expiration_time = expiration_time;
+      G_UNLOCK (identity_lock);
       queue_notify (self,
                     &self->priv->expiration_time_idle_id,
                     "expiration-timestamp");
+      G_LOCK (identity_lock);
     }
+  G_UNLOCK (identity_lock);
 }
 
 static gboolean
 credentials_are_expired (GoaKerberosIdentity *self,
-                         krb5_creds          *credentials)
+                         krb5_creds          *credentials,
+                         krb5_timestamp      *expiration_time)
 {
   krb5_timestamp current_time;
 
   current_time = get_current_time (self);
 
-  set_expiration_time (self, MAX (credentials->times.endtime,
-                                  self->priv->expiration_time));
+  G_LOCK (identity_lock);
+  *expiration_time = MAX (credentials->times.endtime,
+                          self->priv->expiration_time);
+  G_UNLOCK (identity_lock);
 
   if (credentials->times.endtime <= current_time)
     {
@@ -561,16 +567,15 @@
 verify_identity (GoaKerberosIdentity  *self,
                  GError              **error)
 {
-  krb5_principal principal;
+  krb5_principal principal = NULL;
   krb5_cc_cursor cursor;
   krb5_creds credentials;
   krb5_error_code error_code;
-  VerificationLevel verification_level;
-
-  set_expiration_time (self, 0);
+  krb5_timestamp expiration_time = 0;
+  VerificationLevel verification_level = VERIFICATION_LEVEL_UNVERIFIED;
 
   if (self->priv->credentials_cache == NULL)
-    return VERIFICATION_LEVEL_UNVERIFIED;
+    goto out;
 
   error_code = krb5_cc_get_principal (self->priv->kerberos_context,
                                       self->priv->credentials_cache,
@@ -579,7 +584,7 @@
   if (error_code != 0)
     {
       if (error_code == KRB5_CC_END || error_code == KRB5_FCC_NOFILE)
-        return VERIFICATION_LEVEL_UNVERIFIED;
+        goto out;
 
       set_error_from_krb5_error_code (self,
                                       error,
@@ -587,7 +592,8 @@
                                       error_code,
                                       _("Could not find identity in "
                                         "credential cache: %k"));
-      return VERIFICATION_LEVEL_ERROR;
+      verification_level = VERIFICATION_LEVEL_ERROR;
+      goto out;
     }
 
   error_code = krb5_cc_start_seq_get (self->priv->kerberos_context,
@@ -616,7 +622,7 @@
     {
       if (credentials_validate_existence (self, principal, &credentials))
         {
-          if (!credentials_are_expired (self, &credentials))
+          if (!credentials_are_expired (self, &credentials, &expiration_time))
             verification_level = VERIFICATION_LEVEL_SIGNED_IN;
           else
             verification_level = VERIFICATION_LEVEL_EXISTS;
@@ -661,7 +667,10 @@
       goto out;
     }
 out:
-  krb5_free_principal (self->priv->kerberos_context, principal);
+  set_expiration_time (self, expiration_time);
+
+  if (principal != NULL)
+    krb5_free_principal (self->priv->kerberos_context, principal);
   return verification_level;
 }
 
@@ -867,7 +876,9 @@
   GTimeSpan time_span_until_expiration;
 
   now = g_date_time_new_now_local ();
+  G_LOCK (identity_lock);
   expiration_time = g_date_time_new_from_unix_local (self->priv->expiration_time);
+  G_UNLOCK (identity_lock);
   time_span_until_expiration = g_date_time_difference (expiration_time, now);
   g_date_time_unref (now);
 
@@ -988,7 +999,9 @@
                            operation->cancellable,
                            operation->inquiry_data);
 
-  if (!goa_identity_inquiry_is_complete (inquiry))
+  if (goa_identity_inquiry_is_failed (inquiry))
+    error_code = KRB5_LIBOS_CANTREADPWD;
+  else if (!goa_identity_inquiry_is_complete (inquiry))
     g_cancellable_cancel (operation->cancellable);
 
   if (g_cancellable_is_cancelled (operation->cancellable))
diff -Nru gnome-online-accounts-3.14.1/src/goaidentity/goakerberosidentityinquiry.c gnome-online-accounts-3.14.2/src/goaidentity/goakerberosidentityinquiry.c
--- gnome-online-accounts-3.14.1/src/goaidentity/goakerberosidentityinquiry.c	2014-09-16 15:33:08.000000000 +0200
+++ gnome-online-accounts-3.14.2/src/goaidentity/goakerberosidentityinquiry.c	2014-11-12 15:14:32.000000000 +0100
@@ -33,6 +33,7 @@
   GList *queries;
   int number_of_queries;
   int number_of_unanswered_queries;
+  gboolean is_failed;
 };
 
 typedef struct
@@ -230,7 +231,19 @@
 
   self = GOA_KERBEROS_IDENTITY_INQUIRY (inquiry);
 
-  return self->priv->number_of_unanswered_queries == 0;
+  return self->priv->number_of_unanswered_queries == 0 || self->priv->is_failed;
+}
+
+static gboolean
+goa_kerberos_identity_inquiry_is_failed (GoaIdentityInquiry *inquiry)
+{
+  GoaKerberosIdentityInquiry *self;
+
+  g_return_val_if_fail (GOA_IS_KERBEROS_IDENTITY_INQUIRY (inquiry), FALSE);
+
+  self = GOA_KERBEROS_IDENTITY_INQUIRY (inquiry);
+
+  return self->priv->is_failed;
 }
 
 static void
@@ -252,12 +265,20 @@
 }
 
 static void
+goa_kerberos_identity_inquiry_fail (GoaKerberosIdentityInquiry *self)
+{
+  self->priv->is_failed = TRUE;
+  _goa_identity_inquiry_emit_complete (GOA_IDENTITY_INQUIRY (self));
+}
+
+static void
 goa_kerberos_identity_inquiry_answer_query (GoaIdentityInquiry * inquiry,
                                             GoaIdentityQuery *query,
                                             const char *answer)
 {
   GoaKerberosIdentityInquiry *self;
   GoaKerberosIdentityQuery *kerberos_query = (GoaKerberosIdentityQuery *) query;
+  size_t answer_length;
 
   g_return_if_fail (GOA_IS_KERBEROS_IDENTITY_INQUIRY (inquiry));
   g_return_if_fail (inquiry == kerberos_query->inquiry);
@@ -265,14 +286,20 @@
 
   self = GOA_KERBEROS_IDENTITY_INQUIRY (inquiry);
 
-  inquiry = kerberos_query->inquiry;
+  answer_length = strlen (answer);
 
-  strncpy (kerberos_query->kerberos_prompt->reply->data,
-           answer, kerberos_query->kerberos_prompt->reply->length);
-  kerberos_query->kerberos_prompt->reply->length =
-    (unsigned int) strlen (kerberos_query->kerberos_prompt->reply->data);
+  if (kerberos_query->kerberos_prompt->reply->length < answer_length)
+    {
+      goa_kerberos_identity_inquiry_fail (self);
+    }
+  else
+    {
+      strncpy (kerberos_query->kerberos_prompt->reply->data,
+               answer, kerberos_query->kerberos_prompt->reply->length);
+      kerberos_query->kerberos_prompt->reply->length = (unsigned int) answer_length;
 
-  goa_kerberos_identity_inquiry_mark_query_answered (self, kerberos_query);
+      goa_kerberos_identity_inquiry_mark_query_answered (self, kerberos_query);
+    }
 }
 
 static void
@@ -361,6 +388,7 @@
   interface->get_name = goa_kerberos_identity_inquiry_get_name;
   interface->get_banner = goa_kerberos_identity_inquiry_get_banner;
   interface->is_complete = goa_kerberos_identity_inquiry_is_complete;
+  interface->is_failed = goa_kerberos_identity_inquiry_is_failed;
   interface->answer_query = goa_kerberos_identity_inquiry_answer_query;
   interface->iter_init = goa_kerberos_identity_inquiry_iter_init;
   interface->iter_next = goa_kerberos_identity_inquiry_iter_next;
diff -Nru gnome-online-accounts-3.14.1/src/goaidentity/goakerberosidentitymanager.c gnome-online-accounts-3.14.2/src/goaidentity/goakerberosidentitymanager.c
--- gnome-online-accounts-3.14.1/src/goaidentity/goakerberosidentitymanager.c	2014-09-16 15:33:08.000000000 +0200
+++ gnome-online-accounts-3.14.2/src/goaidentity/goakerberosidentitymanager.c	2014-11-12 15:14:32.000000000 +0100
@@ -124,7 +124,7 @@
 {
   Operation *operation;
 
-  operation = g_slice_new (Operation);
+  operation = g_slice_new0 (Operation);
 
   operation->manager = self;
   operation->type = type;

Reply to: