[evolution-data-server] [module-secret-monitor] Correct runtime warning from secret_service_search_sync()



commit 1784ad66533d424844cecf9ddf356aa0ec93d066
Author: Milan Crha <mcrha redhat com>
Date:   Fri May 18 10:27:27 2018 +0200

    [module-secret-monitor] Correct runtime warning from secret_service_search_sync()
    
    The evolution-source-registry console could contain a runtime warning:
    WARNING **: secret_service_search_sync: must specify at least one attribute to match
    which was due to calling secret_service_search_sync() with an empty
    hash table of attributes. Adding an 'eds-origin' attribute to the keys
    and search for it helps to make the module do what it was supposed to do.

 src/libedataserver/e-secret-store.c                |   14 ++++++++------
 src/modules/secret-monitor/module-secret-monitor.c |   13 ++++++-------
 2 files changed, 14 insertions(+), 13 deletions(-)
---
diff --git a/src/libedataserver/e-secret-store.c b/src/libedataserver/e-secret-store.c
index d28107a..96c8dbf 100644
--- a/src/libedataserver/e-secret-store.c
+++ b/src/libedataserver/e-secret-store.c
@@ -251,14 +251,15 @@ e_win32_secret_delete_secret_sync (const gchar *uid,
 
 #else /* G_OS_WIN32 */
 
-#define KEYRING_ITEM_ATTRIBUTE_NAME    "e-source-uid"
+#define KEYRING_ITEM_ATTRIBUTE_UID     "e-source-uid"
+#define KEYRING_ITEM_ATTRIBUTE_ORIGIN  "eds-origin"
 
 static SecretSchema password_schema = {
        "org.gnome.Evolution.Data.Source",
        SECRET_SCHEMA_DONT_MATCH_NAME,
        {
-               { KEYRING_ITEM_ATTRIBUTE_NAME,
-                 SECRET_SCHEMA_ATTRIBUTE_STRING },
+               { KEYRING_ITEM_ATTRIBUTE_UID, SECRET_SCHEMA_ATTRIBUTE_STRING },
+               { KEYRING_ITEM_ATTRIBUTE_ORIGIN, SECRET_SCHEMA_ATTRIBUTE_STRING },
                { NULL, 0 }
        }
 };
@@ -314,7 +315,8 @@ e_secret_store_store_sync (const gchar *uid,
                &password_schema,
                collection, label, secret,
                cancellable, error,
-               KEYRING_ITEM_ATTRIBUTE_NAME, uid,
+               KEYRING_ITEM_ATTRIBUTE_UID, uid,
+               KEYRING_ITEM_ATTRIBUTE_ORIGIN, PACKAGE,
                NULL);
 #endif
 
@@ -359,7 +361,7 @@ e_secret_store_lookup_sync (const gchar *uid,
        temp = secret_password_lookup_sync (
                &password_schema,
                cancellable, &local_error,
-               KEYRING_ITEM_ATTRIBUTE_NAME, uid,
+               KEYRING_ITEM_ATTRIBUTE_UID, uid,
                NULL);
 #endif
 
@@ -413,7 +415,7 @@ e_secret_store_delete_sync (const gchar *uid,
        secret_password_clear_sync (
                &password_schema,
                cancellable, &local_error,
-               KEYRING_ITEM_ATTRIBUTE_NAME, uid,
+               KEYRING_ITEM_ATTRIBUTE_UID, uid,
                NULL);
 #endif
 
diff --git a/src/modules/secret-monitor/module-secret-monitor.c 
b/src/modules/secret-monitor/module-secret-monitor.c
index 817c401..7987962 100644
--- a/src/modules/secret-monitor/module-secret-monitor.c
+++ b/src/modules/secret-monitor/module-secret-monitor.c
@@ -53,15 +53,16 @@ struct _ESecretMonitorClass {
 /* XXX ESource's SecretSchema copied here for searching.
  *     Maybe add a searching function to e-source.[ch]? */
 
-#define KEYRING_ITEM_ATTRIBUTE_NAME    "e-source-uid"
+#define KEYRING_ITEM_ATTRIBUTE_UID     "e-source-uid"
+#define KEYRING_ITEM_ATTRIBUTE_ORIGIN  "eds-origin"
 #define KEYRING_ITEM_DISPLAY_FORMAT    "Evolution Data Source '%s'"
 
 static SecretSchema password_schema = {
        "org.gnome.Evolution.Data.Source",
        SECRET_SCHEMA_DONT_MATCH_NAME,
        {
-               { KEYRING_ITEM_ATTRIBUTE_NAME,
-                 SECRET_SCHEMA_ATTRIBUTE_STRING },
+               { KEYRING_ITEM_ATTRIBUTE_UID, SECRET_SCHEMA_ATTRIBUTE_STRING },
+               { KEYRING_ITEM_ATTRIBUTE_ORIGIN, SECRET_SCHEMA_ATTRIBUTE_STRING },
                { NULL, 0 }
        }
 };
@@ -102,9 +103,8 @@ secret_monitor_scan_secrets_thread (gpointer user_data)
 
        server = E_SOURCE_REGISTRY_SERVER (user_data);
 
-       /* XXX secret_service_search_sync() won't accept NULL for its
-        *     'attributes' parameter, so give it an empty hash table. */
        attributes = g_hash_table_new (g_str_hash, g_str_equal);
+       g_hash_table_insert (attributes, (gpointer) KEYRING_ITEM_ATTRIBUTE_ORIGIN, (gpointer) PACKAGE);
 
        /* List all items under our custom SecretSchema. */
        list = secret_service_search_sync (
@@ -126,8 +126,7 @@ secret_monitor_scan_secrets_thread (gpointer user_data)
 
                attributes = secret_item_get_attributes (item);
 
-               uid = g_hash_table_lookup (
-                       attributes, KEYRING_ITEM_ATTRIBUTE_NAME);
+               uid = g_hash_table_lookup (attributes, KEYRING_ITEM_ATTRIBUTE_UID);
 
                /* No UID attribute?  Best leave it alone. */
                if (uid == NULL)


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]