[evolution-data-server] [Flatpak] Save passwords in libsecret with the same prefix as used by D-Bus services



commit 50a15363b1aa816619f4d6cca74e653279fa33e9
Author: Milan Crha <mcrha redhat com>
Date:   Mon Dec 3 11:03:54 2018 +0100

    [Flatpak] Save passwords in libsecret with the same prefix as used by D-Bus services
    
    As the passwords are saved in the host system, the eds-origin key cannot
    use the same value as the host system, because otherwise the secret-monitor
    module of evolution-source-registry would delete the password, because
    the ESource is unknown to it. Similarly the other way around, the inner
    (in Flatpak) source registry would delete system passwords, because those
    ESource-s are unknown to it.

 CMakeLists.txt                                     |  2 ++
 config.h.in                                        |  3 +++
 src/libedataserver/e-secret-store.c                |  8 +++++++-
 src/modules/secret-monitor/module-secret-monitor.c | 10 ++++++++--
 4 files changed, 20 insertions(+), 3 deletions(-)
---
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 6e38fde6e..cd1161158 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -177,6 +177,8 @@ if(NOT ("${DBUS_SERVICES_PREFIX}" STREQUAL ""))
        set(CALENDAR_DBUS_SERVICE_NAME          "${DBUS_SERVICES_PREFIX}.${CALENDAR_DBUS_SERVICE_NAME}")
        set(SOURCES_DBUS_SERVICE_NAME           "${DBUS_SERVICES_PREFIX}.${SOURCES_DBUS_SERVICE_NAME}")
        set(USER_PROMPTER_DBUS_SERVICE_NAME     "${DBUS_SERVICES_PREFIX}.${USER_PROMPTER_DBUS_SERVICE_NAME}")
+else(NOT ("${DBUS_SERVICES_PREFIX}" STREQUAL ""))
+       unset(DBUS_SERVICES_PREFIX)
 endif(NOT ("${DBUS_SERVICES_PREFIX}" STREQUAL ""))
 
 # ******************************
diff --git a/config.h.in b/config.h.in
index fe3b5cb5c..4f5d97e1c 100644
--- a/config.h.in
+++ b/config.h.in
@@ -18,6 +18,9 @@
 /* Package name for gettext */
 #define GETTEXT_PACKAGE "@GETTEXT_PACKAGE@"
 
+/* Defined to prefix used by the D-Bus services (usually when run in Flatpak) */
+#cmakedefine DBUS_SERVICES_PREFIX "@DBUS_SERVICES_PREFIX@"
+
 /* D-Bus service name for the address book factory */
 #define ADDRESS_BOOK_DBUS_SERVICE_NAME "@ADDRESS_BOOK_DBUS_SERVICE_NAME@"
 
diff --git a/src/libedataserver/e-secret-store.c b/src/libedataserver/e-secret-store.c
index 96c8dbf24..e15148227 100644
--- a/src/libedataserver/e-secret-store.c
+++ b/src/libedataserver/e-secret-store.c
@@ -254,6 +254,12 @@ e_win32_secret_delete_secret_sync (const gchar *uid,
 #define KEYRING_ITEM_ATTRIBUTE_UID     "e-source-uid"
 #define KEYRING_ITEM_ATTRIBUTE_ORIGIN  "eds-origin"
 
+#ifdef DBUS_SERVICES_PREFIX
+#define ORIGIN_KEY DBUS_SERVICES_PREFIX "." PACKAGE
+#else
+#define ORIGIN_KEY PACKAGE
+#endif
+
 static SecretSchema password_schema = {
        "org.gnome.Evolution.Data.Source",
        SECRET_SCHEMA_DONT_MATCH_NAME,
@@ -316,7 +322,7 @@ e_secret_store_store_sync (const gchar *uid,
                collection, label, secret,
                cancellable, error,
                KEYRING_ITEM_ATTRIBUTE_UID, uid,
-               KEYRING_ITEM_ATTRIBUTE_ORIGIN, PACKAGE,
+               KEYRING_ITEM_ATTRIBUTE_ORIGIN, ORIGIN_KEY,
                NULL);
 #endif
 
diff --git a/src/modules/secret-monitor/module-secret-monitor.c 
b/src/modules/secret-monitor/module-secret-monitor.c
index 7987962ab..287a6290a 100644
--- a/src/modules/secret-monitor/module-secret-monitor.c
+++ b/src/modules/secret-monitor/module-secret-monitor.c
@@ -57,6 +57,12 @@ struct _ESecretMonitorClass {
 #define KEYRING_ITEM_ATTRIBUTE_ORIGIN  "eds-origin"
 #define KEYRING_ITEM_DISPLAY_FORMAT    "Evolution Data Source '%s'"
 
+#ifdef DBUS_SERVICES_PREFIX
+#define ORIGIN_KEY DBUS_SERVICES_PREFIX "." PACKAGE
+#else
+#define ORIGIN_KEY PACKAGE
+#endif
+
 static SecretSchema password_schema = {
        "org.gnome.Evolution.Data.Source",
        SECRET_SCHEMA_DONT_MATCH_NAME,
@@ -104,7 +110,7 @@ secret_monitor_scan_secrets_thread (gpointer user_data)
        server = E_SOURCE_REGISTRY_SERVER (user_data);
 
        attributes = g_hash_table_new (g_str_hash, g_str_equal);
-       g_hash_table_insert (attributes, (gpointer) KEYRING_ITEM_ATTRIBUTE_ORIGIN, (gpointer) PACKAGE);
+       g_hash_table_insert (attributes, (gpointer) KEYRING_ITEM_ATTRIBUTE_ORIGIN, (gpointer) ORIGIN_KEY);
 
        /* List all items under our custom SecretSchema. */
        list = secret_service_search_sync (
@@ -187,7 +193,7 @@ secret_monitor_scan_secrets_timeout_cb (gpointer user_data)
        extension = E_SECRET_MONITOR (user_data);
        server = secret_monitor_get_server (extension);
 
-       g_debug ("Scanning and pruning saved passwords");
+       e_source_registry_debug_print ("Scanning and pruning saved passwords\n");
 
        /* Do the real work in a thread, so we can use synchronous
         * libsecret calls and keep the logic flow easy to follow. */


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