[libgnome-keyring] Properly send the Type property when a new item is created.
- From: Stefan Walter <stefw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libgnome-keyring] Properly send the Type property when a new item is created.
- Date: Thu, 15 Sep 2011 10:01:41 +0000 (UTC)
commit 231045523eb6f17ee942b359af4c200e65a3fd00
Author: Stef Walter <stefw collabora co uk>
Date: Thu Sep 15 12:00:40 2011 +0200
Properly send the Type property when a new item is created.
* Previously items were all being created as generic secret.
https://bugzilla.gnome.org/show_bug.cgi?id=654425
library/gnome-keyring.c | 48 ++++++++++++++++++++++++++++------------
library/tests/test-keyrings.c | 28 +++++++++++++++++++++++
2 files changed, 61 insertions(+), 15 deletions(-)
---
diff --git a/library/gnome-keyring.c b/library/gnome-keyring.c
index 61d4f8b..4544084 100644
--- a/library/gnome-keyring.c
+++ b/library/gnome-keyring.c
@@ -2567,6 +2567,27 @@ item_create_sync (GnomeKeyringResult res, guint32 item_id, gpointer data)
*result = item_id;
}
+static const gchar *
+item_type_to_string (GnomeKeyringItemType item_type)
+{
+ switch (item_type) {
+ case GNOME_KEYRING_ITEM_GENERIC_SECRET:
+ return "org.freedesktop.Secret.Generic";
+ case GNOME_KEYRING_ITEM_NETWORK_PASSWORD:
+ return "org.gnome.keyring.NetworkPassword";
+ case GNOME_KEYRING_ITEM_NOTE:
+ return "org.gnome.keyring.Note";
+ case GNOME_KEYRING_ITEM_CHAINED_KEYRING_PASSWORD:
+ return "org.gnome.keyring.ChainedKeyring";
+ case GNOME_KEYRING_ITEM_ENCRYPTION_KEY_PASSWORD:
+ return "org.gnome.keyring.EncryptionKey";
+ case GNOME_KEYRING_ITEM_PK_STORAGE:
+ return "org.gnome.keyring.PkStorage";
+ default:
+ return "org.freedesktop.Secret.Generic";
+ }
+}
+
static DBusMessage*
item_create_prepare (const gchar *path, GnomeKeyringItemType type, const gchar *label,
GnomeKeyringAttributeList *attrs, DBusMessageIter *iter)
@@ -2574,6 +2595,7 @@ item_create_prepare (const gchar *path, GnomeKeyringItemType type, const gchar *
DBusMessageIter array, variant, dict;
DBusMessage *req;
const char *string;
+ const gchar *type_string;
req = dbus_message_new_method_call (gkr_service_name (), path,
COLLECTION_INTERFACE, "CreateItem");
@@ -2599,6 +2621,16 @@ item_create_prepare (const gchar *path, GnomeKeyringItemType type, const gchar *
dbus_message_iter_close_container (&dict, &variant);
dbus_message_iter_close_container (&array, &dict);
+ /* Set the item type */
+ string = ITEM_INTERFACE ".Type";
+ type_string = item_type_to_string (type);
+ dbus_message_iter_open_container (&array, DBUS_TYPE_DICT_ENTRY, NULL, &dict);
+ dbus_message_iter_append_basic (&dict, DBUS_TYPE_STRING, &string);
+ dbus_message_iter_open_container (&dict, DBUS_TYPE_VARIANT, "s", &variant);
+ dbus_message_iter_append_basic (&variant, DBUS_TYPE_STRING, &type_string);
+ dbus_message_iter_close_container (&dict, &variant);
+ dbus_message_iter_close_container (&array, &dict);
+
dbus_message_iter_close_container (iter, &array);
return req;
}
@@ -3394,21 +3426,7 @@ item_set_info_1_reply (GkrOperation *op, DBusMessage *reply, gpointer user_data)
dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &string);
dbus_message_iter_open_container (&iter, DBUS_TYPE_VARIANT, "s", &variant);
- if (args->info->type == GNOME_KEYRING_ITEM_GENERIC_SECRET)
- string = "org.freedesktop.Secret.Generic";
- else if (args->info->type == GNOME_KEYRING_ITEM_NETWORK_PASSWORD)
- string = "org.gnome.keyring.NetworkPassword";
- else if (args->info->type == GNOME_KEYRING_ITEM_NOTE)
- string = "org.gnome.keyring.Note";
- else if (args->info->type == GNOME_KEYRING_ITEM_CHAINED_KEYRING_PASSWORD)
- string = "org.gnome.keyring.ChainedKeyring";
- else if (args->info->type == GNOME_KEYRING_ITEM_ENCRYPTION_KEY_PASSWORD)
- string = "org.gnome.keyring.EncryptionKey";
- else if (args->info->type == GNOME_KEYRING_ITEM_PK_STORAGE)
- string = "org.gnome.keyring.PkStorage";
- else
- string = "org.freedesktop.Secret.Generic";
-
+ string = item_type_to_string (args->info->type);
dbus_message_iter_append_basic (&variant, DBUS_TYPE_STRING, &string);
dbus_message_iter_close_container (&iter, &variant);
diff --git a/library/tests/test-keyrings.c b/library/tests/test-keyrings.c
index b7a7981..517ec8e 100644
--- a/library/tests/test-keyrings.c
+++ b/library/tests/test-keyrings.c
@@ -238,6 +238,33 @@ test_create_list_items (void)
}
static void
+test_create_item_with_type (void)
+{
+ GnomeKeyringResult res;
+ guint id;
+ GList *ids;
+ GnomeKeyringItemInfo *info;
+
+ /* Try in an invalid keyring */
+ res = gnome_keyring_item_create_sync (KEYRING_NAME, GNOME_KEYRING_ITEM_NOTE,
+ DISPLAY_NAME, NULL, SECRET, FALSE, &id);
+ g_assert_cmpint (GNOME_KEYRING_RESULT_OK, ==, res);
+
+ /* List ids that were created */
+ res = gnome_keyring_list_item_ids_sync (KEYRING_NAME, &ids);
+ g_assert_cmpint (GNOME_KEYRING_RESULT_OK, ==, res);
+
+ /* Now make sure both have that same secret */
+ res = gnome_keyring_item_get_info_sync (KEYRING_NAME, id, &info);
+ g_assert_cmpint (GNOME_KEYRING_RESULT_OK, ==, res);
+ g_assert_cmpint (gnome_keyring_item_info_get_type (info), ==, GNOME_KEYRING_ITEM_NOTE);
+
+ /* Now delete the item */
+ res = gnome_keyring_item_delete_sync (NULL, id);
+ g_assert_cmpint (GNOME_KEYRING_RESULT_OK, ==, res);
+}
+
+static void
test_find_keyrings (void)
{
GnomeKeyringResult res;
@@ -737,6 +764,7 @@ main (int argc, char **argv)
g_test_add_func ("/keyrings/delete-keyring", test_delete_keyring);
g_test_add_func ("/keyrings/recreate-keyring", test_recreate_keyring);
g_test_add_func ("/keyrings/create-list-items", test_create_list_items);
+ g_test_add_func ("/keyrings/create-item-with-type", test_create_item_with_type);
g_test_add_func ("/keyrings/find-keyrings", test_find_keyrings);
g_test_add_func ("/keyrings/find-invalid", test_find_invalid);
g_test_add_func ("/keyrings/lock-keyrings", test_lock_keyrings);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]