summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin H. Johnson <robbat2@gentoo.org>2015-08-08 13:49:04 -0700
committerRobin H. Johnson <robbat2@gentoo.org>2015-08-08 17:38:18 -0700
commit56bd759df1d0c750a065b8c845e93d5dfa6b549d (patch)
tree3f91093cdb475e565ae857f1c5a7fd339e2d781e /mate-base/mate-session-manager/files/mate-session-manager-1.6-gnome-keyring.patch
downloadgentoo-56bd759df1d0c750a065b8c845e93d5dfa6b549d.tar.gz
gentoo-56bd759df1d0c750a065b8c845e93d5dfa6b549d.tar.bz2
gentoo-56bd759df1d0c750a065b8c845e93d5dfa6b549d.zip
proj/gentoo: Initial commit
This commit represents a new era for Gentoo: Storing the gentoo-x86 tree in Git, as converted from CVS. This commit is the start of the NEW history. Any historical data is intended to be grafted onto this point. Creation process: 1. Take final CVS checkout snapshot 2. Remove ALL ChangeLog* files 3. Transform all Manifests to thin 4. Remove empty Manifests 5. Convert all stale $Header$/$Id$ CVS keywords to non-expanded Git $Id$ 5.1. Do not touch files with -kb/-ko keyword flags. Signed-off-by: Robin H. Johnson <robbat2@gentoo.org> X-Thanks: Alec Warner <antarus@gentoo.org> - did the GSoC 2006 migration tests X-Thanks: Robin H. Johnson <robbat2@gentoo.org> - infra guy, herding this project X-Thanks: Nguyen Thai Ngoc Duy <pclouds@gentoo.org> - Former Gentoo developer, wrote Git features for the migration X-Thanks: Brian Harring <ferringb@gentoo.org> - wrote much python to improve cvs2svn X-Thanks: Rich Freeman <rich0@gentoo.org> - validation scripts X-Thanks: Patrick Lauer <patrick@gentoo.org> - Gentoo dev, running new 2014 work in migration X-Thanks: Michał Górny <mgorny@gentoo.org> - scripts, QA, nagging X-Thanks: All of other Gentoo developers - many ideas and lots of paint on the bikeshed
Diffstat (limited to 'mate-base/mate-session-manager/files/mate-session-manager-1.6-gnome-keyring.patch')
-rw-r--r--mate-base/mate-session-manager/files/mate-session-manager-1.6-gnome-keyring.patch328
1 files changed, 328 insertions, 0 deletions
diff --git a/mate-base/mate-session-manager/files/mate-session-manager-1.6-gnome-keyring.patch b/mate-base/mate-session-manager/files/mate-session-manager-1.6-gnome-keyring.patch
new file mode 100644
index 000000000000..28bb80e0347d
--- /dev/null
+++ b/mate-base/mate-session-manager/files/mate-session-manager-1.6-gnome-keyring.patch
@@ -0,0 +1,328 @@
+diff --git a/mate-session/Makefile.am b/mate-session/Makefile.am
+index f37a0e2..2c73d63 100644
+--- a/mate-session/Makefile.am
++++ b/mate-session/Makefile.am
+@@ -42,6 +42,8 @@ mate_session_SOURCES = \
+ mdm-signal-handler.c \
+ mdm-log.h \
+ mdm-log.c \
++ msm-gnome.c \
++ msm-gnome.h \
+ main.c \
+ gsm-store.h \
+ gsm-store.c \
+diff --git a/mate-session/main.c b/mate-session/main.c
+index 6cfbbe6..f6bee9a 100644
+--- a/mate-session/main.c
++++ b/mate-session/main.c
+@@ -51,6 +51,8 @@
+ #include "gsm-xsmp-server.h"
+ #include "gsm-store.h"
+
++#include "msm-gnome.h"
++
+ #define GSM_SCHEMA "org.mate.session"
+ #define GSM_DEFAULT_SESSION_KEY "default-session"
+ #define GSM_REQUIRED_COMPONENTS_SCHEMA GSM_SCHEMA ".required-components"
+@@ -542,6 +544,9 @@ int main(int argc, char** argv)
+ */
+ acquire_name();
+
++ /* Starts gnome compat mode */
++ msm_compat_gnome_startup ();
++
+ manager = gsm_manager_new(client_store, failsafe);
+
+ signal_handler = mdm_signal_handler_new();
+@@ -583,6 +588,7 @@ int main(int argc, char** argv)
+ g_object_unref(client_store);
+ }
+
++ msm_compat_gnome_shutdown();
+ mdm_log_shutdown();
+
+ return 0;
+diff --git a/mate-session/msm-gnome.c b/mate-session/msm-gnome.c
+new file mode 100644
+index 0000000..5c7d8dc
+--- /dev/null
++++ b/mate-session/msm-gnome.c
+@@ -0,0 +1,242 @@
++/*
++ * Copyright (c) 2004-2005 Benedikt Meurer <benny@xfce.org>
++ * 2013 Stefano Karapetsas <stefano@karapetsas.com>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2, or (at your option)
++ * any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
++ * MA 02110-1301 USA.
++ *
++ * Most parts of this file where taken from xfce4-session and
++ * gnome-session.
++ */
++
++#include "config.h"
++
++#include <sys/types.h>
++#include <sys/wait.h>
++#include <signal.h>
++#include <stdlib.h>
++#include <string.h>
++#include <unistd.h>
++#include <fcntl.h>
++#include <errno.h>
++
++#include <X11/Xatom.h>
++#include <X11/Xlib.h>
++
++#include <gdk/gdkx.h>
++
++#include "msm-gnome.h"
++
++#define GNOME_KEYRING_DAEMON "gnome-keyring-daemon"
++
++
++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)
++{
++ GError *error = NULL;
++ gchar *sout;
++ gchar **lines;
++ gsize lineno;
++ gint status;
++ glong pid;
++ gchar *end;
++ gchar *argv[3];
++ gchar *p;
++ 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,
++ &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",
++ error->message);
++ g_error_free (error);
++ }
++ 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;
++ }
++}
++
++
++
++static void
++msm_compat_gnome_smproxy_startup (void)
++{
++ Atom gnome_sm_proxy;
++ Display *dpy;
++ Window root;
++
++ gdk_error_trap_push ();
++
++ /* Set GNOME_SM_PROXY property, since some apps (like OOo) seem to require
++ * it to behave properly. Thanks to Jasper/Francois for reporting this.
++ * This has another advantage, since it prevents people from running
++ * gnome-smproxy in xfce4, which would cause trouble otherwise.
++ */
++ dpy = gdk_display;
++ root = RootWindow (dpy, 0);
++
++ if (gnome_smproxy_window != None)
++ XDestroyWindow (dpy, gnome_smproxy_window);
++
++ gnome_sm_proxy = XInternAtom (dpy, "GNOME_SM_PROXY", False);
++ gnome_smproxy_window = XCreateSimpleWindow (dpy, root, 1, 1, 1, 1, 0, 0, 0);
++
++ XChangeProperty (dpy, gnome_smproxy_window, gnome_sm_proxy,
++ XA_CARDINAL, 32, PropModeReplace,
++ (unsigned char *) (void *) &gnome_smproxy_window, 1);
++ XChangeProperty (dpy, root, gnome_sm_proxy,
++ XA_CARDINAL, 32, PropModeReplace,
++ (unsigned char *) (void *) &gnome_smproxy_window, 1);
++
++ XSync (dpy, False);
++
++ gdk_error_trap_pop ();
++}
++
++
++static void
++msm_compat_gnome_smproxy_shutdown (void)
++{
++ gdk_error_trap_push ();
++
++ if (gnome_smproxy_window != None)
++ {
++ XDestroyWindow (gdk_display, gnome_smproxy_window);
++ XSync (gdk_display, False);
++ gnome_smproxy_window = None;
++ }
++
++ gdk_error_trap_pop ();
++}
++
++
++void
++msm_compat_gnome_startup (void)
++{
++ if (G_UNLIKELY (gnome_compat_started))
++ return;
++
++ msm_compat_gnome_smproxy_startup ();
++
++ gnome_keyring_daemon_startup ();
++
++ gnome_compat_started = TRUE;
++}
++
++
++void
++msm_compat_gnome_shutdown (void)
++{
++ if (G_UNLIKELY (!gnome_compat_started))
++ return;
++
++ /* shutdown the keyring daemon */
++ gnome_keyring_daemon_shutdown ();
++
++ msm_compat_gnome_smproxy_shutdown ();
++
++ gnome_compat_started = FALSE;
++}
++
+diff --git a/mate-session/msm-gnome.h b/mate-session/msm-gnome.h
+new file mode 100644
+index 0000000..2f15909
+--- /dev/null
++++ b/mate-session/msm-gnome.h
+@@ -0,0 +1,30 @@
++/*
++ * Copyright (c) 2004 Benedikt Meurer <benny@xfce.org>
++ * 2013 Stefano Karapetsas <stefano@karapetsas.com>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2, or (at your option)
++ * any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
++ * MA 02110-1301 USA.
++ *
++ * Most parts of this file where taken from xfce4-session and
++ * gnome-session.
++ */
++
++#ifndef __MSM_GNOME_H__
++#define __MSM_GNOME_H__
++
++void msm_compat_gnome_startup (void);
++void msm_compat_gnome_shutdown (void);
++
++#endif /* !__MSM_GNOME_H__ */