From a23ee598c7634a7bc1c6d2090856dd465d46835f Mon Sep 17 00:00:00 2001 From: Stef Walter Date: Wed, 14 Nov 2012 10:57:10 +0100 Subject: [PATCH] Rework how we strip remote DBus errors * This is necessary because sometimes we don't want to complain, for expected errors, when running nested operations. * The fact that we have to do this is silly, and soon there will be a solution in glib itself. https://bugzilla.gnome.org/show_bug.cgi?id=688165 --- libsecret/secret-collection.c | 12 ++++++------ libsecret/secret-item.c | 18 +++++++----------- libsecret/secret-methods.c | 12 ++++++------ libsecret/secret-paths.c | 22 ++++++++-------------- libsecret/secret-private.h | 3 +++ libsecret/secret-prompt.c | 4 +--- libsecret/secret-service.c | 8 ++++---- libsecret/secret-session.c | 4 +--- libsecret/secret-util.c | 17 +++++++++++++---- 9 files changed, 49 insertions(+), 51 deletions(-) diff --git a/libsecret/secret-collection.c b/libsecret/secret-collection.c index 24942b7..ad668f3 100644 --- a/libsecret/secret-collection.c +++ b/libsecret/secret-collection.c @@ -714,7 +714,7 @@ secret_collection_async_initable_init_finish (GAsyncInitable *initable, g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (initable), secret_collection_async_initable_init_async), FALSE); - if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error)) + if (_secret_util_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error)) return FALSE; self->pv->constructing = FALSE; @@ -865,7 +865,7 @@ secret_collection_load_items_finish (SecretCollection *self, g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (self), secret_collection_load_items), FALSE); - if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error)) + if (_secret_util_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error)) return FALSE; return TRUE; @@ -1146,7 +1146,7 @@ secret_collection_create_finish (GAsyncResult *result, res = G_SIMPLE_ASYNC_RESULT (result); - if (g_simple_async_result_propagate_error (res, error)) + if (_secret_util_propagate_error (res, error)) return NULL; closure = g_simple_async_result_get_op_res_gpointer (res); @@ -1487,7 +1487,7 @@ secret_collection_search_finish (SecretCollection *self, secret_collection_search), NULL); async = G_SIMPLE_ASYNC_RESULT (result); - if (g_simple_async_result_propagate_error (async, error)) + if (_secret_util_propagate_error (async, error)) return NULL; search = g_simple_async_result_get_op_res_gpointer (async); @@ -1681,7 +1681,7 @@ secret_collection_delete_finish (SecretCollection *self, g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (self), secret_collection_delete), FALSE); - if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error)) + if (_secret_util_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error)) return FALSE; return TRUE; @@ -2178,7 +2178,7 @@ secret_collection_for_alias_finish (GAsyncResult *result, g_return_val_if_fail (error == NULL || *error == NULL, NULL); async = G_SIMPLE_ASYNC_RESULT (result); - if (g_simple_async_result_propagate_error (async, error)) + if (_secret_util_propagate_error (async, error)) return NULL; read = g_simple_async_result_get_op_res_gpointer (async); if (read->collection) diff --git a/libsecret/secret-item.c b/libsecret/secret-item.c index f93535b..bf9b2e3 100644 --- a/libsecret/secret-item.c +++ b/libsecret/secret-item.c @@ -595,7 +595,7 @@ secret_item_async_initable_init_finish (GAsyncInitable *initable, g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (initable), secret_item_async_initable_init_async), FALSE); - if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error)) + if (_secret_util_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error)) return FALSE; return TRUE; @@ -842,7 +842,7 @@ secret_item_create_finish (GAsyncResult *result, res = G_SIMPLE_ASYNC_RESULT (result); - if (g_simple_async_result_propagate_error (res, error)) + if (_secret_util_propagate_error (res, error)) return NULL; closure = g_simple_async_result_get_op_res_gpointer (res); @@ -1002,7 +1002,7 @@ secret_item_delete_finish (SecretItem *self, res = G_SIMPLE_ASYNC_RESULT (result); - if (g_simple_async_result_propagate_error (res, error)) + if (_secret_util_propagate_error (res, error)) return FALSE; return g_simple_async_result_get_op_res_gboolean (res); @@ -1169,7 +1169,6 @@ on_item_load_secret (GObject *source, } if (error != NULL) { - _secret_util_strip_remote_error (&error); g_simple_async_result_take_error (res, error); } @@ -1271,7 +1270,7 @@ secret_item_load_secret_finish (SecretItem *self, secret_item_load_secret), FALSE); res = G_SIMPLE_ASYNC_RESULT (result); - if (g_simple_async_result_propagate_error (res, error)) + if (_secret_util_propagate_error (res, error)) return FALSE; return TRUE; @@ -1370,10 +1369,8 @@ on_get_secrets_complete (GObject *source, g_variant_unref (retval); } - if (error != NULL) { - _secret_util_strip_remote_error (&error); + if (error != NULL) g_simple_async_result_take_error (async, error); - } g_simple_async_result_complete (async); g_object_unref (async); @@ -1499,7 +1496,7 @@ secret_item_load_secrets_finish (GAsyncResult *result, g_return_val_if_fail (error == NULL || *error == NULL, FALSE); async = G_SIMPLE_ASYNC_RESULT (result); - if (g_simple_async_result_propagate_error (async, error)) + if (_secret_util_propagate_error (async, error)) return FALSE; return TRUE; @@ -1583,7 +1580,6 @@ on_item_set_secret (GObject *source, if (error == NULL) { _secret_item_set_cached_secret (self, set->value); } else { - _secret_util_strip_remote_error (&error); g_simple_async_result_take_error (res, error); } if (retval != NULL) @@ -1688,7 +1684,7 @@ secret_item_set_secret_finish (SecretItem *self, secret_item_set_secret), FALSE); res = G_SIMPLE_ASYNC_RESULT (result); - if (g_simple_async_result_propagate_error (res, error)) + if (_secret_util_propagate_error (res, error)) return FALSE; return TRUE; diff --git a/libsecret/secret-methods.c b/libsecret/secret-methods.c index 65440c9..9d1a5ab 100644 --- a/libsecret/secret-methods.c +++ b/libsecret/secret-methods.c @@ -361,7 +361,7 @@ secret_service_search_finish (SecretService *service, res = G_SIMPLE_ASYNC_RESULT (result); - if (g_simple_async_result_propagate_error (res, error)) + if (_secret_util_propagate_error (res, error)) return FALSE; closure = g_simple_async_result_get_op_res_gpointer (res); @@ -708,7 +708,7 @@ service_xlock_finish (SecretService *service, service_xlock_async), -1); async = G_SIMPLE_ASYNC_RESULT (result); - if (g_simple_async_result_propagate_error (async, error)) + if (_secret_util_propagate_error (async, error)) return -1; xlock = g_simple_async_result_get_op_res_gpointer (async); @@ -1181,7 +1181,7 @@ secret_service_store_finish (SecretService *service, secret_service_store), FALSE); g_return_val_if_fail (error == NULL || *error == NULL, FALSE); - if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error)) + if (_secret_util_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error)) return FALSE; return TRUE; @@ -1476,7 +1476,7 @@ secret_service_lookup_finish (SecretService *service, secret_service_lookup), NULL); res = G_SIMPLE_ASYNC_RESULT (result); - if (g_simple_async_result_propagate_error (res, error)) + if (_secret_util_propagate_error (res, error)) return NULL; closure = g_simple_async_result_get_op_res_gpointer (res); @@ -1728,7 +1728,7 @@ secret_service_clear_finish (SecretService *service, secret_service_clear), FALSE); res = G_SIMPLE_ASYNC_RESULT (result); - if (g_simple_async_result_propagate_error (res, error)) + if (_secret_util_propagate_error (res, error)) return FALSE; closure = g_simple_async_result_get_op_res_gpointer (res); @@ -1933,7 +1933,7 @@ secret_service_set_alias_finish (SecretService *service, secret_service_set_alias), FALSE); g_return_val_if_fail (error == NULL || *error == NULL, FALSE); - if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error)) + if (_secret_util_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error)) return FALSE; return TRUE; diff --git a/libsecret/secret-paths.c b/libsecret/secret-paths.c index dea7097..dfe968e 100644 --- a/libsecret/secret-paths.c +++ b/libsecret/secret-paths.c @@ -300,7 +300,6 @@ on_search_items_complete (GObject *source, response = g_dbus_proxy_call_finish (G_DBUS_PROXY (source), result, &error); if (error != NULL) { - _secret_util_strip_remote_error (&error); g_simple_async_result_take_error (res, error); } else { g_simple_async_result_set_op_res_gpointer (res, response, @@ -393,7 +392,7 @@ secret_collection_search_for_dbus_paths_finish (SecretCollection *collection, g_return_val_if_fail (error == NULL || *error == NULL, FALSE); async = G_SIMPLE_ASYNC_RESULT (result); - if (g_simple_async_result_propagate_error (async, error)) + if (_secret_util_propagate_error (async, error)) return FALSE; retval= g_simple_async_result_get_op_res_gpointer (async); @@ -564,7 +563,7 @@ secret_service_search_for_dbus_paths_finish (SecretService *self, g_return_val_if_fail (error == NULL || *error == NULL, FALSE); res = G_SIMPLE_ASYNC_RESULT (result); - if (g_simple_async_result_propagate_error (res, error)) + if (_secret_util_propagate_error (res, error)) return FALSE; if (unlocked || locked) { @@ -687,7 +686,6 @@ on_get_secrets_complete (GObject *source, closure->out = g_dbus_proxy_call_finish (G_DBUS_PROXY (source), result, &error); if (error != NULL) { - _secret_util_strip_remote_error (&error); g_simple_async_result_take_error (res, error); } g_simple_async_result_complete (res); @@ -794,7 +792,7 @@ secret_service_get_secret_for_dbus_path_finish (SecretService *self, g_return_val_if_fail (error == NULL || *error == NULL, NULL); res = G_SIMPLE_ASYNC_RESULT (result); - if (g_simple_async_result_propagate_error (res, error)) + if (_secret_util_propagate_error (res, error)) return NULL; closure = g_simple_async_result_get_op_res_gpointer (res); @@ -926,7 +924,7 @@ secret_service_get_secrets_for_dbus_paths_finish (SecretService *self, g_return_val_if_fail (error == NULL || *error == NULL, NULL); res = G_SIMPLE_ASYNC_RESULT (result); - if (g_simple_async_result_propagate_error (res, error)) + if (_secret_util_propagate_error (res, error)) return NULL; closure = g_simple_async_result_get_op_res_gpointer (res); @@ -1047,7 +1045,6 @@ on_xlock_called (GObject *source, retval = g_dbus_proxy_call_finish (G_DBUS_PROXY (source), result, &error); if (error != NULL) { - _secret_util_strip_remote_error (&error); g_simple_async_result_take_error (res, error); g_simple_async_result_complete (res); @@ -1110,7 +1107,7 @@ _secret_service_xlock_paths_finish (SecretService *self, gint count; res = G_SIMPLE_ASYNC_RESULT (result); - if (g_simple_async_result_propagate_error (res, error)) + if (_secret_util_propagate_error (res, error)) return -1; closure = g_simple_async_result_get_op_res_gpointer (res); @@ -1442,7 +1439,6 @@ on_delete_complete (GObject *source, g_variant_unref (retval); } else { - _secret_util_strip_remote_error (&error); g_simple_async_result_take_error (res, error); g_simple_async_result_complete (res); } @@ -1496,7 +1492,7 @@ _secret_service_delete_path_finish (SecretService *self, _secret_service_delete_path), FALSE); res = G_SIMPLE_ASYNC_RESULT (result); - if (g_simple_async_result_propagate_error (res, error)) + if (_secret_util_propagate_error (res, error)) return FALSE; closure = g_simple_async_result_get_op_res_gpointer (res); @@ -1671,7 +1667,6 @@ on_create_collection_called (GObject *source, g_variant_unref (retval); } else { - _secret_util_strip_remote_error (&error); g_simple_async_result_take_error (res, error); g_simple_async_result_complete (res); } @@ -1789,7 +1784,7 @@ secret_service_create_collection_dbus_path_finish (SecretService *self, res = G_SIMPLE_ASYNC_RESULT (result); - if (g_simple_async_result_propagate_error (res, error)) + if (_secret_util_propagate_error (res, error)) return NULL; closure = g_simple_async_result_get_op_res_gpointer (res); @@ -1941,7 +1936,6 @@ on_create_item_called (GObject *source, g_variant_unref (retval); } else { - _secret_util_strip_remote_error (&error); g_simple_async_result_take_error (res, error); g_simple_async_result_complete (res); } @@ -2085,7 +2079,7 @@ secret_service_create_item_dbus_path_finish (SecretService *self, res = G_SIMPLE_ASYNC_RESULT (result); - if (g_simple_async_result_propagate_error (res, error)) + if (_secret_util_propagate_error (res, error)) return NULL; closure = g_simple_async_result_get_op_res_gpointer (res); diff --git a/libsecret/secret-private.h b/libsecret/secret-private.h index 5e05032..1b669ea 100644 --- a/libsecret/secret-private.h +++ b/libsecret/secret-private.h @@ -65,6 +65,9 @@ SecretPrompt * _secret_prompt_instance (SecretService *se void _secret_util_strip_remote_error (GError **error); +gboolean _secret_util_propagate_error (GSimpleAsyncResult *async, + GError **error); + gchar * _secret_util_parent_path (const gchar *path); gboolean _secret_util_empty_path (const gchar *path); diff --git a/libsecret/secret-prompt.c b/libsecret/secret-prompt.c index 029739a..8671c5f 100644 --- a/libsecret/secret-prompt.c +++ b/libsecret/secret-prompt.c @@ -334,7 +334,6 @@ on_prompt_prompted (GObject *source, g_clear_error (&error); if (error != NULL) { - _secret_util_strip_remote_error (&error); g_simple_async_result_take_error (res, error); perform_prompt_complete (res, TRUE); @@ -381,7 +380,6 @@ on_prompt_dismissed (GObject *source, g_clear_error (&error); if (error != NULL) { - _secret_util_strip_remote_error (&error); g_simple_async_result_take_error (res, error); perform_prompt_complete (res, TRUE); } @@ -529,7 +527,7 @@ secret_prompt_perform_finish (SecretPrompt *self, res = G_SIMPLE_ASYNC_RESULT (result); - if (g_simple_async_result_propagate_error (res, error)) + if (_secret_util_propagate_error (res, error)) return NULL; closure = g_simple_async_result_get_op_res_gpointer (res); diff --git a/libsecret/secret-service.c b/libsecret/secret-service.c index 1d45fc4..171a6c2 100644 --- a/libsecret/secret-service.c +++ b/libsecret/secret-service.c @@ -354,7 +354,7 @@ secret_service_real_prompt_finish (SecretService *self, secret_service_real_prompt_async), NULL); res = G_SIMPLE_ASYNC_RESULT (result); - if (g_simple_async_result_propagate_error (res, error)) + if (_secret_util_propagate_error (res, error)) return NULL; retval = g_simple_async_result_get_op_res_gpointer (res); @@ -716,7 +716,7 @@ secret_service_async_initable_init_finish (GAsyncInitable *initable, g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (initable), secret_service_async_initable_init_async), FALSE); - if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error)) + if (_secret_util_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error)) return FALSE; return TRUE; @@ -824,7 +824,7 @@ secret_service_get_finish (GAsyncResult *result, /* Just ensuring that the service matches flags */ if (g_simple_async_result_is_valid (result, source_object, secret_service_get)) { - if (!g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error)) + if (!_secret_util_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error)) service = g_object_ref (source_object); /* Creating a whole new service */ @@ -1543,7 +1543,7 @@ secret_service_load_collections_finish (SecretService *self, g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (self), secret_service_load_collections), FALSE); - if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error)) + if (_secret_util_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error)) return FALSE; return TRUE; diff --git a/libsecret/secret-session.c b/libsecret/secret-session.c index b085bc5..87349f7 100644 --- a/libsecret/secret-session.c +++ b/libsecret/secret-session.c @@ -248,7 +248,6 @@ on_service_open_session_plain (GObject *source, g_variant_unref (response); } else { - _secret_util_strip_remote_error (&error); g_simple_async_result_take_error (res, error); g_simple_async_result_complete (res); } @@ -297,7 +296,6 @@ on_service_open_session_aes (GObject *source, /* Other errors result in a failure */ } else { - _secret_util_strip_remote_error (&error); g_simple_async_result_take_error (res, error); g_simple_async_result_complete (res); } @@ -344,7 +342,7 @@ gboolean _secret_session_open_finish (GAsyncResult *result, GError **error) { - if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error)) + if (_secret_util_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error)) return FALSE; return TRUE; diff --git a/libsecret/secret-util.c b/libsecret/secret-util.c index b91ad5a..e85d3ee 100644 --- a/libsecret/secret-util.c +++ b/libsecret/secret-util.c @@ -96,6 +96,17 @@ secret_error_get_quark (void) return quark; } +gboolean +_secret_util_propagate_error (GSimpleAsyncResult *async, + GError **error) +{ + if (!g_simple_async_result_propagate_error (async, error)) + return FALSE; + + _secret_util_strip_remote_error (error); + return TRUE; +} + void _secret_util_strip_remote_error (GError **error) { @@ -206,7 +217,6 @@ on_get_properties (GObject *source, if (error == NULL) { process_get_all_reply (proxy, retval); } else { - _secret_util_strip_remote_error (&error); g_simple_async_result_take_error (res, error); } if (retval != NULL) @@ -256,7 +266,7 @@ _secret_util_get_properties_finish (GDBusProxy *proxy, res = G_SIMPLE_ASYNC_RESULT (result); - if (g_simple_async_result_propagate_error (res, error)) + if (_secret_util_propagate_error (res, error)) return FALSE; return TRUE; @@ -291,7 +301,6 @@ on_set_property (GObject *source, retval = g_dbus_connection_call_finish (G_DBUS_CONNECTION (source), result, &error); if (error != NULL) { - _secret_util_strip_remote_error (&error); g_simple_async_result_take_error (res, error); } if (retval != NULL) @@ -357,7 +366,7 @@ _secret_util_set_property_finish (GDBusProxy *proxy, res = G_SIMPLE_ASYNC_RESULT (result); - if (g_simple_async_result_propagate_error (res, error)) + if (_secret_util_propagate_error (res, error)) return FALSE; closure = g_simple_async_result_get_op_res_gpointer (res); -- 2.7.4