From 472fc1c3b7f2528c2c5d5d4b82a785cb03c3b6b4 Mon Sep 17 00:00:00 2001 From: raveit65 Date: Oct 06 2019 14:55:16 +0000 Subject: fix problems with gnome-keyring-3.34 --- diff --git a/mate-session-manager.spec b/mate-session-manager.spec index 18dd0d2..5c84e05 100644 --- a/mate-session-manager.spec +++ b/mate-session-manager.spec @@ -17,7 +17,7 @@ Summary: MATE Desktop session manager License: GPLv2+ Version: %{branch}.2 %if 0%{?rel_build} -Release: 1%{?dist} +Release: 2%{?dist} %else Release: 0.13%{?git_rel}%{?dist} %endif @@ -29,6 +29,10 @@ URL: http://mate-desktop.org # Source for snapshot-builds. %{!?rel_build:Source0: http://git.mate-desktop.org/%{name}/snapshot/%{name}-%{commit}.tar.xz#/%{git_tar}} +# https://github.com/mate-desktop/mate-session-manager/pull/223 +Patch1: mate-session-manager_0001-Remove-GNOME_KEYRING_LIFETIME_FD.patch +Patch2: mate-session-manager_0002-Fix-timeout-with-gnome-keyring-3.34.patch + BuildRequires: dbus-glib-devel BuildRequires: desktop-file-utils BuildRequires: gtk3-devel @@ -114,6 +118,10 @@ desktop-file-install \ %changelog +* Sun Oct 06 2019 Wolfgang Ulbrich - 1.22.2-2 +- fix problems with gnome-keyring-3.34 +- use https://github.com/mate-desktop/mate-session-manager/pull/223 + * Sun Sep 22 2019 Wolfgang Ulbrich - 1.22.2-1 - update to 1.22.2 diff --git a/mate-session-manager_0001-Remove-GNOME_KEYRING_LIFETIME_FD.patch b/mate-session-manager_0001-Remove-GNOME_KEYRING_LIFETIME_FD.patch new file mode 100644 index 0000000..424dc75 --- /dev/null +++ b/mate-session-manager_0001-Remove-GNOME_KEYRING_LIFETIME_FD.patch @@ -0,0 +1,78 @@ +From 8bcc7153e0ef5aeb5fb276350c7015579f6e432a Mon Sep 17 00:00:00 2001 +From: Jindrich Makovicka +Date: Sun, 6 Oct 2019 10:35:46 +0200 +Subject: [PATCH 1/2] Remove GNOME_KEYRING_LIFETIME_FD + +Keyring lifetime fd was removed from gnome-keyring in 2009 + +See "[daemon] Use new control protocol for daemon." +--- + mate-session/msm-gnome.c | 35 ++--------------------------------- + 1 file changed, 2 insertions(+), 33 deletions(-) + +diff --git a/mate-session/msm-gnome.c b/mate-session/msm-gnome.c +index 5e9cf02..97e08b8 100644 +--- a/mate-session/msm-gnome.c ++++ b/mate-session/msm-gnome.c +@@ -48,29 +48,9 @@ + + + static gboolean gnome_compat_started = FALSE; +-static int keyring_lifetime_pipe[2]; + static pid_t gnome_keyring_daemon_pid = 0; + static Window gnome_smproxy_window = None; + +-static void +-child_setup (gpointer user_data) +-{ +- gint open_max; +- gint fd; +- char *fd_str; +- +- open_max = sysconf (_SC_OPEN_MAX); +- for (fd = 3; fd < open_max; fd++) +- { +- if (fd != keyring_lifetime_pipe[0]) +- fcntl (fd, F_SETFD, FD_CLOEXEC); +- } +- +- fd_str = g_strdup_printf ("%d", keyring_lifetime_pipe[0]); +- g_setenv ("GNOME_KEYRING_LIFETIME_FD", fd_str, TRUE); +- g_free (fd_str); +-} +- + + static void + gnome_keyring_daemon_startup (void) +@@ -87,26 +67,15 @@ gnome_keyring_daemon_startup (void) + gchar *name; + const gchar *value; + +- /* Pipe to slave keyring lifetime to */ +- if (pipe (keyring_lifetime_pipe)) +- { +- g_warning ("Failed to set up pipe for gnome-keyring: %s", strerror (errno)); +- return; +- } +- + error = NULL; + argv[0] = GNOME_KEYRING_DAEMON; + argv[1] = "--start"; + argv[2] = NULL; + g_spawn_sync (NULL, argv, NULL, +- G_SPAWN_SEARCH_PATH | G_SPAWN_LEAVE_DESCRIPTORS_OPEN, +- child_setup, NULL, ++ G_SPAWN_SEARCH_PATH, ++ NULL, NULL, + &sout, NULL, &status, &error); + +- close (keyring_lifetime_pipe[0]); +- /* We leave keyring_lifetime_pipe[1] open for the lifetime of the session, +- in order to slave the keyring daemon lifecycle to the session. */ +- + if (error != NULL) + { + g_printerr ("Failed to run gnome-keyring-daemon: %s\n", +-- +2.23.0 + diff --git a/mate-session-manager_0002-Fix-timeout-with-gnome-keyring-3.34.patch b/mate-session-manager_0002-Fix-timeout-with-gnome-keyring-3.34.patch new file mode 100644 index 0000000..246b569 --- /dev/null +++ b/mate-session-manager_0002-Fix-timeout-with-gnome-keyring-3.34.patch @@ -0,0 +1,139 @@ +From 023f6f7b69b2a9c0399d7737d7729d464f9671e5 Mon Sep 17 00:00:00 2001 +From: Jindrich Makovicka +Date: Sun, 6 Oct 2019 10:38:05 +0200 +Subject: [PATCH 2/2] Fix timeout with gnome-keyring 3.34 + +Launch gnome-keyring-daemon asynchronously, and remove the +GNOME_KEYRING_PID reading code. + +GNOME_KEYRING_PID exposure was removed from gnome-keyring in 2014. +--- + mate-session/msm-gnome.c | 85 ++++++++++------------------------------ + 1 file changed, 20 insertions(+), 65 deletions(-) + +diff --git a/mate-session/msm-gnome.c b/mate-session/msm-gnome.c +index 97e08b8..b43f1ad 100644 +--- a/mate-session/msm-gnome.c ++++ b/mate-session/msm-gnome.c +@@ -48,88 +48,46 @@ + + + static gboolean gnome_compat_started = FALSE; +-static pid_t gnome_keyring_daemon_pid = 0; + static Window gnome_smproxy_window = None; + ++static void ++gnome_keyring_daemon_finished (GPid pid, ++ gint status, ++ gpointer user_data) ++{ ++ if (WEXITSTATUS (status) != 0) ++ { ++ /* daemon failed for some reason */ ++ g_printerr ("gnome-keyring-daemon failed to start correctly, " ++ "exit code: %d\n", WEXITSTATUS (status)); ++ } ++} + + static void + gnome_keyring_daemon_startup (void) + { + GError *error = NULL; +- gchar *sout; +- gchar **lines; +- gsize lineno; +- gint status; +- glong pid; +- gchar *end; ++ GPid pid; + gchar *argv[3]; +- gchar *p; +- gchar *name; +- const gchar *value; + + error = NULL; + argv[0] = GNOME_KEYRING_DAEMON; + argv[1] = "--start"; + argv[2] = NULL; +- g_spawn_sync (NULL, argv, NULL, +- G_SPAWN_SEARCH_PATH, +- NULL, NULL, +- &sout, NULL, &status, &error); ++ g_spawn_async (NULL, argv, NULL, ++ G_SPAWN_SEARCH_PATH | G_SPAWN_DO_NOT_REAP_CHILD, ++ NULL, NULL, &pid, ++ &error); + + if (error != NULL) + { +- g_printerr ("Failed to run gnome-keyring-daemon: %s\n", ++ g_printerr ("Failed to spawn gnome-keyring-daemon: %s\n", + error->message); + g_error_free (error); ++ return; + } +- else +- { +- if (WIFEXITED (status) && WEXITSTATUS (status) == 0 && sout != NULL) +- { +- lines = g_strsplit (sout, "\n", 0); +- +- for (lineno = 0; lines[lineno] != NULL; lineno++) +- { +- p = strchr (lines[lineno], '='); +- if (p == NULL) +- continue; +- +- name = g_strndup (lines[lineno], p - lines[lineno]); +- value = p + 1; +- +- g_setenv (name, value, TRUE); +- +- if (g_strcmp0 (name, "GNOME_KEYRING_PID") == 0) +- { +- pid = strtol (value, &end, 10); +- if (end != value) +- gnome_keyring_daemon_pid = pid; +- } +- +- g_free (name); +- } +- +- g_strfreev (lines); +- } +- else +- { +- /* daemon failed for some reason */ +- g_printerr ("gnome-keyring-daemon failed to start correctly, " +- "exit code: %d\n", WEXITSTATUS (status)); +- } +- +- g_free (sout); +- } +-} + +-static void +-gnome_keyring_daemon_shutdown (void) +-{ +- if (gnome_keyring_daemon_pid != 0) +- { +- kill (gnome_keyring_daemon_pid, SIGTERM); +- gnome_keyring_daemon_pid = 0; +- } ++ g_child_watch_add (pid, gnome_keyring_daemon_finished, NULL); + } + + +@@ -232,9 +190,6 @@ msm_gnome_stop (void) + + g_debug ("MsmGnome: stopping"); + +- /* shutdown the keyring daemon */ +- gnome_keyring_daemon_shutdown (); +- + msm_compat_gnome_smproxy_shutdown (); + + gnome_compat_started = FALSE; +-- +2.23.0 +