--- a/libpurple/plugins/keyrings/secretservice.c Wed Sep 14 13:00:13 2016 -0500
+++ b/libpurple/plugins/keyrings/secretservice.c Thu Sep 15 08:36:52 2016 -0500
@@ -76,6 +76,48 @@
/***********************************************/
+ss_g_error_to_keyring_error(GError **error, PurpleAccount *account) + GError *new_error = NULL; + g_return_if_fail(error != NULL); + if (g_error_matches(old_error, G_DBUS_ERROR, + G_DBUS_ERROR_SPAWN_SERVICE_NOT_FOUND) || + g_error_matches(old_error, G_DBUS_ERROR, + G_DBUS_ERROR_IO_ERROR)) { + purple_debug_info("keyring-libsecret", + "Failed to communicate with Secret " + "Service (account: %s (%s)).\n", + purple_account_get_username(account), + purple_account_get_protocol_id(account)); + new_error = g_error_new(PURPLE_KEYRING_ERROR, + PURPLE_KEYRING_ERROR_BACKENDFAIL, + "Failed to communicate with Secret " + "Service (account: %s).", + purple_account_get_username(account)); + purple_debug_error("keyring-libsecret", + "Unknown error (account: %s (%s), " + "domain: %s, code: %d): %s.\n", + purple_account_get_username(account), + purple_account_get_protocol_id(account), + g_quark_to_string(old_error->domain), + old_error->code, old_error->message); + new_error = g_error_new(PURPLE_KEYRING_ERROR, + PURPLE_KEYRING_ERROR_BACKENDFAIL, + "Unknown error (account: %s).", + purple_account_get_username(account)); + g_propagate_error(error, new_error); ss_read_continue(GObject *object, GAsyncResult *result, gpointer data)
InfoStorage *storage = data;
@@ -87,53 +129,19 @@
password = secret_password_lookup_finish(result, &error);
- int code = error->code;
- case G_DBUS_ERROR_SPAWN_SERVICE_NOT_FOUND:
- case G_DBUS_ERROR_IO_ERROR:
- error = g_error_new(PURPLE_KEYRING_ERROR,
- PURPLE_KEYRING_ERROR_BACKENDFAIL,
- "Failed to communicate with Secret "
- "Service (account : %s).",
- purple_account_get_username(account));
- cb(account, NULL, error, storage->user_data);
- purple_debug_error("keyring-libsecret",
- "Unknown error (account: %s (%s), "
- "domain: %s, code: %d): %s.\n",
- purple_account_get_username(account),
- purple_account_get_protocol_id(account),
- g_quark_to_string(error->domain), code,
- error = g_error_new(PURPLE_KEYRING_ERROR,
- PURPLE_KEYRING_ERROR_BACKENDFAIL,
- "Unknown error (account : %s).",
- purple_account_get_username(account));
- cb(account, NULL, error, storage->user_data);
+ ss_g_error_to_keyring_error(&error, account); } else if (password == NULL) {
error = g_error_new(PURPLE_KEYRING_ERROR,
PURPLE_KEYRING_ERROR_NOPASSWORD,
"No password found for account: %s",
purple_account_get_username(account));
- cb(account, NULL, error, storage->user_data);
- cb(account, password, NULL, storage->user_data);
+ cb(account, password, error, storage->user_data); @@ -165,51 +173,16 @@
secret_password_store_finish(result, &error);
- int code = error->code;
- case G_DBUS_ERROR_SPAWN_SERVICE_NOT_FOUND:
- case G_DBUS_ERROR_IO_ERROR:
- purple_debug_info("keyring-libsecret",
- "Failed to communicate with Secret "
- "Service (account : %s (%s)).\n",
- purple_account_get_username(account),
- purple_account_get_protocol_id(account));
- error = g_error_new(PURPLE_KEYRING_ERROR,
- PURPLE_KEYRING_ERROR_BACKENDFAIL,
- "Failed to communicate with Secret Service (account : %s).",
- purple_account_get_username(account));
- cb(account, error, storage->user_data);
- purple_debug_error("keyring-libsecret",
- "Unknown error (account: %s (%s), "
- "domain: %s, code: %d): %s.\n",
- purple_account_get_username(account),
- purple_account_get_protocol_id(account),
- g_quark_to_string(error->domain), code,
- error = g_error_new(PURPLE_KEYRING_ERROR,
- PURPLE_KEYRING_ERROR_BACKENDFAIL,
- "Unknown error (account : %s).",
- purple_account_get_username(account));
- cb(account, error, storage->user_data);
+ ss_g_error_to_keyring_error(&error, account); purple_debug_info("keyring-libsecret", "Password for %s updated.\n",
purple_account_get_username(account));
- cb(account, NULL, storage->user_data);
+ cb(account, error, storage->user_data);