gnome-base/gnome-keyring: add 48.0

Signed-off-by: Pacho Ramos <pacho@gentoo.org>
This commit is contained in:
Pacho Ramos 2025-08-16 10:43:18 +02:00
parent 476a6c2cb5
commit 9e393cd5ca
No known key found for this signature in database
GPG Key ID: 7CB10C207FC07DBC
4 changed files with 274 additions and 0 deletions

View File

@ -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

View File

@ -0,0 +1,161 @@
From 651417478158ae00b9cdf1dc05d038117615fe69 Mon Sep 17 00:00:00 2001
From: zsien <i@zsien.cn>
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

View File

@ -0,0 +1,24 @@
From ce3553000066f327e452c71bf12ef14b0cfeba7b Mon Sep 17 00:00:00 2001
From: fossdd <fossdd@pwned.life>
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

View File

@ -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
}