diff options
author | Jérôme Guelfucci <jeromeg@xfce.org> | 2010-10-24 22:01:47 +0200 |
---|---|---|
committer | Jérôme Guelfucci <jeromeg@xfce.org> | 2010-10-24 22:01:47 +0200 |
commit | f32cd3e21c9d557cc8fab23b7c59baff36b16a9a (patch) | |
tree | cce6160d33a6a4568aac824021b822018123abe6 /xfce4-session/xfsm-compat-gnome.c | |
parent | d3eeda13da06c110e5d40601a9e7b12e7cb0913c (diff) | |
download | xfce4-session-f32cd3e21c9d557cc8fab23b7c59baff36b16a9a.tar.gz |
Add support for new gnome-keyring (Luca Niccoli).
This fixes bugs #5912, #5137 and #6073. Support for old gnome-keyring
versions is dropped with this commit.
Diffstat (limited to 'xfce4-session/xfsm-compat-gnome.c')
-rw-r--r-- | xfce4-session/xfsm-compat-gnome.c | 52 |
1 files changed, 22 insertions, 30 deletions
diff --git a/xfce4-session/xfsm-compat-gnome.c b/xfce4-session/xfsm-compat-gnome.c index 62f1452c..3ed79b35 100644 --- a/xfce4-session/xfsm-compat-gnome.c +++ b/xfce4-session/xfsm-compat-gnome.c @@ -104,27 +104,15 @@ child_setup (gpointer user_data) static void gnome_keyring_daemon_startup (void) { - const char *old_keyring; - GError *error = NULL; gchar *sout; gchar **lines; + gsize lineno; gint status; long pid; gchar *pid_str; gchar *end; - char *argv[2]; - - /* If there is already a working keyring, don't start a new daemon */ - old_keyring = g_getenv ("GNOME_KEYRING_SOCKET"); - if (old_keyring != NULL && access (old_keyring, R_OK | W_OK) == 0) - { -#ifdef HAVE_GNOME_KEYRING - gnome_keyring_daemon_prepare_environment_sync (); -#endif - return; - } - + char *argv[3]; /* Pipe to slave keyring lifetime to */ if (pipe (keyring_lifetime_pipe)) @@ -135,8 +123,10 @@ gnome_keyring_daemon_startup (void) error = NULL; argv[0] = GNOME_KEYRING_DAEMON; - argv[1] = NULL; - g_spawn_sync (NULL, argv, NULL, G_SPAWN_LEAVE_DESCRIPTORS_OPEN, + 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); @@ -154,20 +144,22 @@ gnome_keyring_daemon_startup (void) { if (WIFEXITED (status) && WEXITSTATUS (status) == 0 && sout != NULL) { - lines = g_strsplit (sout, "\n", 3); - - if (lines[0] != NULL && lines[1] != NULL - && g_str_has_prefix (lines[1], "GNOME_KEYRING_PID=")) - { - pid_str = lines[1] + strlen ("GNOME_KEYRING_PID="); - pid = strtol (pid_str, &end, 10); - - if (end != pid_str) - { - gnome_keyring_daemon_pid = pid; - xfce_putenv (lines[0]); - } - } + lines = g_strsplit (sout, "\n", 0); + + for (lineno = 0; lines[lineno] != NULL; lineno++) + { + xfce_putenv (lines[lineno]); + + if (g_str_has_prefix (lines[lineno], "GNOME_KEYRING_PID=")) + { + pid_str = lines[lineno] + strlen ("GNOME_KEYRING_PID="); + pid = strtol (pid_str, &end, 10); + if (end != pid_str) + { + gnome_keyring_daemon_pid = pid; + } + } + } g_strfreev (lines); |