[gnome-initial-setup/keyring] Make this work



commit ed80c400d15500df30bdfad192b181ffd9b79610
Author: Matthias Clasen <mclasen redhat com>
Date:   Tue Mar 4 15:56:47 2014 -0500

    Make this work

 gnome-initial-setup/gis-keyring.c |   39 +++++++++++++++++++++++++++---------
 1 files changed, 29 insertions(+), 10 deletions(-)
---
diff --git a/gnome-initial-setup/gis-keyring.c b/gnome-initial-setup/gis-keyring.c
index b875e7b..b5cda9c 100644
--- a/gnome-initial-setup/gis-keyring.c
+++ b/gnome-initial-setup/gis-keyring.c
@@ -41,36 +41,55 @@ void
 gis_ensure_login_keyring (const gchar *pwd)
 {
        GSubprocess *subprocess = NULL;
+       GSubprocessLauncher *launcher = NULL;
        GError *error = NULL;
+       gchar *output = NULL;
+       gchar **env = NULL;
 
-       subprocess = g_subprocess_new (G_SUBPROCESS_FLAGS_STDIN_PIPE | G_SUBPROCESS_FLAGS_STDOUT_SILENCE,
-                                      &error,
-                                      "gnome-keyring-daemon", NULL);
+       g_debug ("launching gnome-keyring-daemon --login");
+       launcher = g_subprocess_launcher_new (G_SUBPROCESS_FLAGS_STDIN_PIPE | G_SUBPROCESS_FLAGS_STDOUT_PIPE 
| G_SUBPROCESS_FLAGS_STDERR_SILENCE);
+       subprocess = g_subprocess_launcher_spawn (launcher, &error, "gnome-keyring-daemon", "--login", NULL);
        if (subprocess == NULL) {
-               g_warning ("failed to spawn gnome-keyring-daemon: %s", error->message);
+               g_warning ("Failed to spawn gnome-keyring-daemon --login: %s", error->message);
                g_error_free (error);
                goto out;
        }
 
-       if (!g_subprocess_communicate_utf8 (subprocess, pwd, NULL, NULL, NULL, &error)) {
-               g_warning ("failed to send keyring password to gnome-keyring-daemon: %s", error->message);
+       if (!g_subprocess_communicate_utf8 (subprocess, "gis", NULL, &output, NULL, &error)) {
+               g_warning ("Failed to communicate with gnome-keyring-daemon: %s", error->message);
                g_error_free (error);
                goto out;
        }
 
+       g_debug ("Read from keyring: %s\n", output);
+
+       env = g_strsplit (output, "\n", 0);     
+
+       g_object_unref (launcher);
        g_object_unref (subprocess);
-       subprocess = g_subprocess_new (G_SUBPROCESS_FLAGS_STDIN_INHERIT | G_SUBPROCESS_FLAGS_STDOUT_SILENCE,
-                                      &error,
-                                      "gnome-keyring-daemon", "--start", NULL);
+
+       launcher = g_subprocess_launcher_new (G_SUBPROCESS_FLAGS_STDIN_INHERIT | 
G_SUBPROCESS_FLAGS_STDOUT_SILENCE);
+
+       g_subprocess_launcher_set_environ (launcher, env);
+
+       g_debug ("launching gnome-keyring-daemon --start");
+       subprocess = g_subprocess_launcher_spawn (launcher, &error, "gnome-keyring-daemon", "--start", NULL);
+
        if (subprocess == NULL) {
-               g_warning ("failed to spawn gnome-keyring-daemon --start: %s", error->message);
+               g_warning ("Failed to spawn gnome-keyring-daemon --start: %s", error->message);
                g_error_free (error);
                goto out;
        }
 
 out:
+       if (env)
+               g_strfreev (env);
+       if (output)
+               g_free (output);
        if (subprocess)
                g_object_unref (subprocess);
+       if (launcher)
+               g_object_unref (launcher);
 }
 
 void


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]