commit:     9e393cd5cae6c5e9d54a8313cdcad4e2a5c245ca
Author:     Pacho Ramos <pacho <AT> gentoo <DOT> org>
AuthorDate: Sat Aug 16 08:43:18 2025 +0000
Commit:     Pacho Ramos <pacho <AT> gentoo <DOT> org>
CommitDate: Sat Aug 16 09:26:32 2025 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=9e393cd5

gnome-base/gnome-keyring: add 48.0

Signed-off-by: Pacho Ramos <pacho <AT> gentoo.org>

 gnome-base/gnome-keyring/Manifest                  |   1 +
 ...gnome-keyring-48.0-collection-registering.patch | 161 +++++++++++++++++++++
 .../gnome-keyring-48.0-gkm_marshal-header.patch    |  24 +++
 gnome-base/gnome-keyring/gnome-keyring-48.0.ebuild |  88 +++++++++++
 4 files changed, 274 insertions(+)

diff --git a/gnome-base/gnome-keyring/Manifest 
b/gnome-base/gnome-keyring/Manifest
index 81236a9bb976..8f888337b29b 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 000000000000..05ef465cfc11
--- /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 <[email protected]>
+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 000000000000..9955e8da4883
--- /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 <[email protected]>
+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 000000000000..606d4204e170
--- /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
+}

Reply via email to