[libgnome-keyring] Implement get/set default keyring.
- From: Stefan Walter <stefw src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [libgnome-keyring] Implement get/set default keyring.
- Date: Sun, 6 Dec 2009 20:31:31 +0000 (UTC)
commit 8252dcbc6cef919acad54b0cff36898db2413f13
Author: Stef Walter <stef memberwebs com>
Date: Sun Dec 6 01:39:38 2009 +0000
Implement get/set default keyring.
library/gnome-keyring.c | 176 +++++++++++++++++++----------------------------
1 files changed, 71 insertions(+), 105 deletions(-)
---
diff --git a/library/gnome-keyring.c b/library/gnome-keyring.c
index 99638aa..cc07441 100644
--- a/library/gnome-keyring.c
+++ b/library/gnome-keyring.c
@@ -731,21 +731,32 @@ gnome_keyring_set_default_keyring (const gchar *keyr
gpointer data,
GDestroyNotify destroy_data)
{
-#if 0
- GnomeKeyringOperation *op;
+ DBusMessage *req;
+ const char *string;
+ GkrOperation *op;
+ gchar *path;
- op = gkr_operation_new (FALSE, callback, GKR_CALLBACK_RES, data, destroy_data);
- if (!gkr_proto_encode_op_string (&op->send_buffer, GNOME_KEYRING_OP_SET_DEFAULT_KEYRING,
- keyring)) {
- schedule_op_failed (op, GNOME_KEYRING_RESULT_BAD_ARGUMENTS);
- }
+ g_return_val_if_fail (keyring, NULL);
+
+ path = encode_keyring_name (keyring);
+ g_return_val_if_fail (path, NULL);
+
+ req = dbus_message_new_method_call (SECRETS_SERVICE, SERVICE_PATH,
+ SERVICE_INTERFACE, "SetWellKnownCollection");
+ g_return_val_if_fail (req, NULL);
+
+ string = "default";
+ dbus_message_append_args (req, DBUS_TYPE_STRING, &string,
+ DBUS_TYPE_STRING, &path, DBUS_TYPE_INVALID);
+
+ op = gkr_operation_new (callback, GKR_CALLBACK_RES, data, destroy_data);
+ gkr_operation_request (op, req);
+ gkr_operation_unref (op);
+
+ dbus_message_unref (req);
+ g_free (path);
- op->reply_handler = standard_reply;
- start_and_take_operation (op);
return op;
-#endif
- g_assert (FALSE && "TODO");
- return NULL;
}
/**
@@ -762,36 +773,43 @@ gnome_keyring_set_default_keyring (const gchar *keyr
GnomeKeyringResult
gnome_keyring_set_default_keyring_sync (const char *keyring)
{
-#if 0
- EggBuffer send, receive;
- GnomeKeyringResult res;
+ GkrOperation *op = gnome_keyring_set_default_keyring (keyring, gkr_callback_empty, NULL, NULL);
+ return gkr_operation_block (op);
+}
- egg_buffer_init_full (&send, 128, NORMAL_ALLOCATOR);
+static void
+get_default_keyring_sync (GnomeKeyringResult res, const gchar *name, gpointer user_data)
+{
+ gchar **result = user_data;
+ *result = (gchar*)name;
+}
- if (!gkr_proto_encode_op_string (&send, GNOME_KEYRING_OP_SET_DEFAULT_KEYRING,
- keyring)) {
- egg_buffer_uninit (&send);
- return GNOME_KEYRING_RESULT_BAD_ARGUMENTS;
- }
+static void
+get_default_keyring_reply (GkrOperation *op, DBusMessage *reply, gpointer user_data)
+{
+ GkrCallback *cb;
+ const char *path;
+ gchar *name;
- egg_buffer_init_full (&receive, 128, NORMAL_ALLOCATOR);
- res = run_sync_operation (&send, &receive);
- egg_buffer_uninit (&send);
- if (res != GNOME_KEYRING_RESULT_OK) {
- egg_buffer_uninit (&receive);
- return res;
+ if (!gkr_operation_handle_errors (op, reply))
+ return;
+
+ if (!dbus_message_get_args (reply, NULL, DBUS_TYPE_OBJECT_PATH, &path,
+ DBUS_TYPE_INVALID)) {
+ gkr_operation_complete (op, decode_invalid_response (reply));
+ return;
}
- if (!gkr_proto_decode_result_reply (&receive, &res)) {
- egg_buffer_uninit (&receive);
- return GNOME_KEYRING_RESULT_IO_ERROR;
+ name = decode_keyring_name (path);
+ if (name == NULL) {
+ gkr_operation_complete (op, decode_invalid_response (reply));
+ return;
}
- egg_buffer_uninit (&receive);
- return res;
-#endif
- g_assert (FALSE && "TODO");
- return 0;
+ cb = gkr_operation_pop (op);
+ gkr_callback_invoke_ok_string (cb, name);
+ if (cb->callback != get_default_keyring_sync)
+ g_free (name);
}
/**
@@ -813,20 +831,25 @@ gnome_keyring_get_default_keyring (GnomeKeyringOperationGetStringCallback callb
gpointer data,
GDestroyNotify destroy_data)
{
-#if 0
- GnomeKeyringOperation *op;
+ DBusMessage *req;
+ const char *string;
+ GkrOperation *op;
- op = gkr_operation_new (FALSE, callback, GKR_CALLBACK_RES_STRING, data, destroy_data);
- if (!gkr_proto_encode_op_only (&op->send_buffer, GNOME_KEYRING_OP_GET_DEFAULT_KEYRING)) {
- schedule_op_failed (op, GNOME_KEYRING_RESULT_BAD_ARGUMENTS);
- }
+ req = dbus_message_new_method_call (SECRETS_SERVICE, SERVICE_PATH,
+ SERVICE_INTERFACE, "SetWellKnownCollection");
+ g_return_val_if_fail (req, NULL);
+
+ string = "default";
+ dbus_message_append_args (req, DBUS_TYPE_STRING, &string, DBUS_TYPE_INVALID);
+
+ op = gkr_operation_new (callback, GKR_CALLBACK_RES, data, destroy_data);
+ gkr_operation_push (op, get_default_keyring_reply, GKR_CALLBACK_OP_MSG, NULL, NULL);
+ gkr_operation_request (op, req);
+ gkr_operation_unref (op);
+
+ dbus_message_unref (req);
- op->reply_handler = string_reply;
- start_and_take_operation (op);
return op;
-#endif
- g_assert (FALSE && "TODO");
- return NULL;
}
/**
@@ -845,38 +868,8 @@ gnome_keyring_get_default_keyring (GnomeKeyringOperationGetStringCallback callb
GnomeKeyringResult
gnome_keyring_get_default_keyring_sync (char **keyring)
{
-#if 0
- EggBuffer send, receive;
- GnomeKeyringResult res;
-
- egg_buffer_init_full (&send, 128, NORMAL_ALLOCATOR);
-
- *keyring = NULL;
-
- if (!gkr_proto_encode_op_only (&send, GNOME_KEYRING_OP_GET_DEFAULT_KEYRING)) {
- egg_buffer_uninit (&send);
- return GNOME_KEYRING_RESULT_BAD_ARGUMENTS;
- }
-
- egg_buffer_init_full (&receive, 128, NORMAL_ALLOCATOR);
-
- res = run_sync_operation (&send, &receive);
- egg_buffer_uninit (&send);
- if (res != GNOME_KEYRING_RESULT_OK) {
- egg_buffer_uninit (&receive);
- return res;
- }
-
- if (!gkr_proto_decode_result_string_reply (&receive, &res, keyring)) {
- egg_buffer_uninit (&receive);
- return GNOME_KEYRING_RESULT_IO_ERROR;
- }
- egg_buffer_uninit (&receive);
-
- return res;
-#endif
- g_assert (FALSE && "TODO");
- return 0;
+ GkrOperation *op = gnome_keyring_get_default_keyring (get_default_keyring_sync, keyring, NULL);
+ return gkr_operation_block (op);
}
static void
@@ -4153,33 +4146,6 @@ gnome_keyring_store_password_sync (const GnomeKeyringPasswordSchema* schema, con
return res;
}
-#if 0
-static gboolean
-find_password_reply (GnomeKeyringOperation *op)
-{
- GnomeKeyringResult result;
- GnomeKeyringOperationGetStringCallback callback;
- GList *found_items;
- const gchar *password;
-
- g_assert (op->user_callback_type == GKR_CALLBACK_RES_STRING);
- callback = op->user_callback;
-
- if (!gkr_proto_decode_find_reply (&op->receive_buffer, &result, &found_items)) {
- (*callback) (GNOME_KEYRING_RESULT_IO_ERROR, NULL, op->user_data);
- } else {
- password = NULL;
- if (found_items)
- password = ((GnomeKeyringFound*)(found_items->data))->secret;
- (*callback) (result, password, op->user_data);
- gnome_keyring_found_list_free (found_items);
- }
-
- /* GkrOperation is done */
- return TRUE;
-}
-#endif
-
static gboolean
find_unlocked_first (const char *path, gpointer user_data)
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]