diff --git a/78.patch b/78.patch new file mode 100644 index 0000000000000000000000000000000000000000..05ef465cfc110b2f72468a293f0673069b5e7253 --- /dev/null +++ b/78.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-keyring-42.1.tar.xz b/gnome-keyring-42.1.tar.xz deleted file mode 100644 index 8cced90e13ab71fc2dcc4457d072814d6e7da5d0..0000000000000000000000000000000000000000 Binary files a/gnome-keyring-42.1.tar.xz and /dev/null differ diff --git a/gnome-keyring-48.0-gkm_marshal-header.patch b/gnome-keyring-48.0-gkm_marshal-header.patch new file mode 100644 index 0000000000000000000000000000000000000000..9955e8da48831c1f3959992f33b011182b4cbf32 --- /dev/null +++ b/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-keyring-48.0.tar.xz b/gnome-keyring-48.0.tar.xz new file mode 100644 index 0000000000000000000000000000000000000000..80c5db192605567e61940438b21966ebc86bb7cb Binary files /dev/null and b/gnome-keyring-48.0.tar.xz differ diff --git a/gnome-keyring.spec b/gnome-keyring.spec index 15667aefa1f9fa9291820ca554ab41c335eb73d9..3575b87923b9d4f24e6b9a7377eec72395c90594 100644 --- a/gnome-keyring.spec +++ b/gnome-keyring.spec @@ -1,23 +1,44 @@ -%global glib2_version 2.44.0 +%global glib2_version 2.80 %global gcr_version 3.27.90 %global gcrypt_version 1.2.2 Name: gnome-keyring -Version: 42.1 -Release: 2 +Version: 48.0 +Release: 1 Summary: A program that keep password and other secrets for users -License: GPLv2+ and LGPLv2+ +License: GPL-2.0-only AND GPL-2.0-or-later AND LGPL-2.1-or-later AND ((GPL-2.0-or-later OR LGPL-3.0-or-later) OR BSD-3-Clause) AND (MPL-1.1 OR GPL-2.0-or-later OR LGPL-2.1-or-later) URL: https://wiki.gnome.org/Projects/GnomeKeyring -Source0: https://download.gnome.org/sources/%{name}/42/%{name}-%{version}.tar.xz - -BuildRequires: gcc docbook-dtds docbook-style-xsl gettext intltool libcap-ng-devel libselinux-devel pam-devel -BuildRequires: openssh-clients libxslt make +Source0: https://download.gnome.org/sources/%{name}/48/%{name}-%{version}.tar.xz +# https://gitlab.gnome.org/GNOME/gnome-keyring/-/merge_requests/78 +# https://gitlab.gnome.org/GNOME/gnome-keyring/-/issues/165 +# Ensure the login collection is registered after unlocking +Patch: 78.patch +# https://gitlab.gnome.org/GNOME/gnome-keyring/-/merge_requests/96 +# build: Add gkm_marshal header to libgkm sources +Patch: gnome-keyring-48.0-gkm_marshal-header.patch + +BuildRequires: gcc +BuildRequires: meson >= 1.0 +BuildRequires: pkgconfig(gck-1) >= 3.3.4 +BuildRequires: pkgconfig(gcr-base-3) >= %{gcr_version} +BuildRequires: pkgconfig(gio-2.0) >= %{glib2_version} +BuildRequires: pkgconfig(gio-unix-2.0) >= %{glib2_version} +BuildRequires: pkgconfig(gmodule-no-export-2.0) >= %{glib2_version} +BuildRequires: pkgconfig(gobject-2.0) >= %{glib2_version} +BuildRequires: pkgconfig(libcap-ng) +BuildRequires: pkgconfig(libgcrypt) >= %{gcrypt_version} +BuildRequires: pkgconfig(libselinux) +BuildRequires: pkgconfig(libsystemd) BuildRequires: pkgconfig(p11-kit-1) -BuildRequires: pkgconfig(gcr-3) >= %{gcr_version} -BuildRequires: pkgconfig(glib-2.0) >= %{glib2_version} -BuildRequires: libgcrypt-devel >= %{gcrypt_version} - -Requires: openssh gcr +BuildRequires: pam-devel +BuildRequires: docbook-dtds +BuildRequires: docbook-style-xsl +BuildRequires: /usr/bin/ssh-add +BuildRequires: /usr/bin/ssh-agent +BuildRequires: /usr/bin/xsltproc +Requires: /usr/bin/ssh-add +Requires: /usr/bin/ssh-agent +Requires: gcr %description The program can manage several keyrings, each with its own master @@ -26,8 +47,9 @@ disk, but forgotten when the session ends. %package pam Summary: Pam module for unlocking keyrings -License: LGPLv2+ -Requires: %{name}%{?_isa} = %{version}-%{release} pam%{?_isa} +License: LGPL-2.1-or-later +Requires: %{name}%{?_isa} = %{version}-%{release} +Requires: pam%{?_isa} %description pam The gnome-keyring-pam package contains a pam module that can @@ -39,17 +61,12 @@ automatically unlock the "login" keyring when the user logs in. %autosetup -p1 %build -%configure \ - --with-pam-dir=%{_libdir}/security \ - --enable-pam \ - --without-libcap-ng -sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0 /g' libtool -%make_build +%meson +%meson_build %install -%make_install +%meson_install %find_lang gnome-keyring -%delete_la_and_a %files -f gnome-keyring.lang %license COPYING COPYING.LIB @@ -62,18 +79,21 @@ sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0 /g' libtool %{_datadir}/p11-kit/modules/gnome-keyring.module %{_datadir}/xdg-desktop-portal/portals/gnome-keyring.portal %{_sysconfdir}/xdg/autostart/* -%{_prefix}/lib/systemd/user/* +%{_userunitdir}/* %files pam %{_libdir}/security/*.so %files help -%doc AUTHORS NEWS README +%doc NEWS README %{_mandir}/man1/gnome-keyring.1* %{_mandir}/man1/gnome-keyring-3.1* %{_mandir}/man1/gnome-keyring-daemon.1* %changelog +* Wed Aug 13 2025 Funda Wang - 48.0-1 +- update to 48.0 + * Wed Feb 26 2025 happyworker <208suo@208suo.com> - 42.1-2 - Fix package install script compile error