diff options
author | Milan Crha <mcrha@redhat.com> | 2018-12-03 11:03:54 +0100 |
---|---|---|
committer | Milan Crha <mcrha@redhat.com> | 2018-12-03 11:03:54 +0100 |
commit | 50a15363b1aa816619f4d6cca74e653279fa33e9 (patch) | |
tree | 262cf13ba0b39f5fdf23316ec38e54c1880fb37f | |
parent | 2aad02605913fc6c8e4ba7d0bf58497a57a9044c (diff) | |
download | evolution-data-server-50a15363b1aa816619f4d6cca74e653279fa33e9.tar.gz |
[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.
-rw-r--r-- | CMakeLists.txt | 2 | ||||
-rw-r--r-- | config.h.in | 3 | ||||
-rw-r--r-- | src/libedataserver/e-secret-store.c | 8 | ||||
-rw-r--r-- | 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. */ |