diff --git a/gnome-base/gnome-keyring/Manifest b/gnome-base/gnome-keyring/Manifest index 81236a9bb976d..8f888337b29bd 100644 --- a/gnome-base/gnome-keyring/Manifest +++ b/gnome-base/gnome-keyring/Manifest @@ -1 +1,2 @@ DIST gnome-keyring-46.2.tar.xz 1359500 BLAKE2B 47dad5b1eab387e600016828c99d7c829f509e9929e0e06d6427f6c84053050be1e79c4fb369caa1cdfc862e20677a518155b1a5496a64e118f461e81b60edcd SHA512 4229ca0606bdd1b84a3c737288df7f1fc1f8715734e3001964babd882201c3d818deabb3a7662dbf9b67316f03b234de84da3128fb991a500ef8305c2f962ba2 +DIST gnome-keyring-48.0.tar.xz 767428 BLAKE2B 6aacccf506872d3fe4b8b33be8e6d2a4af1ceaad9534b82b57ef7e5b274851aaab838015306bf38034c74574b72ba7751415ef29e4afc0d681d271421570f9d8 SHA512 9eac06164c22a854a171f538467403c6764a6a6c2665959d721f5e3515bd91c8709a374c292cde93143f944b4ed7ec9b5613d28808d7e79839a9377d5aaa5daa diff --git a/gnome-base/gnome-keyring/files/gnome-keyring-48.0-collection-registering.patch b/gnome-base/gnome-keyring/files/gnome-keyring-48.0-collection-registering.patch new file mode 100644 index 0000000000000..05ef465cfc110 --- /dev/null +++ b/gnome-base/gnome-keyring/files/gnome-keyring-48.0-collection-registering.patch @@ -0,0 +1,161 @@ +From 651417478158ae00b9cdf1dc05d038117615fe69 Mon Sep 17 00:00:00 2001 +From: zsien +Date: Tue, 3 Dec 2024 19:56:05 +0800 +Subject: [PATCH] Ensure the login collection is registered after unlocking + +Fixes #151 +--- + daemon/control/gkd-control-server.c | 8 ++++++-- + daemon/dbus/gkd-dbus-secrets.c | 6 ++++++ + daemon/dbus/gkd-dbus.h | 2 ++ + daemon/dbus/gkd-secret-objects.c | 7 +++++++ + daemon/dbus/gkd-secret-objects.h | 3 +++ + daemon/dbus/gkd-secret-service.c | 13 +++++++++++++ + daemon/dbus/gkd-secret-service.h | 2 ++ + daemon/gkd-main.c | 6 ++++++ + daemon/gkd-main.h | 2 ++ + 9 files changed, 47 insertions(+), 2 deletions(-) + +diff --git a/daemon/control/gkd-control-server.c b/daemon/control/gkd-control-server.c +index 5ef307d6..dcf6471e 100644 +--- a/daemon/control/gkd-control-server.c ++++ b/daemon/control/gkd-control-server.c +@@ -25,6 +25,7 @@ + + #include "daemon/gkd-main.h" + #include "daemon/gkd-util.h" ++#include "daemon/dbus/gkd-dbus.h" + + #include "egg/egg-buffer.h" + #include "egg/egg-cleanup.h" +@@ -85,10 +86,13 @@ control_unlock_login (EggBuffer *buffer) + if (!egg_buffer_get_string (buffer, offset, &offset, &master, egg_secure_realloc)) + return GKD_CONTROL_RESULT_FAILED; + +- if (gkd_login_unlock (master)) ++ if (gkd_login_unlock (master)) { + res = GKD_CONTROL_RESULT_OK; +- else ++ if (gkd_main_secrets_started ()) ++ gkd_dbus_ensure_login_collection_is_registered (); ++ } else { + res = GKD_CONTROL_RESULT_DENIED; ++ } + + egg_secure_strfree (master); + return res; +diff --git a/daemon/dbus/gkd-dbus-secrets.c b/daemon/dbus/gkd-dbus-secrets.c +index 207524b2..7227dd83 100644 +--- a/daemon/dbus/gkd-dbus-secrets.c ++++ b/daemon/dbus/gkd-dbus-secrets.c +@@ -156,3 +156,9 @@ gkd_dbus_secrets_cleanup (GDBusConnection *conn) + secrets_service = NULL; + } + } ++ ++void ++gkd_dbus_ensure_login_collection_is_registered (void) ++{ ++ gkd_secret_service_ensure_login_collection_is_registered (secrets_service); ++} +diff --git a/daemon/dbus/gkd-dbus.h b/daemon/dbus/gkd-dbus.h +index 8a9ca450..9cd2a55b 100644 +--- a/daemon/dbus/gkd-dbus.h ++++ b/daemon/dbus/gkd-dbus.h +@@ -38,4 +38,6 @@ gchar* gkd_dbus_singleton_control (void); + gboolean gkd_dbus_invocation_matches_caller (GDBusMethodInvocation *invocation, + const char *caller); + ++void gkd_dbus_ensure_login_collection_is_registered (void); ++ + #endif /* GKD_DBUS_H */ +diff --git a/daemon/dbus/gkd-secret-objects.c b/daemon/dbus/gkd-secret-objects.c +index af896017..5dda0f3f 100644 +--- a/daemon/dbus/gkd-secret-objects.c ++++ b/daemon/dbus/gkd-secret-objects.c +@@ -1660,3 +1660,10 @@ gkd_secret_objects_unregister_collection (GkdSecretObjects *self, + return; + } + } ++ ++gboolean ++gkd_secret_objects_check_collection_is_registered (GkdSecretObjects *self, ++ const gchar *collection_path) ++{ ++ return g_hash_table_lookup (self->collections_to_skeletons, collection_path) != NULL; ++} +diff --git a/daemon/dbus/gkd-secret-objects.h b/daemon/dbus/gkd-secret-objects.h +index e9b61d4e..90516743 100644 +--- a/daemon/dbus/gkd-secret-objects.h ++++ b/daemon/dbus/gkd-secret-objects.h +@@ -102,4 +102,7 @@ void gkd_secret_objects_register_collection (GkdSecretObjec + void gkd_secret_objects_unregister_collection (GkdSecretObjects *self, + const gchar *collection_path); + ++gboolean gkd_secret_objects_check_collection_is_registered (GkdSecretObjects *self, ++ const gchar *collection_path); ++ + #endif /* __GKD_SECRET_OBJECTS_H__ */ +diff --git a/daemon/dbus/gkd-secret-service.c b/daemon/dbus/gkd-secret-service.c +index 7a445815..b36cbac9 100644 +--- a/daemon/dbus/gkd-secret-service.c ++++ b/daemon/dbus/gkd-secret-service.c +@@ -1447,3 +1447,16 @@ gkd_secret_service_emit_collection_changed (GkdSecretService *self, + + gkd_exported_service_emit_collection_changed (self->skeleton, collection_path); + } ++ ++void ++gkd_secret_service_ensure_login_collection_is_registered (GkdSecretService *self) ++{ ++ g_return_if_fail (GKD_SECRET_IS_SERVICE (self)); ++ ++ gchar *collection_path = gkd_secret_util_build_path (SECRET_COLLECTION_PREFIX, "login", strlen("login")); ++ if (gkd_secret_objects_check_collection_is_registered (self->objects, collection_path)) { ++ return; ++ } ++ ++ gkd_secret_objects_register_collection (self->objects, collection_path); ++} +diff --git a/daemon/dbus/gkd-secret-service.h b/daemon/dbus/gkd-secret-service.h +index f95ac960..960da546 100644 +--- a/daemon/dbus/gkd-secret-service.h ++++ b/daemon/dbus/gkd-secret-service.h +@@ -84,4 +84,6 @@ void gkd_secret_service_emit_collection_changed (GkdSecretSer + + gchar ** gkd_secret_service_get_collections (GkdSecretService *self); + ++void gkd_secret_service_ensure_login_collection_is_registered (GkdSecretService *self); ++ + #endif /* ___SECRET_SERVICE_H__ */ +diff --git a/daemon/gkd-main.c b/daemon/gkd-main.c +index 6fab91fa..f6268bad 100644 +--- a/daemon/gkd-main.c ++++ b/daemon/gkd-main.c +@@ -821,6 +821,12 @@ gkd_main_complete_initialization (const gchar *components) + gkr_daemon_initialize_steps (components); + } + ++gboolean ++gkd_main_secrets_started (void) ++{ ++ return secrets_started; ++} ++ + static gboolean + on_login_timeout (gpointer data) + { +diff --git a/daemon/gkd-main.h b/daemon/gkd-main.h +index b847be6b..5e9ba153 100644 +--- a/daemon/gkd-main.h ++++ b/daemon/gkd-main.h +@@ -27,4 +27,6 @@ void gkd_main_quit (void); + + void gkd_main_complete_initialization (const gchar *components); + ++gboolean gkd_main_secrets_started (void); ++ + #endif /* GKD_MAIN_H_ */ +-- +GitLab + diff --git a/gnome-base/gnome-keyring/files/gnome-keyring-48.0-gkm_marshal-header.patch b/gnome-base/gnome-keyring/files/gnome-keyring-48.0-gkm_marshal-header.patch new file mode 100644 index 0000000000000..9955e8da48831 --- /dev/null +++ b/gnome-base/gnome-keyring/files/gnome-keyring-48.0-gkm_marshal-header.patch @@ -0,0 +1,24 @@ +From ce3553000066f327e452c71bf12ef14b0cfeba7b Mon Sep 17 00:00:00 2001 +From: fossdd +Date: Mon, 24 Mar 2025 15:23:51 +0100 +Subject: build: Add gkm_marshal header to libgkm sources + +Otherwise the gkm_marshal header is sometimes not generated +while building libgkm + +diff --git a/pkcs11/gkm/meson.build b/pkcs11/gkm/meson.build +index 9a3ab06c..23b57757 100644 +--- a/pkcs11/gkm/meson.build ++++ b/pkcs11/gkm/meson.build +@@ -68,8 +68,9 @@ libgkm_dep = declare_dependency( + link_with: libgkm, + include_directories: [ + include_directories('.'), +- include_directories('..'), # for gkm-marshal.h +- ] ++ include_directories('..'), # for gkm/gkm-{crypto,assertion}.h ++ ], ++ sources: gkm_marshal[1], + ) + + # Tests diff --git a/gnome-base/gnome-keyring/gnome-keyring-48.0.ebuild b/gnome-base/gnome-keyring/gnome-keyring-48.0.ebuild new file mode 100644 index 0000000000000..606d4204e1701 --- /dev/null +++ b/gnome-base/gnome-keyring/gnome-keyring-48.0.ebuild @@ -0,0 +1,88 @@ +# Copyright 1999-2025 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 +PYTHON_COMPAT=( python3_{11..13} ) + +inherit gnome.org gnome2-utils meson python-any-r1 virtualx xdg + +DESCRIPTION="Password and keyring managing daemon" +HOMEPAGE="https://gitlab.gnome.org/GNOME/gnome-keyring" + +LICENSE="GPL-2+ LGPL-2+" +SLOT="0" +KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~loong ~mips ~ppc ~ppc64 ~riscv ~sparc ~x86 ~amd64-linux ~x86-linux" +IUSE="pam selinux ssh-agent systemd test" +RESTRICT="!test? ( test )" + +RDEPEND=" + >=dev-libs/glib-2.80:2 + >=app-crypt/gcr-3.27.90:0=[gtk] + >=dev-libs/libgcrypt-1.2.2:0= + app-crypt/p11-kit + + >=app-eselect/eselect-pinentry-0.5 + app-misc/ca-certificates + + selinux? ( sec-policy/selinux-gnome ) + systemd? ( sys-apps/systemd ) + ssh-agent? ( virtual/openssh ) + pam? ( sys-libs/pam ) +" +DEPEND="${RDEPEND}" +BDEPEND=" + >=sys-devel/gettext-0.19.8 + >=app-eselect/eselect-pinentry-0.5 + app-text/docbook-xml-dtd:4.3 + dev-libs/libxslt + virtual/pkgconfig + test? ( ${PYTHON_DEPS} ) +" + +PATCHES=( + # From Fedora: + # https://gitlab.gnome.org/GNOME/gnome-keyring/-/merge_requests/96 + "${FILESDIR}/${PN}-48.0-collection-registering.patch" + + #https://gitlab.gnome.org/GNOME/gnome-keyring/-/issues/151 + "${FILESDIR}/${PN}-48.0-gkm_marshal-header.patch" +) + +pkg_setup() { + use test && python-any-r1_pkg_setup +} + +src_configure() { + local emesonargs=( + $(meson_use ssh-agent) + $(meson_feature selinux) + $(meson_feature systemd) + $(meson_use pam) + ) + meson_src_configure +} + +src_test() { + # Needs dbus-run-session to not get: + # ERROR: test-dbus-search process failed: -6 + "${BROOT}${GLIB_COMPILE_SCHEMAS}" --allow-any-name "${S}/schema" || die + GSETTINGS_SCHEMA_DIR="${S}/schema" virtx dbus-run-session meson test -C "${BUILD_DIR}" || die +} + +pkg_postinst() { + # cap_ipc_lock only needed if building with libcap-ng, but that breaks with glib-2.70 + # Never install as suid root, this breaks dbus activation, see bug + # #513870, https://gitlab.gnome.org/GNOME/gnome-keyring/-/issues/77 + + xdg_pkg_postinst + gnome2_schemas_update + if ! [[ $(eselect pinentry show | grep "pinentry-gnome3") ]] ; then + ewarn "Please select pinentry-gnome3 as default pinentry provider:" + ewarn " # eselect pinentry set pinentry-gnome3" + fi +} + +pkg_postrm() { + xdg_pkg_postrm + gnome2_schemas_update +}