[gnome-initial-setup] summary: Don't copy files to the tmpfs



commit 4e122e6b3f03f68d7232b4bb6d36b1d51f7a252b
Author: Jasper St. Pierre <jstpierre mecheye net>
Date:   Thu Nov 8 16:29:06 2012 -0500

    summary: Don't copy files to the tmpfs
    
    We're guaranteed a static homedir in a tmpfs where we'll copy the
    files from.

 .../gnome-initial-setup-copy-worker.c              |   22 +++++--
 .../pages/summary/gis-summary-page.c               |   71 --------------------
 2 files changed, 17 insertions(+), 76 deletions(-)
---
diff --git a/gnome-initial-setup/gnome-initial-setup-copy-worker.c b/gnome-initial-setup/gnome-initial-setup-copy-worker.c
index 9c03991..983a673 100644
--- a/gnome-initial-setup/gnome-initial-setup-copy-worker.c
+++ b/gnome-initial-setup/gnome-initial-setup-copy-worker.c
@@ -3,15 +3,27 @@
 /* Copies settings installed from gnome-initial-setup and
  * sticks them in the user's profile */
 
+#include <pwd.h>
+#include <string.h>
 #include <gio/gio.h>
 #include <stdlib.h>
 
-#define SKELETON_PATH "gnome-initial-setup/skeleton"
-
 static char *
-get_skeleton_dir (void)
+get_gnome_initial_setup_home_dir (void)
 {
-  return g_build_filename (g_get_user_runtime_dir (), SKELETON_PATH, NULL);
+  struct passwd pw, *pwp;
+  char buf[4096];
+
+  setpwent();
+  while (TRUE) {
+    if (getpwent_r (&pw, buf, sizeof (buf), &pwp))
+      break;
+
+    if (strcmp (pwp->pw_name, "gnome-initial-setup") == 0)
+      return g_strdup (pwp->pw_dir);
+  }
+
+  g_error ("Could not find homedir for gnome-initial-setup");
 }
 
 static void
@@ -46,7 +58,7 @@ main (int    argc,
 
   g_type_init ();
 
-  src = g_file_new_for_path (get_skeleton_dir ());
+  src = g_file_new_for_path (get_gnome_initial_setup_home_dir ());
 
   if (!g_file_query_exists (src, NULL))
     exit (EXIT_SUCCESS);
diff --git a/gnome-initial-setup/pages/summary/gis-summary-page.c b/gnome-initial-setup/pages/summary/gis-summary-page.c
index eb969c9..d2dbe80 100644
--- a/gnome-initial-setup/pages/summary/gis-summary-page.c
+++ b/gnome-initial-setup/pages/summary/gis-summary-page.c
@@ -41,8 +41,6 @@
 
 #define SERVICE_NAME "gdm-password"
 
-#define SKELETON_PATH "/gnome-initial-setup/skeleton"
-
 typedef struct _SummaryData SummaryData;
 
 struct _SummaryData {
@@ -84,74 +82,6 @@ connect_to_gdm (GdmGreeter      **greeter,
   return res;
 }
 
-static gboolean
-pkinstall(const char *user, char *one, char *two, GError **error)
-{
-  char *argv[] = { "/usr/bin/pkexec",
-                   "install",
-                   "--owner", (char *) user,
-                   "--group", (char *) user,
-                   "--mode", "755",
-                   one, two, NULL };
-
-  return g_spawn_sync (NULL, argv, NULL, 0, NULL, NULL, NULL, NULL, NULL, error);
-}
-
-static void
-copy_file_to_tmpfs (const char *dest_base,
-                    const char *dir,
-                    const char *path,
-                    const char *user)
-{
-  char *src = g_build_filename (dir, path, NULL);
-  char *basename = g_path_get_basename (src);
-  char *dest = g_build_filename (dest_base, basename, NULL);
-  GError *error = NULL;
-
-  if (!pkinstall (user, src, dest, &error)) {
-    g_warning ("Unable to copy %s to %s: %s",
-               src, dest, error->message);
-    g_error_free (error);
-  }
-
-  g_free (src);
-  g_free (basename);
-  g_free (dest);
-}
-
-static char *
-get_skeleton_dir (SummaryData *data)
-{
-  uid_t uid = act_user_get_uid (data->user_account);
-  return g_strdup_printf ("/run/user/%d" SKELETON_PATH, uid);
-}
-
-static void
-copy_files_to_tmpfs (SummaryData *data)
-{
-  const char *user = act_user_get_user_name (data->user_account);
-  char *dest = get_skeleton_dir (data);
-  GError *error = NULL;
-
-  if (!pkinstall (user, "--directory", dest, &error)) {
-    g_warning ("Unable to make directory %s: %s",
-               dest, error->message);
-    goto out;
-  }
-
-#define FILE(d, x)                                                      \
-  copy_file_to_tmpfs (dest, g_get_user_##d##_dir (), x, user);          \
-
-  FILE (config, "run-welcome-tour");
-  FILE (config, "dconf/user");
-  FILE (config, "goa-1.0/accounts.conf");
-  FILE (data, "keyrings/Default.keyring");
-
- out:
-  g_free (dest);
-  g_clear_error (&error);
-}
-
 static void
 request_info_query (SummaryData     *data,
                     GdmUserVerifier *user_verifier,
@@ -217,7 +147,6 @@ on_session_opened (GdmGreeter  *greeter,
                    const char  *service_name,
                    SummaryData *data)
 {
-  copy_files_to_tmpfs (data);
   gdm_greeter_call_start_session_when_ready_sync (greeter, service_name,
                                                   TRUE, NULL, NULL);
 }



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