Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package gnome-online-accounts for
openSUSE:Factory checked in at 2025-10-14 18:06:58
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gnome-online-accounts (Old)
and /work/SRC/openSUSE:Factory/.gnome-online-accounts.new.18484 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gnome-online-accounts"
Tue Oct 14 18:06:58 2025 rev:105 rq:1311121 version:3.56.1
Changes:
--------
---
/work/SRC/openSUSE:Factory/gnome-online-accounts/gnome-online-accounts.changes
2025-09-24 15:21:27.777226806 +0200
+++
/work/SRC/openSUSE:Factory/.gnome-online-accounts.new.18484/gnome-online-accounts.changes
2025-10-14 18:08:02.138069034 +0200
@@ -1,0 +2,10 @@
+Sat Oct 11 17:36:39 UTC 2025 - Bjørn Lie <[email protected]>
+
+- Update to version 3.56.1:
+ + Bugs fixed:
+ - Support for saving a Kerberos password after the first login
+ - Changing expired kerberos password is not supported
+ - Provided Files URI does not override undiscovered endpoint
+ - DAV client rejects 204 status in OPTIONS request handler
+
+-------------------------------------------------------------------
Old:
----
gnome-online-accounts-3.56.0.obscpio
New:
----
gnome-online-accounts-3.56.1.obscpio
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ gnome-online-accounts.spec ++++++
--- /var/tmp/diff_new_pack.jxuBcu/_old 2025-10-14 18:08:03.934145528 +0200
+++ /var/tmp/diff_new_pack.jxuBcu/_new 2025-10-14 18:08:03.938145698 +0200
@@ -17,7 +17,7 @@
Name: gnome-online-accounts
-Version: 3.56.0
+Version: 3.56.1
Release: 0
Summary: GNOME service to access online accounts
License: LGPL-2.0-or-later
++++++ _service ++++++
--- /var/tmp/diff_new_pack.jxuBcu/_old 2025-10-14 18:08:03.970147061 +0200
+++ /var/tmp/diff_new_pack.jxuBcu/_new 2025-10-14 18:08:03.974147231 +0200
@@ -3,7 +3,7 @@
<service name="obs_scm" mode="manual">
<param name="scm">git</param>
<param
name="url">https://gitlab.gnome.org/GNOME/gnome-online-accounts.git</param>
- <param name="revision">3.56.0</param>
+ <param name="revision">3.56.1</param>
<param name="versionformat">@PARENT_TAG@+@TAG_OFFSET@</param>
<param name="versionrewrite-pattern">(.*)\+0</param>
<param name="versionrewrite-replacement">\1</param>
++++++ gnome-online-accounts-3.56.0.obscpio ->
gnome-online-accounts-3.56.1.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/gnome-online-accounts-3.56.0/NEWS
new/gnome-online-accounts-3.56.1/NEWS
--- old/gnome-online-accounts-3.56.0/NEWS 2025-09-13 20:34:22.000000000
+0200
+++ new/gnome-online-accounts-3.56.1/NEWS 2025-10-11 19:18:34.000000000
+0200
@@ -1,3 +1,11 @@
+Overview of changes in 3.56.1
+=============================
+* Bugs fixed:
+ - #417 Support for saving a Kerberos password after the first login
+ - #436 Changing expired kerberos password is not supported
+ - #437 Provided Files URI does not override undiscovered endpoint
+ - #439 DAV client rejects 204 status in OPTIONS request handler
+
Overview of changes in 3.56.0
=============================
* Changes:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/gnome-online-accounts-3.56.0/meson.build
new/gnome-online-accounts-3.56.1/meson.build
--- old/gnome-online-accounts-3.56.0/meson.build 2025-09-13
20:34:22.000000000 +0200
+++ new/gnome-online-accounts-3.56.1/meson.build 2025-10-11
19:18:34.000000000 +0200
@@ -1,6 +1,6 @@
project(
'gnome-online-accounts', 'c',
- version: '3.56.0',
+ version: '3.56.1',
license: 'LGPL2+',
default_options: [
'buildtype=debugoptimized',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/gnome-online-accounts-3.56.0/src/goabackend/goadavclient.c
new/gnome-online-accounts-3.56.1/src/goabackend/goadavclient.c
--- old/gnome-online-accounts-3.56.0/src/goabackend/goadavclient.c
2025-09-13 20:34:22.000000000 +0200
+++ new/gnome-online-accounts-3.56.1/src/goabackend/goadavclient.c
2025-10-11 19:18:34.000000000 +0200
@@ -36,15 +36,16 @@
/* Fastmail
* See:
https://www.fastmail.help/hc/en-us/articles/1500000278342-Server-names-and-ports
*/
+#define FASTMAIL_HOSTNAME "fastmail.com"
#define FASTMAIL_WEBDAV "https://myfiles.fastmail.com"
#define FASTMAIL_CALDAV "https://caldav.fastmail.com/.well-known/caldav"
#define FASTMAIL_CARDDAV "https://carddav.fastmail.com/.well-known/carddav"
/* mailbox.org
- * See: https://kb.mailbox.org/en/private/drive-article/webdav-for-linux/
+ * See: https://kb.mailbox.org/en/private/drive/webdav-for-linux/
*/
-#define MAILBOX_ORG_HOSTNAME "dav.mailbox.org"
-#define MAILBOX_ORG_WEBDAV "https://dav.mailbox.org/servlet/webdav.infostore"
+#define MAILBOX_ORG_HOSTNAME "mailbox.org"
+#define MAILBOX_ORG_WEBDAV
"https://dav.mailbox.org/servlet/webdav.infostore/"
#define MAILBOX_ORG_CALDAV "https://dav.mailbox.org/caldav"
#define MAILBOX_ORG_CARDDAV "https://dav.mailbox.org/carddav"
@@ -295,6 +296,9 @@
switch (status)
{
case SOUP_STATUS_OK:
+ case SOUP_STATUS_NON_AUTHORITATIVE:
+ case SOUP_STATUS_NO_CONTENT:
+ case SOUP_STATUS_MULTI_STATUS:
break;
case SOUP_STATUS_NOT_FOUND:
@@ -1015,6 +1019,9 @@
switch (status)
{
case SOUP_STATUS_OK:
+ case SOUP_STATUS_NON_AUTHORITATIVE:
+ case SOUP_STATUS_NO_CONTENT:
+ case SOUP_STATUS_MULTI_STATUS:
break;
/* Some responses are non-fatal for discovery */
@@ -1258,8 +1265,8 @@
if (host != NULL)
base_domain = soup_tld_get_base_domain (host, NULL);
- if (g_strcmp0 (host, "fastmail.com") == 0
- || g_strcmp0 (base_domain, "fastmail.com") == 0)
+ if (g_strcmp0 (host, FASTMAIL_HOSTNAME) == 0
+ || g_strcmp0 (base_domain, FASTMAIL_HOSTNAME) == 0)
{
g_queue_push_tail (&discover->candidates,
goa_dav_config_new (GOA_SERVICE_TYPE_CALDAV,
FASTMAIL_CALDAV, NULL));
@@ -1271,8 +1278,8 @@
return TRUE;
}
- if (g_strcmp0 (host, "mailbox.org") == 0
- || g_strcmp0 (base_domain, "mailbox.org") == 0)
+ if (g_strcmp0 (host, MAILBOX_ORG_HOSTNAME) == 0
+ || g_strcmp0 (base_domain, MAILBOX_ORG_HOSTNAME) == 0)
{
g_queue_push_tail (&discover->candidates,
goa_dav_config_new (GOA_SERVICE_TYPE_CALDAV,
MAILBOX_ORG_CALDAV, NULL));
@@ -1284,8 +1291,8 @@
return TRUE;
}
- if (g_strcmp0 (host, "mail.ru") == 0
- || g_strcmp0 (base_domain, "mail.ru") == 0)
+ if (g_strcmp0 (host, MAIL_RU_HOSTNAME) == 0
+ || g_strcmp0 (base_domain, MAIL_RU_HOSTNAME) == 0)
{
g_queue_push_tail (&discover->candidates,
goa_dav_config_new (GOA_SERVICE_TYPE_CALDAV,
MAIL_RU_CALDAV, NULL));
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/gnome-online-accounts-3.56.0/src/goabackend/goaimapsmtpprovider.c
new/gnome-online-accounts-3.56.1/src/goabackend/goaimapsmtpprovider.c
--- old/gnome-online-accounts-3.56.0/src/goabackend/goaimapsmtpprovider.c
2025-09-13 20:34:22.000000000 +0200
+++ new/gnome-online-accounts-3.56.1/src/goabackend/goaimapsmtpprovider.c
2025-10-11 19:18:34.000000000 +0200
@@ -193,7 +193,7 @@
"imap-use-ssl", imap_use_ssl,
"imap-use-tls", imap_use_tls,
"imap-accept-ssl-errors", imap_accept_ssl_errors,
- "smtp-supported", TRUE,
+ "smtp-supported", (smtp_host != NULL),
"smtp-host", smtp_host,
"smtp-user-name", smtp_username,
"smtp-use-auth", smtp_use_auth,
@@ -501,7 +501,12 @@
username = gtk_editable_get_text (GTK_EDITABLE (data->smtp_username));
password = gtk_editable_get_text (GTK_EDITABLE (data->smtp_password));
- if (server != NULL && *server != '\0')
+ if (server == NULL || *server == '\0')
+ {
+ goa_provider_dialog_set_state (data->dialog, GOA_DIALOG_READY);
+ return;
+ }
+ else
{
if ((username != NULL && *username != '\0')
&& (password != NULL && *password != '\0'))
@@ -905,20 +910,24 @@
"ImapUseTls", (imap_tls_type ==
GOA_TLS_TYPE_STARTTLS) ? "true" : "false");
g_variant_builder_add (&details, "{ss}",
"ImapAcceptSslErrors", (data->imap_accept_ssl_errors)
? "true" : "false");
- g_variant_builder_add (&details, "{ss}", "SmtpHost", smtp_server);
- g_variant_builder_add (&details, "{ss}", "SmtpUseAuth",
(data->smtp_use_auth) ? "true" : "false");
- if (data->smtp_use_auth)
+
+ if (smtp_server != NULL && *smtp_server != '\0')
{
- g_variant_builder_add (&details, "{ss}", "SmtpUserName", smtp_username);
- g_variant_builder_add (&details, "{ss}", "SmtpAuthLogin",
(data->smtp_auth_login) ? "true" : "false");
- g_variant_builder_add (&details, "{ss}", "SmtpAuthPlain",
(data->smtp_auth_plain) ? "true" : "false");
+ g_variant_builder_add (&details, "{ss}", "SmtpHost", smtp_server);
+ g_variant_builder_add (&details, "{ss}", "SmtpUseAuth",
(data->smtp_use_auth) ? "true" : "false");
+ if (data->smtp_use_auth)
+ {
+ g_variant_builder_add (&details, "{ss}", "SmtpUserName",
smtp_username);
+ g_variant_builder_add (&details, "{ss}", "SmtpAuthLogin",
(data->smtp_auth_login) ? "true" : "false");
+ g_variant_builder_add (&details, "{ss}", "SmtpAuthPlain",
(data->smtp_auth_plain) ? "true" : "false");
+ }
+ g_variant_builder_add (&details, "{ss}",
+ "SmtpUseSsl", (smtp_tls_type == GOA_TLS_TYPE_SSL)
? "true" : "false");
+ g_variant_builder_add (&details, "{ss}",
+ "SmtpUseTls", (smtp_tls_type ==
GOA_TLS_TYPE_STARTTLS) ? "true" : "false");
+ g_variant_builder_add (&details, "{ss}",
+ "SmtpAcceptSslErrors",
(data->smtp_accept_ssl_errors) ? "true" : "false");
}
- g_variant_builder_add (&details, "{ss}",
- "SmtpUseSsl", (smtp_tls_type == GOA_TLS_TYPE_SSL) ?
"true" : "false");
- g_variant_builder_add (&details, "{ss}",
- "SmtpUseTls", (smtp_tls_type ==
GOA_TLS_TYPE_STARTTLS) ? "true" : "false");
- g_variant_builder_add (&details, "{ss}",
- "SmtpAcceptSslErrors", (data->smtp_accept_ssl_errors)
? "true" : "false");
goa_manager_call_add_account (goa_client_get_manager (data->client),
goa_provider_get_provider_type (provider),
@@ -975,6 +984,14 @@
g_object_get (data->smtp_encryption, "selected", &smtp_tls_type, NULL);
smtp_tls_type += 1;
+ /* If no server was provided, this is an IMAP-only account
+ */
+ if (smtp_server == NULL || *smtp_server == '\0')
+ {
+ add_account_store_credentials (task);
+ return;
+ }
+
g_clear_object (&data->smtp_auth);
goa_utils_parse_email_address (email_address, NULL, &domain);
data->smtp_auth = goa_smtp_auth_new (domain, smtp_username, smtp_password);
@@ -1459,21 +1476,24 @@
/* SMTP */
subtitle = goa_util_lookup_keyfile_string (object, "SmtpHost");
- username = goa_util_lookup_keyfile_string (object, "SmtpUserName");
- if (g_strcmp0 (g_get_user_name (), subtitle) != 0)
+ if (subtitle != NULL)
{
- g_autofree char *domain = g_steal_pointer (&subtitle);
- subtitle = g_strconcat (username, "@", domain, NULL);
- }
+ username = goa_util_lookup_keyfile_string (object, "SmtpUserName");
+ if (g_strcmp0 (g_get_user_name (), subtitle) != 0)
+ {
+ g_autofree char *domain = g_steal_pointer (&subtitle);
+ subtitle = g_strconcat (username, "@", domain, NULL);
+ }
- row = g_object_new (ADW_TYPE_ACTION_ROW,
- "title", _("SMTP"),
- "subtitle", subtitle,
- NULL);
- gtk_widget_add_css_class (row, "property");
- adw_preferences_group_add (ADW_PREFERENCES_GROUP (ret), row);
- g_free (subtitle);
- g_free (username);
+ row = g_object_new (ADW_TYPE_ACTION_ROW,
+ "title", _("SMTP"),
+ "subtitle", subtitle,
+ NULL);
+ gtk_widget_add_css_class (row, "property");
+ adw_preferences_group_add (ADW_PREFERENCES_GROUP (ret), row);
+ g_free (username);
+ g_free (subtitle);
+ }
return ret;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/gnome-online-accounts-3.56.0/src/goabackend/goakerberosprovider-priv.h
new/gnome-online-accounts-3.56.1/src/goabackend/goakerberosprovider-priv.h
--- old/gnome-online-accounts-3.56.0/src/goabackend/goakerberosprovider-priv.h
2025-09-13 20:34:22.000000000 +0200
+++ new/gnome-online-accounts-3.56.1/src/goabackend/goakerberosprovider-priv.h
2025-10-11 19:18:34.000000000 +0200
@@ -27,6 +27,7 @@
#include <gio/gio.h>
#include <goabackend/goaprovider-priv.h>
#include <goabackend/goakerberosprovider.h>
+#include <gcr/gcr.h>
G_BEGIN_DECLS
@@ -71,6 +72,18 @@
const char
*preauth_source,
GCancellable
*cancellable,
GError
**error);
+void goa_kerberos_provider_prompt_password
(GoaKerberosProvider *self,
+
GCancellable *cancellable,
+
GAsyncReadyCallback callback,
+ gpointer
user_data);
+GcrSecretExchange *goa_kerberos_provider_prompt_password_finish
(GoaKerberosProvider *self,
+ gboolean
*remember_password_out,
+
GAsyncResult *result,
+ GError
**error);
+GcrSecretExchange *goa_kerberos_provider_prompt_password_sync
(GoaKerberosProvider *self,
+ gboolean
*remember_password_out,
+
GCancellable *cancellable,
+ GError
**error);
G_END_DECLS
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/gnome-online-accounts-3.56.0/src/goabackend/goakerberosprovider.c
new/gnome-online-accounts-3.56.1/src/goabackend/goakerberosprovider.c
--- old/gnome-online-accounts-3.56.0/src/goabackend/goakerberosprovider.c
2025-09-13 20:34:22.000000000 +0200
+++ new/gnome-online-accounts-3.56.1/src/goabackend/goakerberosprovider.c
2025-10-11 19:18:34.000000000 +0200
@@ -25,6 +25,7 @@
#include "goakerberosprovider-priv.h"
#include "goautils.h"
#include "goaidentity.h"
+#include "goaidentityerror.h"
#include "goaidentitymanagererror.h"
#include <gcr/gcr.h>
@@ -253,294 +254,252 @@
/*
----------------------------------------------------------------------------------------------------
*/
static void
-refresh_account_ticket_cb (GoaKerberosProvider *self,
- GAsyncResult *result,
- gpointer user_data)
+goa_kerberos_provider_set_error (GError **error)
{
- g_autoptr(GTask) task = G_TASK (g_steal_pointer (&user_data));
- GError *error = NULL;
+ GQuark error_domain = GOA_ERROR;
+ int error_code = GOA_ERROR_FAILED;
+ g_autofree char *error_message = NULL;
- if (!goa_kerberos_provider_get_ticket_finish (self, result, &error))
- g_task_return_error (task, error);
- else
- g_task_return_boolean (task, TRUE);
-}
+ if (error != NULL && *error != NULL)
+ {
+ g_debug ("%s(): amending error (%s:%u:%s)",
+ G_STRFUNC,
+ g_quark_to_string ((*error)->domain),
+ (*error)->code,
+ (*error)->message);
-static void
-refresh_account (GoaProvider *provider,
- GoaClient *client,
- GoaObject *object,
- GtkWidget *parent,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GoaKerberosProvider *self = GOA_KERBEROS_PROVIDER (provider);
- g_autoptr(GTask) task = NULL;
+ g_dbus_error_strip_remote_error (*error);
+ error_domain = (*error)->domain;
+ error_code = (*error)->code;
+ error_message = g_strdup ((*error)->message);
+ }
- g_assert (GOA_IS_KERBEROS_PROVIDER (provider));
- g_assert (GOA_IS_CLIENT (client));
- g_assert (GOA_IS_OBJECT (object));
- g_assert (parent == NULL || GTK_IS_WIDGET (parent));
- g_assert (cancellable == NULL || G_IS_CANCELLABLE (cancellable));
+ if (error_domain == GOA_IDENTITY_MANAGER_ERROR)
+ {
+ switch ((GoaIdentityManagerError)error_code)
+ {
+ case GOA_IDENTITY_MANAGER_ERROR_INITIALIZING:
+ case GOA_IDENTITY_MANAGER_ERROR_IDENTITY_NOT_FOUND:
+ case GOA_IDENTITY_MANAGER_ERROR_ACCESSING_CREDENTIALS:
+ case GOA_IDENTITY_MANAGER_ERROR_UNSUPPORTED_CREDENTIALS:
+ error_code = GOA_ERROR_FAILED;
+ break;
- task = g_task_new (provider, cancellable, callback, user_data);
- g_task_set_source_tag (task, refresh_account);
+ case GOA_IDENTITY_MANAGER_ERROR_CREATING_IDENTITY:
+ error_code = GOA_ERROR_NOT_AUTHORIZED;
+ g_set_str (&error_message, _("Authentication failed"));
+ break;
+ }
+ }
+ else if (error_domain == GOA_IDENTITY_ERROR)
+ {
+ switch ((GoaIdentityError)error_code)
+ {
+ case GOA_IDENTITY_ERROR_NOT_FOUND:
+ case GOA_IDENTITY_ERROR_VERIFYING:
+ case GOA_IDENTITY_ERROR_RENEWING:
+ case GOA_IDENTITY_ERROR_CREDENTIALS_UNAVAILABLE:
+ case GOA_IDENTITY_ERROR_ENUMERATING_CREDENTIALS:
+ case GOA_IDENTITY_ERROR_ALLOCATING_CREDENTIALS:
+ case GOA_IDENTITY_ERROR_SAVING_CREDENTIALS:
+ case GOA_IDENTITY_ERROR_REMOVING_CREDENTIALS:
+ case GOA_IDENTITY_ERROR_PARSING_IDENTIFIER:
+ error_code = GOA_ERROR_FAILED;
+ break;
- goa_kerberos_provider_get_ticket (self,
- object,
- TRUE, /* Allow interaction */
- cancellable,
- (GAsyncReadyCallback)
refresh_account_ticket_cb,
- g_steal_pointer (&task));
+ case GOA_IDENTITY_ERROR_AUTHENTICATION_FAILED:
+ error_code = GOA_ERROR_NOT_AUTHORIZED;
+ g_set_str (&error_message, _("Authentication failed"));
+ break;
+ }
+ }
+ else if (error_message == NULL)
+ {
+ error_message = g_strdup (_("Unknown error"));
+ }
+
+ g_clear_error (error);
+ g_set_error_literal (error, GOA_ERROR, error_code, error_message);
}
/*
----------------------------------------------------------------------------------------------------
*/
typedef struct
{
- GcrSecretExchange *secret_exchange;
+ GoaProviderDialog *dialog;
+ GoaClient *client;
GoaObject *object;
+ GcrSecretExchange *secret;
gboolean remember_password;
- gchar *principal;
-} InitialSignInData;
-
-static InitialSignInData *
-initial_sign_in_data_new (GoaObject *object, const gchar *principal)
-{
- InitialSignInData *data;
-
- data = g_slice_new0 (InitialSignInData);
-
- if (object != NULL)
- data->object = g_object_ref (object);
- data->principal = g_strdup (principal);
-
- return data;
-}
+ GtkWidget *principal;
+ GtkWidget *password;
+} AddAccountData;
static void
-initial_sign_in_data_free (InitialSignInData *data)
+add_account_data_free (gpointer user_data)
{
- g_clear_object (&data->secret_exchange);
- g_clear_object (&data->object);
- g_free (data->principal);
+ AddAccountData *data = (AddAccountData *)user_data;
- g_slice_free (InitialSignInData, data);
+ g_clear_object (&data->client);
+ g_clear_object (&data->object);
+ g_clear_object (&data->secret);
+ g_free (data);
}
+/*
----------------------------------------------------------------------------------------------------
*/
+
static void
-on_initial_sign_in_done (GoaKerberosProvider *self,
- GAsyncResult *result,
- GTask *task)
+refresh_account_signin_cb (GoaKerberosProvider *self,
+ GAsyncResult *result,
+ gpointer user_data)
{
- GError *error;
- InitialSignInData *data;
- char *object_path;
-
- data = (InitialSignInData *) g_task_get_task_data (task);
+ g_autoptr(GTask) task = G_TASK (g_steal_pointer (&user_data));
+ AddAccountData *data = g_task_get_task_data (task);
+ g_autofree char *object_path = NULL;
+ GError *error = NULL;
- error = NULL;
object_path = goa_kerberos_provider_sign_in_finish (self, result, &error);
- if (error != NULL)
+ if (object_path == NULL)
{
- g_task_return_error (task, error);
- goto out;
+ goa_kerberos_provider_set_error (&error);
+ g_task_return_error (task, g_steal_pointer (&error));
+ return;
}
+ /* Save the new password */
if (data->remember_password)
{
- GVariantBuilder builder;
-
- if (object_path != NULL && data->object != NULL)
+ GVariantBuilder builder;
+ const char *password;
+ g_autoptr(GError) password_error = NULL;
+
+ /* FIXME: we go to great lengths to keep the password in non-pageable
memory,
+ * and then just duplicate it into a gvariant here
+ */
+ password = gcr_secret_exchange_get_secret (data->secret, NULL);
+ g_variant_builder_init (&builder, G_VARIANT_TYPE_VARDICT);
+ g_variant_builder_add (&builder,
+ "{sv}",
+ "password",
+ g_variant_new_string (password));
+
+ if (!goa_utils_store_credentials_for_object_sync (GOA_PROVIDER (self),
+ data->object,
+ g_variant_builder_end
(&builder),
+ NULL,
+ &password_error))
{
- const char *password;
-
- password = gcr_secret_exchange_get_secret (data->secret_exchange,
NULL);
-
- /* FIXME: we go to great lengths to keep the password in
non-pageable memory,
- * and then just duplicate it into a gvariant here
- */
- g_variant_builder_init (&builder, G_VARIANT_TYPE_VARDICT);
- g_variant_builder_add (&builder,
- "{sv}",
- "password",
- g_variant_new_string (password));
-
- error = NULL;
- goa_utils_store_credentials_for_object_sync (GOA_PROVIDER (self),
- data->object,
- g_variant_builder_end
(&builder),
- NULL,
- NULL);
+ g_warning ("%s(): %s", G_STRFUNC, password_error->message);
}
}
g_task_return_boolean (task, TRUE);
-
- out:
- g_free (object_path);
- g_object_unref (task);
}
static void
-on_system_prompt_answered_for_initial_sign_in (GcrPrompt *prompt,
- GAsyncResult *result,
- GTask *task)
-{
- GoaKerberosProvider *self;
- GCancellable *cancellable;
- GError *error;
- InitialSignInData *data;
- const char *password;
- const char *preauth_source;
- GcrSecretExchange *secret_exchange;
-
- self = GOA_KERBEROS_PROVIDER (g_task_get_source_object (task));
- cancellable = g_task_get_cancellable (task);
- data = (InitialSignInData *) g_task_get_task_data (task);
-
- /* We currently don't prompt the user to choose a preauthentication source
during initial sign in
- * so we assume there's no preauthentication source
- */
- preauth_source = NULL;
-
- error = NULL;
- password = gcr_prompt_password_finish (prompt, result, &error);
+refresh_account_password_cb (GoaKerberosProvider *self,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ g_autoptr(GTask) task = G_TASK (g_steal_pointer (&user_data));
+ AddAccountData *data = g_task_get_task_data (task);
+ GCancellable *cancellable = g_task_get_cancellable (task);
+ GoaAccount *account = NULL;
+ g_autoptr(GoaTicketing) ticketing = NULL;
+ GVariant *details;
+ const char *principal;
+ const char *preauth_source;
+ GError *error = NULL;
- if (password == NULL)
+ data->secret = goa_kerberos_provider_prompt_password_finish (self,
+
&data->remember_password,
+ result,
+ &error);
+ if (data->secret == NULL)
{
- gcr_system_prompt_close (GCR_SYSTEM_PROMPT (prompt), NULL, NULL);
-
- if (error != NULL)
- {
- g_task_return_error (task, error);
- }
- else
- {
- g_task_return_new_error (task,
- G_IO_ERROR,
- G_IO_ERROR_CANCELLED,
- _("Operation was cancelled"));
- }
-
- g_object_unref (task);
+ g_task_return_error (task, g_steal_pointer (&error));
return;
}
- secret_exchange = gcr_system_prompt_get_secret_exchange (GCR_SYSTEM_PROMPT
(prompt));
- data->secret_exchange = g_object_ref (secret_exchange);
-
- data->remember_password = gcr_prompt_get_choice_chosen (prompt);
+ account = goa_object_peek_account (data->object);
+ principal = goa_account_get_identity (account);
- gcr_system_prompt_close (GCR_SYSTEM_PROMPT (prompt), NULL, NULL);
+ ticketing = goa_object_get_ticketing (data->object);
+ details = goa_ticketing_get_details (ticketing);
+ g_variant_lookup (details, "preauthentication-source", "&s",
&preauth_source);
goa_kerberos_provider_sign_in (self,
- data->principal,
- password,
+ principal,
+ gcr_secret_exchange_get_secret (data->secret,
NULL),
preauth_source,
cancellable,
- (GAsyncReadyCallback)
- on_initial_sign_in_done,
- task);
+ (GAsyncReadyCallback)
refresh_account_signin_cb,
+ g_steal_pointer (&task));
}
static void
-on_system_prompt_open_for_initial_sign_in (GcrSystemPrompt *system_prompt,
- GAsyncResult *result,
- GTask *task)
+refresh_account_ticket_cb (GoaKerberosProvider *self,
+ GAsyncResult *result,
+ gpointer user_data)
{
- GCancellable *cancellable;
- GcrPrompt *prompt = NULL;
- GError *error;
-
- cancellable = g_task_get_cancellable (task);
- error = NULL;
- prompt = gcr_system_prompt_open_finish (result, &error);
+ g_autoptr(GTask) task = G_TASK (g_steal_pointer (&user_data));
+ GCancellable *cancellable = g_task_get_cancellable (task);
+ GError *error = NULL;
- if (prompt == NULL)
+ if (goa_kerberos_provider_get_ticket_finish (self, result, &error))
{
- g_task_return_error (task, error);
- g_object_unref (task);
- goto out;
+ g_task_return_boolean (task, TRUE);
+ return;
}
- gcr_prompt_set_title (prompt, _("Log In to Realm"));
- gcr_prompt_set_description (prompt, _("Please enter your password below."));
- gcr_prompt_set_choice_label (prompt, _("Remember this password"));
-
- gcr_prompt_password_async (prompt,
- cancellable,
- (GAsyncReadyCallback)
- on_system_prompt_answered_for_initial_sign_in,
- task);
-
- out:
- g_clear_object (&prompt);
+ goa_kerberos_provider_set_error (&error);
+ if (error->code == GOA_ERROR_NOT_AUTHORIZED)
+ {
+ goa_kerberos_provider_prompt_password (self,
+ cancellable,
+ (GAsyncReadyCallback)
refresh_account_password_cb,
+ g_steal_pointer (&task));
+ }
+ else
+ {
+ g_task_return_error (task, g_steal_pointer (&error));
+ }
}
static void
-perform_initial_sign_in (GoaKerberosProvider *self,
- GoaObject *object,
- const char *principal,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
-
- GTask *task;
- InitialSignInData *data;
-
- data = initial_sign_in_data_new (object, principal);
-
- task = g_task_new (self, cancellable, callback, user_data);
- g_task_set_task_data (task, data, (GDestroyNotify)
initial_sign_in_data_free);
-
- gcr_system_prompt_open_async (-1,
- cancellable,
- (GAsyncReadyCallback)
- on_system_prompt_open_for_initial_sign_in,
- task);
-}
-
-static gboolean
-perform_initial_sign_in_finish (GoaKerberosProvider *self,
- GAsyncResult *result,
- GError **error)
+refresh_account (GoaProvider *provider,
+ GoaClient *client,
+ GoaObject *object,
+ GtkWidget *parent,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
{
- GTask *task;
-
- g_return_val_if_fail (GOA_IS_KERBEROS_PROVIDER (self), FALSE);
-
- g_return_val_if_fail (g_task_is_valid (result, self), FALSE);
- task = G_TASK (result);
-
- g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
-
- return g_task_propagate_boolean (task, error);
-}
-
-/*
----------------------------------------------------------------------------------------------------
*/
+ GoaKerberosProvider *self = GOA_KERBEROS_PROVIDER (provider);
+ g_autoptr(GTask) task = NULL;
+ AddAccountData *data;
-typedef struct
-{
- GoaProviderDialog *dialog;
- GoaClient *client;
- GoaObject *object;
+ g_assert (GOA_IS_KERBEROS_PROVIDER (provider));
+ g_assert (GOA_IS_CLIENT (client));
+ g_assert (GOA_IS_OBJECT (object));
+ g_assert (parent == NULL || GTK_IS_WIDGET (parent));
+ g_assert (cancellable == NULL || G_IS_CANCELLABLE (cancellable));
- GtkWidget *principal;
- GtkWidget *password;
-} AddAccountData;
+ data = g_new0 (AddAccountData, 1);
+ data->client = g_object_ref (client);
+ data->object = g_object_ref (object);
-static void
-add_account_data_free (gpointer user_data)
-{
- AddAccountData *data = (AddAccountData *)user_data;
+ task = g_task_new (provider, cancellable, callback, user_data);
+ g_task_set_task_data (task, data, add_account_data_free);
+ g_task_set_source_tag (task, refresh_account);
- g_clear_object (&data->client);
- g_clear_object (&data->object);
- g_free (data);
+ goa_kerberos_provider_get_ticket (self,
+ object,
+ TRUE, /* Allow interaction */
+ cancellable,
+ (GAsyncReadyCallback)
refresh_account_ticket_cb,
+ g_steal_pointer (&task));
}
/*
----------------------------------------------------------------------------------------------------
*/
@@ -624,7 +583,7 @@
}
static void
-add_account_signin_cb (GoaKerberosProvider *self,
+add_account_ticket_cb (GoaKerberosProvider *self,
GAsyncResult *result,
gpointer user_data)
{
@@ -636,7 +595,7 @@
account = goa_object_peek_account (data->object);
/* If sign in fails, remove the temporary account before restarting */
- if (!perform_initial_sign_in_finish (self, result, &error))
+ if (!goa_kerberos_provider_get_ticket_finish (self, result, &error))
{
goa_provider_dialog_report_error (data->dialog, error);
goa_account_call_remove (account,
@@ -661,7 +620,6 @@
GCancellable *cancellable = g_task_get_cancellable (task);
g_autofree char *object_path = NULL;
g_autoptr(GDBusObject) object = NULL;
- const char *principal = NULL;
g_autoptr(GError) error = NULL;
if (!goa_manager_call_add_account_finish (manager, &object_path, res,
&error))
@@ -673,15 +631,14 @@
object = g_dbus_object_manager_get_object (goa_client_get_object_manager
(data->client),
object_path);
g_set_object (&data->object, GOA_OBJECT (object));
- principal = gtk_editable_get_text (GTK_EDITABLE (data->principal));
/* Sign in the temporary account */
- perform_initial_sign_in (GOA_KERBEROS_PROVIDER (provider),
- GOA_OBJECT (object),
- principal,
- cancellable,
- (GAsyncReadyCallback) add_account_signin_cb,
- g_steal_pointer (&task));
+ goa_kerberos_provider_get_ticket (GOA_KERBEROS_PROVIDER (provider),
+ data->object,
+ TRUE,
+ cancellable,
+ (GAsyncReadyCallback)
add_account_ticket_cb,
+ g_steal_pointer (&task));
}
static void
@@ -874,26 +831,7 @@
if (!ticket_synced)
{
- g_dbus_error_strip_remote_error (lookup_error);
- if (lookup_error->domain == GOA_IDENTITY_MANAGER_ERROR)
- {
- lookup_error->domain = GOA_ERROR;
-
- switch ((GoaIdentityManagerError)lookup_error->code)
- {
- case GOA_IDENTITY_MANAGER_ERROR_INITIALIZING:
- lookup_error->code = GOA_ERROR_FAILED;
- break;
-
- case GOA_IDENTITY_MANAGER_ERROR_IDENTITY_NOT_FOUND:
- case GOA_IDENTITY_MANAGER_ERROR_CREATING_IDENTITY:
- case GOA_IDENTITY_MANAGER_ERROR_ACCESSING_CREDENTIALS:
- case GOA_IDENTITY_MANAGER_ERROR_UNSUPPORTED_CREDENTIALS:
- lookup_error->code = GOA_ERROR_NOT_AUTHORIZED;
- break;
- }
- }
-
+ goa_kerberos_provider_set_error (&lookup_error);
g_propagate_error (error, g_steal_pointer (&lookup_error));
goto out;
}
@@ -1160,11 +1098,12 @@
provider_class->remove_account_finish = remove_account_finish;
/* this will force associating errors in the
- * GOA_IDENTITY_MANAGER_ERROR error domain with
- * org.gnome.Identity.Manager.Error.* errors via
- * g_dbus_error_register_error_domain().
+ * GOA_IDENTITY_ERROR and GOA_IDENTITY_MANAGER_ERROR error domains
+ * with org.gnome.Identity.Error.* and org.gnome.Identity.Manager.Error.*
+ * errors via g_dbus_error_register_error_domain().
*/
goa_identity_manager_error_quark ();
+ goa_identity_error_quark ();
}
/*
----------------------------------------------------------------------------------------------------
*/
@@ -1291,6 +1230,8 @@
const char *preauth_source = NULL;
gboolean has_password = FALSE;
g_autofree char *object_path = NULL;
+ g_autoptr(GcrSecretExchange) password_exchange = NULL;
+ gboolean remember_password = FALSE;
g_autoptr(GError) lookup_error = NULL;
GError *sign_in_error = NULL;
@@ -1337,14 +1278,26 @@
if (credentials != NULL)
has_password = g_variant_lookup (credentials, "password", "&s", &password);
- if (!has_password && !is_interactive)
+ if (!has_password)
{
- g_set_error (error,
- GOA_ERROR,
- GOA_ERROR_NOT_AUTHORIZED,
- _("Did not find password for principal “%s” in
credentials"),
- identifier);
- return FALSE;
+ if (!is_interactive)
+ {
+ g_set_error (error,
+ GOA_ERROR,
+ GOA_ERROR_NOT_AUTHORIZED,
+ _("Did not find password for principal “%s” in
credentials"),
+ identifier);
+ return FALSE;
+ }
+
+ password_exchange = goa_kerberos_provider_prompt_password_sync (self,
+
&remember_password,
+
cancellable,
+ error);
+ if (password_exchange == NULL)
+ return FALSE;
+
+ password = gcr_secret_exchange_get_secret (password_exchange, NULL);
}
object_path = goa_kerberos_provider_sign_in_sync (self,
@@ -1353,13 +1306,36 @@
preauth_source,
cancellable,
&sign_in_error);
-
if (sign_in_error != NULL)
{
g_propagate_error (error, sign_in_error);
return FALSE;
}
+ if (object_path != NULL && remember_password)
+ {
+ GVariantBuilder builder;
+ g_autoptr(GError) password_error = NULL;
+
+ /* FIXME: we go to great lengths to keep the password in non-pageable
memory,
+ * and then just duplicate it into a gvariant here
+ */
+ g_variant_builder_init (&builder, G_VARIANT_TYPE_VARDICT);
+ g_variant_builder_add (&builder,
+ "{sv}",
+ "password",
+ g_variant_new_string (password));
+
+ if (!goa_utils_store_credentials_for_object_sync (GOA_PROVIDER (self),
+ object,
+ g_variant_builder_end
(&builder),
+ NULL,
+ &password_error))
+ {
+ g_warning ("%s(): %s", G_STRFUNC, password_error->message);
+ }
+ }
+
return TRUE;
}
@@ -1367,6 +1343,169 @@
typedef struct
{
+ GcrSecretExchange *secret_exchange;
+ gboolean remember_password;
+} PromptPasswordData;
+
+static void
+prompt_password_data_free (gpointer user_data)
+{
+ PromptPasswordData *data = (PromptPasswordData *)user_data;
+
+ g_clear_object (&data->secret_exchange);
+ g_free (data);
+}
+
+static void
+prompt_password_thread (GTask *task,
+ gpointer source_object,
+ gpointer task_data,
+ GCancellable *cancellable)
+{
+ GoaKerberosProvider *self = GOA_KERBEROS_PROVIDER (source_object);
+ PromptPasswordData *data = (PromptPasswordData *) task_data;
+ GError *error = NULL;
+
+ data->secret_exchange = goa_kerberos_provider_prompt_password_sync (self,
+
&data->remember_password,
+
cancellable,
+ &error);
+ if (data->secret_exchange == NULL)
+ g_task_return_error (task, g_steal_pointer (&error));
+ else
+ g_task_return_boolean (task, TRUE);
+}
+
+/*< private >
+ * goa_kerberos_provider_prompt_password:
+ * @self: a `GoaKerberosProvider`
+ * @cancellable: (nullable): a `GCancellable`
+ * @callback: (scope async): a `GAsyncReadyCallback`
+ * @user_data: (closure): user supplied data
+ *
+ * Prompt the user for a password.
+ *
+ * Call [[email protected]_password_finish] to get the result.
+ */
+void
+goa_kerberos_provider_prompt_password (GoaKerberosProvider *self,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_autoptr(GTask) task = NULL;
+
+ g_return_if_fail (GOA_IS_KERBEROS_PROVIDER (self));
+ g_return_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable));
+
+ task = g_task_new (self, cancellable, callback, user_data);
+ g_task_set_source_tag (task, goa_kerberos_provider_prompt_password);
+ g_task_set_task_data (task, g_new0 (PromptPasswordData, 1),
prompt_password_data_free);
+ g_task_run_in_thread (task, prompt_password_thread);
+}
+
+/*< private >
+ * goa_kerberos_provider_prompt_password_finish:
+ * @self: a `GoaKerberosProvider`
+ * @remember_password_out: (nullable) (out): whether to
+ * @result: a `GAsyncResult`
+ * @error: (nullable): a `GError`
+ *
+ * Finish an operation started with
[[email protected]_password].
+ *
+ * If @remember_password_out is not %NULL, the user's preference for
+ * remembering the password will be set to %TRUE or %FALSE.
+ *
+ * Returns: (nullable) (transfer full): a secret exchange on success,
+ * or %NULL with @error set
+ */
+GcrSecretExchange *
+goa_kerberos_provider_prompt_password_finish (GoaKerberosProvider *self,
+ gboolean
*remember_password_out,
+ GAsyncResult *result,
+ GError **error)
+{
+ PromptPasswordData *data;
+
+ g_return_val_if_fail (GOA_IS_KERBEROS_PROVIDER (self), NULL);
+ g_return_val_if_fail (g_task_is_valid (result, self), NULL);
+ g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+ if (!g_task_propagate_boolean (G_TASK (result), error))
+ return NULL;
+
+ data = g_task_get_task_data (G_TASK (result));
+ if (remember_password_out != NULL)
+ *remember_password_out = data->remember_password;
+
+ return g_object_ref (data->secret_exchange);
+}
+
+/*< private >
+ * goa_kerberos_provider_prompt_password_sync:
+ * @self: a `GoaKerberosProvider`
+ * @remember_password_out: (nullable) (out): whether password should be saved
+ * @cancellable: (nullable): a `GCancellable`
+ * @error: (nullable): a `GError`
+ *
+ * Prompt the user for a password.
+ *
+ * If @remember_password_out is not %NULL, the user's preference for
+ * remembering the password will be set to %TRUE or %FALSE.
+ *
+ * Returns: (nullable) (transfer full): the secret exchange on success,
+ * or %NULL with @error set
+ */
+GcrSecretExchange *
+goa_kerberos_provider_prompt_password_sync (GoaKerberosProvider *self,
+ gboolean
*remember_password_out,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_autoptr(GcrPrompt) prompt = NULL;
+ GcrSecretExchange *secret_exchange = NULL;
+
+ g_return_val_if_fail (GOA_IS_KERBEROS_PROVIDER (self), NULL);
+ g_return_val_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable),
NULL);
+ g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+ prompt = gcr_system_prompt_open (-1, cancellable, error);
+ if (prompt == NULL)
+ {
+ return NULL;
+ }
+
+ gcr_prompt_set_title (prompt, _("Log In to Realm"));
+ gcr_prompt_set_description (prompt, _("Please enter your password below."));
+ gcr_prompt_set_choice_label (prompt, _("Remember this password"));
+
+ if (gcr_prompt_password (prompt, cancellable, error) == NULL)
+ {
+ gcr_system_prompt_close (GCR_SYSTEM_PROMPT (prompt), NULL, NULL);
+ if (error != NULL && *error == NULL)
+ {
+ g_set_error_literal (error,
+ G_IO_ERROR,
+ G_IO_ERROR_CANCELLED,
+ _("Operation was cancelled"));
+ }
+
+ return NULL;
+ }
+
+ secret_exchange = gcr_system_prompt_get_secret_exchange (GCR_SYSTEM_PROMPT
(prompt));
+ if (remember_password_out != NULL)
+ *remember_password_out = gcr_prompt_get_choice_chosen (prompt);
+
+ gcr_system_prompt_close (GCR_SYSTEM_PROMPT (prompt), NULL, NULL);
+
+ return g_object_ref (secret_exchange);
+}
+
+/*
----------------------------------------------------------------------------------------------------
*/
+
+typedef struct
+{
char *identifier;
char *password;
char *preauth_source;
@@ -1410,7 +1549,7 @@
* goa_kerberos_provider_sign_in:
* @self: a `GoaKerberosProvider`
* @identity: the identity
- * @password: the password
+ * @password: (nullable): the password
* @preauth_source: (nullable): a pre-auth source
* @cancellable: (nullable): a `GCancellable`
* @callback: (scope async): a `GAsyncReadyCallback`
@@ -1418,6 +1557,9 @@
*
* Sign in a kerberos identity.
*
+ * If @password is %NULL, the user will be prompted to provide it,
+ * but it will not be saved in the keyring.
+ *
* Returns: %TRUE on success, or %FALSE with @error set
*/
void
@@ -1434,7 +1576,7 @@
g_return_if_fail (GOA_IS_PROVIDER (self));
g_return_if_fail (identifier != NULL && *identifier != '\0');
- g_return_if_fail (password != NULL && *password != '\0');
+ g_return_if_fail (password == NULL || *password != '\0');
g_return_if_fail (preauth_source == NULL || *preauth_source != '\0');
g_return_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable));
@@ -1475,13 +1617,16 @@
* goa_kerberos_provider_sign_in_sync:
* @self: a `GoaKerberosProvider`
* @identity: the identity
- * @password: the password
+ * @password: (nullable): the password
* @preauth_source: (nullable): a pre-auth source
* @cancellable: (nullable): a `GCancellable`
* @error: (nullable): a `GError`
*
* Sign in a kerberos identity.
*
+ * If @password is %NULL, the user will be prompted to provide it,
+ * but it will not be saved in the keyring.
+ *
* Returns: %TRUE on success, or %FALSE with @error set
*/
char *
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/gnome-online-accounts-3.56.0/src/goabackend/goasmtpauth.c
new/gnome-online-accounts-3.56.1/src/goabackend/goasmtpauth.c
--- old/gnome-online-accounts-3.56.0/src/goabackend/goasmtpauth.c
2025-09-13 20:34:22.000000000 +0200
+++ new/gnome-online-accounts-3.56.1/src/goabackend/goasmtpauth.c
2025-10-11 19:18:34.000000000 +0200
@@ -369,12 +369,15 @@
/**
* goa_smtp_auth_new:
* @domain: The domain to use.
- * @username: The user name to use.
- * @password: The password to use.
+ * @username: (nullable): The user name to use.
+ * @password: (nullable): The password to use.
*
* Creates a new #GoaMailAuth to be used for username/password
* authentication using LOGIN or PLAIN over SMTP.
*
+ * If either @username or @password are %NULL, authentication will only
+ * succeed if the service supports it.
+ *
* Returns: (type GoaSmtpAuth): A #GoaSmtpAuth. Free with
* g_object_unref().
*/
@@ -384,8 +387,8 @@
const gchar *password)
{
g_return_val_if_fail (domain != NULL && domain[0] != '\0', NULL);
- g_return_val_if_fail (username != NULL, NULL);
- g_return_val_if_fail (password != NULL && password[0] != '\0', NULL);
+ g_return_val_if_fail (username != NULL || (username == NULL && password ==
NULL), NULL);
+ g_return_val_if_fail (password == NULL || password[0] != '\0', NULL);
return GOA_MAIL_AUTH (g_object_new (GOA_TYPE_SMTP_AUTH,
"domain", domain,
@@ -484,6 +487,14 @@
ret = TRUE;
goto out;
}
+ else if (self->username == NULL && self->password == NULL)
+ {
+ g_set_error (error,
+ GOA_ERROR,
+ GOA_ERROR_NOT_AUTHORIZED,
+ _("Authentication failed"));
+ goto out;
+ }
else if (!self->login_supported && !self->plain_supported)
{
g_set_error (error,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/gnome-online-accounts-3.56.0/src/goabackend/meson.build
new/gnome-online-accounts-3.56.1/src/goabackend/meson.build
--- old/gnome-online-accounts-3.56.0/src/goabackend/meson.build 2025-09-13
20:34:22.000000000 +0200
+++ new/gnome-online-accounts-3.56.1/src/goabackend/meson.build 2025-10-11
19:18:34.000000000 +0200
@@ -94,7 +94,7 @@
endif
if enable_fedora or enable_kerberos
- libgoa_backend_sources += identity_dbus_sources + identity_manager_error_src
+ libgoa_backend_sources += identity_dbus_sources + identity_error_sources
incs += goaidentity_inc
deps += [gcr_dep]
endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/gnome-online-accounts-3.56.0/src/goaidentity/goaidentity.c
new/gnome-online-accounts-3.56.1/src/goaidentity/goaidentity.c
--- old/gnome-online-accounts-3.56.0/src/goaidentity/goaidentity.c
2025-09-13 20:34:22.000000000 +0200
+++ new/gnome-online-accounts-3.56.1/src/goaidentity/goaidentity.c
2025-10-11 19:18:34.000000000 +0200
@@ -62,19 +62,6 @@
-1,
G_PARAM_READABLE));
}
-GQuark
-goa_identity_error_quark (void)
-{
- static GQuark error_quark = 0;
-
- if (error_quark == 0)
- {
- error_quark = g_quark_from_static_string ("goa-identity-error");
- }
-
- return error_quark;
-}
-
const char *
goa_identity_get_identifier (GoaIdentity *self)
{
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/gnome-online-accounts-3.56.0/src/goaidentity/goaidentity.h
new/gnome-online-accounts-3.56.1/src/goaidentity/goaidentity.h
--- old/gnome-online-accounts-3.56.0/src/goaidentity/goaidentity.h
2025-09-13 20:34:22.000000000 +0200
+++ new/gnome-online-accounts-3.56.1/src/goaidentity/goaidentity.h
2025-10-11 19:18:34.000000000 +0200
@@ -27,8 +27,6 @@
#define GOA_TYPE_IDENTITY (goa_identity_get_type ())
G_DECLARE_INTERFACE (GoaIdentity, goa_identity, GOA, IDENTITY, GObject);
-#define GOA_IDENTITY_ERROR (goa_identity_error_quark ())
-
struct _GoaIdentityInterface
{
GTypeInterface base_interface;
@@ -39,28 +37,12 @@
typedef enum
{
- GOA_IDENTITY_ERROR_NOT_FOUND,
- GOA_IDENTITY_ERROR_VERIFYING,
- GOA_IDENTITY_ERROR_RENEWING,
- GOA_IDENTITY_ERROR_CREDENTIALS_UNAVAILABLE,
- GOA_IDENTITY_ERROR_ENUMERATING_CREDENTIALS,
- GOA_IDENTITY_ERROR_ALLOCATING_CREDENTIALS,
- GOA_IDENTITY_ERROR_AUTHENTICATION_FAILED,
- GOA_IDENTITY_ERROR_SAVING_CREDENTIALS,
- GOA_IDENTITY_ERROR_REMOVING_CREDENTIALS,
- GOA_IDENTITY_ERROR_PARSING_IDENTIFIER,
-} GoaIdentityError;
-
-typedef enum
-{
GOA_IDENTITY_SIGN_IN_FLAGS_NONE = 0,
GOA_IDENTITY_SIGN_IN_FLAGS_DISALLOW_RENEWAL = 1,
GOA_IDENTITY_SIGN_IN_FLAGS_DISALLOW_FORWARDING = 1 << 1,
GOA_IDENTITY_SIGN_IN_FLAGS_DISALLOW_PROXYING = 1 << 2
} GoaIdentitySignInFlags;
-GQuark goa_identity_error_quark (void);
-
const char *goa_identity_get_identifier (GoaIdentity *identity);
gboolean goa_identity_is_signed_in (GoaIdentity *identity);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/gnome-online-accounts-3.56.0/src/goaidentity/goaidentityerror.c
new/gnome-online-accounts-3.56.1/src/goaidentity/goaidentityerror.c
--- old/gnome-online-accounts-3.56.0/src/goaidentity/goaidentityerror.c
1970-01-01 01:00:00.000000000 +0100
+++ new/gnome-online-accounts-3.56.1/src/goaidentity/goaidentityerror.c
2025-10-11 19:18:34.000000000 +0200
@@ -0,0 +1,50 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
+/*
+ * Copyright © 2025 GNOME Foundation Inc.
+ * Contributor: Andy Holmes <[email protected]>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General
+ * Public License along with this library; if not, see
<http://www.gnu.org/licenses/>.
+ */
+
+#include "config.h"
+
+#include <gio/gio.h>
+
+#include "goaidentityerror.h"
+
+static const GDBusErrorEntry dbus_error_entries[] =
+{
+ {GOA_IDENTITY_ERROR_NOT_FOUND,
"org.gnome.Identity.Error.NotFound"},
+ {GOA_IDENTITY_ERROR_VERIFYING,
"org.gnome.Identity.Error.Verifying"},
+ {GOA_IDENTITY_ERROR_RENEWING,
"org.gnome.Identity.Error.Renewing"},
+ {GOA_IDENTITY_ERROR_CREDENTIALS_UNAVAILABLE,
"org.gnome.Identity.Error.CredentialsUnavailable"},
+ {GOA_IDENTITY_ERROR_ENUMERATING_CREDENTIALS,
"org.gnome.Identity.Error.EnumeratingCredentials"},
+ {GOA_IDENTITY_ERROR_ALLOCATING_CREDENTIALS,
"org.gnome.Identity.Error.AllocatingCredentials"},
+ {GOA_IDENTITY_ERROR_AUTHENTICATION_FAILED,
"org.gnome.Identity.Error.AuthenticationFailed"},
+ {GOA_IDENTITY_ERROR_SAVING_CREDENTIALS,
"org.gnome.Identity.Error.SavingCredentials"},
+ {GOA_IDENTITY_ERROR_REMOVING_CREDENTIALS,
"org.gnome.Identity.Error.RemovingCredentials"},
+ {GOA_IDENTITY_ERROR_PARSING_IDENTIFIER,
"org.gnome.Identity.Error.ParsingIdentifier"}
+};
+
+GQuark
+goa_identity_error_quark (void)
+{
+ G_STATIC_ASSERT (G_N_ELEMENTS (dbus_error_entries) ==
GOA_IDENTITY_ERROR_NUM_ENTRIES);
+ static gsize quark = 0;
+ g_dbus_error_register_error_domain ("goa-identity-error",
+ &quark,
+ dbus_error_entries,
+ G_N_ELEMENTS (dbus_error_entries));
+ return (GQuark) quark;
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/gnome-online-accounts-3.56.0/src/goaidentity/goaidentityerror.h
new/gnome-online-accounts-3.56.1/src/goaidentity/goaidentityerror.h
--- old/gnome-online-accounts-3.56.0/src/goaidentity/goaidentityerror.h
1970-01-01 01:00:00.000000000 +0100
+++ new/gnome-online-accounts-3.56.1/src/goaidentity/goaidentityerror.h
2025-10-11 19:18:34.000000000 +0200
@@ -0,0 +1,49 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright © 2025 GNOME Foundation Inc.
+ * Contributor: Andy Holmes <[email protected]>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General
+ * Public License along with this library; if not, see
<http://www.gnu.org/licenses/>.
+ */
+
+#ifndef __GOA_IDENTITY_ERROR_H__
+#define __GOA_IDENTITY_ERROR_H__
+
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+#define GOA_IDENTITY_ERROR (goa_identity_error_quark ())
+
+#define GOA_IDENTITY_ERROR_NUM_ENTRIES (GOA_IDENTITY_ERROR_PARSING_IDENTIFIER
+ 1)
+
+typedef enum
+{
+ GOA_IDENTITY_ERROR_NOT_FOUND, /* org.gnome.Identity.NotFound */
+ GOA_IDENTITY_ERROR_VERIFYING, /* org.gnome.Identity.Verifying
*/
+ GOA_IDENTITY_ERROR_RENEWING, /* org.gnome.Identity.Renewing */
+ GOA_IDENTITY_ERROR_CREDENTIALS_UNAVAILABLE, /*
org.gnome.Identity.CredentialsUnavailable */
+ GOA_IDENTITY_ERROR_ENUMERATING_CREDENTIALS, /*
org.gnome.Identity.EnumeratingCredentials */
+ GOA_IDENTITY_ERROR_ALLOCATING_CREDENTIALS, /*
org.gnome.Identity.AllocatingCredentials */
+ GOA_IDENTITY_ERROR_AUTHENTICATION_FAILED, /*
org.gnome.Identity.AuthenticationFailed */
+ GOA_IDENTITY_ERROR_SAVING_CREDENTIALS, /*
org.gnome.Identity.SavingCredentials */
+ GOA_IDENTITY_ERROR_REMOVING_CREDENTIALS, /*
org.gnome.Identity.RemovingCredentials */
+ GOA_IDENTITY_ERROR_PARSING_IDENTIFIER, /*
org.gnome.Identity.ParsingIdentifier */
+} GoaIdentityError;
+
+GQuark goa_identity_error_quark (void);
+
+G_END_DECLS
+
+#endif /* __GOA_IDENTITY_ERROR_H__ */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/gnome-online-accounts-3.56.0/src/goaidentity/goaidentityservice.c
new/gnome-online-accounts-3.56.1/src/goaidentity/goaidentityservice.c
--- old/gnome-online-accounts-3.56.0/src/goaidentity/goaidentityservice.c
2025-09-13 20:34:22.000000000 +0200
+++ new/gnome-online-accounts-3.56.1/src/goaidentity/goaidentityservice.c
2025-10-11 19:18:34.000000000 +0200
@@ -31,6 +31,7 @@
#include <goa/goa.h>
#include "goaidentityenumtypes.h"
+#include "goaidentityerror.h"
#include "goaidentitymanagererror.h"
#include "goaidentityutils.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/gnome-online-accounts-3.56.0/src/goaidentity/goakerberosidentity.c
new/gnome-online-accounts-3.56.1/src/goaidentity/goakerberosidentity.c
--- old/gnome-online-accounts-3.56.0/src/goaidentity/goakerberosidentity.c
2025-09-13 20:34:22.000000000 +0200
+++ new/gnome-online-accounts-3.56.1/src/goaidentity/goakerberosidentity.c
2025-10-11 19:18:34.000000000 +0200
@@ -19,6 +19,7 @@
#include "config.h"
#include "goaidentity.h"
+#include "goaidentityerror.h"
#include "goakerberosidentity.h"
#include "goakerberosidentityinquiry.h"
#include "goaalarm.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/gnome-online-accounts-3.56.0/src/goaidentity/meson.build
new/gnome-online-accounts-3.56.1/src/goaidentity/meson.build
--- old/gnome-online-accounts-3.56.0/src/goaidentity/meson.build
2025-09-13 20:34:22.000000000 +0200
+++ new/gnome-online-accounts-3.56.1/src/goaidentity/meson.build
2025-10-11 19:18:34.000000000 +0200
@@ -3,6 +3,7 @@
headers = files(
'goaalarm.h',
'goaidentity.h',
+ 'goaidentityerror.h',
'goaidentityinquiry.h',
'goaidentityinquiryprivate.h',
'goaidentityservice.h',
@@ -27,9 +28,12 @@
annotations: [dbus, 'org.gtk.GDBus.C.Name', 'Identity']
)
-identity_manager_error_src = files('goaidentitymanagererror.c')
+identity_error_sources = files(
+ 'goaidentityerror.c',
+ 'goaidentitymanagererror.c',
+)
-sources = identity_manager_error_src + files(
+sources = identity_error_sources + files(
'goaalarm.c',
'goaidentity.c',
'goaidentityinquiry.c',
++++++ gnome-online-accounts.obsinfo ++++++
--- /var/tmp/diff_new_pack.jxuBcu/_old 2025-10-14 18:08:04.442167164 +0200
+++ /var/tmp/diff_new_pack.jxuBcu/_new 2025-10-14 18:08:04.446167334 +0200
@@ -1,5 +1,5 @@
name: gnome-online-accounts
-version: 3.56.0
-mtime: 1757788462
-commit: 49234c5ca59f8416978ec96c6590ad74239d663e
+version: 3.56.1
+mtime: 1760203114
+commit: 346822746be2b0f14f9783c2fca0aa99a40cca1b