Guest user home directory is cleaned up on logout 29/33929/1 accepted/tizen/3.0/ivi/20150120.232915 accepted/tizen/common/20150121.103243 accepted/tizen/mobile/20150122.012429 accepted/tizen/tv/20150121.113558 accepted/tizen/wearable/20150121.110816 submit/tizen/20150120.105625 submit/tizen_3.0_ivi/20150120.110236 tizen_3.0_ivi_release
authorImran Zaman <imran.zaman@intel.com>
Fri, 16 Jan 2015 15:21:53 +0000 (17:21 +0200)
committerImran Zaman <imran.zaman@intel.com>
Fri, 16 Jan 2015 15:22:20 +0000 (17:22 +0200)
Change-Id: I18e2d1e7117905b2e04b7644bbdbade339f2f3f5
Fixed Bug TC-2370
Signed-off-by: Imran Zaman <imran.zaman@intel.com>
src/daemon/tlm-manager.c
src/daemon/tlm-seat.c
src/sessiond/tlm-session.c
src/utils/tlm-launcher.c

index f2b2b6f52fc0c6e817713da4c3a8ba158c707703..2cbfdd54c3132a2318f8133d4865a0773d5e0f69 100644 (file)
@@ -447,7 +447,7 @@ tlm_manager_init (TlmManager *manager)
 }
 
 static void
-_prepare_user_cb (TlmSeat *seat, const gchar *user_name, gpointer user_data)
+_prepare_user_login_cb (TlmSeat *seat, const gchar *user_name, gpointer user_data)
 {
     TlmManager *manager = TLM_MANAGER(user_data);
 
@@ -457,13 +457,31 @@ _prepare_user_cb (TlmSeat *seat, const gchar *user_name, gpointer user_data)
                                 TLM_CONFIG_GENERAL,
                                 TLM_CONFIG_GENERAL_PREPARE_DEFAULT,
                                 FALSE)) {
-        DBG ("prepare for '%s'", user_name);
+        DBG ("prepare for login for '%s'", user_name);
         if (!tlm_manager_setup_guest_user (manager, user_name)) {
             WARN ("failed to prepare for '%s'", user_name);
         }
     }
 }
 
+static void
+_prepare_user_logout_cb (TlmSeat *seat, const gchar *user_name, gpointer user_data)
+{
+    TlmManager *manager = TLM_MANAGER(user_data);
+
+    g_return_if_fail (user_data && TLM_IS_MANAGER(manager));
+
+    if (tlm_config_get_boolean (manager->priv->config,
+                                TLM_CONFIG_GENERAL,
+                                TLM_CONFIG_GENERAL_PREPARE_DEFAULT,
+                                FALSE)) {
+        DBG ("prepare for logout for '%s'", user_name);
+        if (!tlm_account_plugin_cleanup_guest_user (
+                manager->priv->account_plugin, user_name, FALSE)) {
+            WARN ("failed to prepare for '%s'", user_name);
+        }
+    }
+}
 
 static void
 _create_seat (TlmManager *manager,
@@ -477,8 +495,12 @@ _create_seat (TlmManager *manager,
                                   seat_id,
                                   seat_path);
     g_signal_connect (seat,
-                      "prepare-user",
-                      G_CALLBACK (_prepare_user_cb),
+                      "prepare-user-login",
+                      G_CALLBACK (_prepare_user_login_cb),
+                      manager);
+    g_signal_connect (seat,
+                      "prepare-user-logout",
+                      G_CALLBACK (_prepare_user_logout_cb),
                       manager);
     g_hash_table_insert (priv->seats, g_strdup (seat_id), seat);
     g_signal_emit (manager, signals[SIG_SEAT_ADDED], 0, seat, NULL);
index 9d4e805c18a3d554960760fb840150530bd16539..d461e3580b912399fd31af368db89d618a00f1c7 100644 (file)
@@ -54,7 +54,8 @@ enum {
 static GParamSpec *pspecs[N_PROPERTIES];
 
 enum {
-    SIG_PREPARE_USER,
+    SIG_PREPARE_USER_LOGIN,
+    SIG_PREPARE_USER_LOGOUT,
     SIG_SESSION_CREATED,
     SIG_SESSION_TERMINATED,
     SIG_SESSION_ERROR,
@@ -66,6 +67,7 @@ struct _TlmSeatPrivate
 {
     TlmConfig *config;
     gchar *id;
+    gchar *default_user;
     gchar *path;
     gchar *next_service;
     gchar *next_user;
@@ -73,6 +75,7 @@ struct _TlmSeatPrivate
     GHashTable *next_environment;
     gint64 prev_time;
     gint32 prev_count;
+    gboolean default_active;
     TlmSessionRemote *session;
     TlmDbusObserver *dbus_observer; /* dbus server accessed only by user who has
     active session */
@@ -281,6 +284,7 @@ tlm_seat_finalize (GObject *self)
     TlmSeatPrivate *priv = TLM_SEAT_PRIV(seat);
 
     g_clear_string (&priv->id);
+    g_clear_string (&priv->default_user);
     g_clear_string (&priv->path);
 
     _reset_next (priv);
@@ -371,7 +375,17 @@ tlm_seat_class_init (TlmSeatClass *klass)
                              G_PARAM_STATIC_STRINGS);
     g_object_class_install_properties (g_klass, N_PROPERTIES, pspecs);
 
-    signals[SIG_PREPARE_USER] = g_signal_new ("prepare-user",
+    signals[SIG_PREPARE_USER_LOGIN] = g_signal_new ("prepare-user-login",
+                                              TLM_TYPE_SEAT,
+                                              G_SIGNAL_RUN_LAST,
+                                              0,
+                                              NULL,
+                                              NULL,
+                                              NULL,
+                                              G_TYPE_NONE,
+                                              1,
+                                              G_TYPE_STRING);
+    signals[SIG_PREPARE_USER_LOGOUT] = g_signal_new ("prepare-user-logout",
                                               TLM_TYPE_SEAT,
                                               G_SIGNAL_RUN_LAST,
                                               0,
@@ -418,8 +432,9 @@ tlm_seat_init (TlmSeat *seat)
 {
     TlmSeatPrivate *priv = TLM_SEAT_PRIV (seat);
     
-    priv->id = priv->path = NULL;
+    priv->id = priv->path = priv->default_user = NULL;
     priv->dbus_observer = priv->prev_dbus_observer = NULL;
+    priv->default_active = FALSE;
     seat->priv = priv;
 }
 
@@ -556,8 +571,6 @@ tlm_seat_create_session (TlmSeat *seat,
         priv->prev_count = 1;
     }
 
-    gchar *default_user = NULL;
-
     if (!service) {
         DBG ("PAM service not defined, looking up configuration");
         service = tlm_config_get_string (priv->config,
@@ -573,28 +586,33 @@ tlm_seat_create_session (TlmSeat *seat,
     DBG ("using PAM service %s for seat %s", service, priv->id);
 
     if (!username) {
-        const gchar *name_tmpl =
-            tlm_config_get_string_default (priv->config,
-                                           priv->id,
-                                           TLM_CONFIG_GENERAL_DEFAULT_USER,
-                                           "guest");
-        if (!name_tmpl)
-            name_tmpl = tlm_config_get_string_default (priv->config,
-                                                       TLM_CONFIG_GENERAL,
-                                                       TLM_CONFIG_GENERAL_DEFAULT_USER,
-                                                       "guest");
-        if (name_tmpl) default_user = _build_user_name (name_tmpl, priv->id);
-        if (default_user)
+        if (!priv->default_user) {
+            const gchar *name_tmpl =
+                    tlm_config_get_string_default (priv->config,
+                            priv->id,
+                            TLM_CONFIG_GENERAL_DEFAULT_USER,
+                            "guest");
+            if (!name_tmpl)
+                name_tmpl = tlm_config_get_string_default (priv->config,
+                        TLM_CONFIG_GENERAL,
+                        TLM_CONFIG_GENERAL_DEFAULT_USER,
+                        "guest");
+            if (name_tmpl)
+                priv->default_user = _build_user_name (name_tmpl, priv->id);
+        }
+        if (priv->default_user) {
+            priv->default_active = TRUE;
             g_signal_emit (seat,
-                           signals[SIG_PREPARE_USER],
+                           signals[SIG_PREPARE_USER_LOGIN],
                            0,
-                           default_user);
+                           priv->default_user);
+        }
     }
 
     priv->session = tlm_session_remote_new (priv->config,
             priv->id,
             service,
-            default_user ? default_user : username);
+            priv->default_active ? priv->default_user : username);
     if (!priv->session) {
         g_signal_emit (seat, signals[SIG_SESSION_ERROR], 0,
                 TLM_ERROR_SESSION_CREATION_FAILURE);
@@ -605,7 +623,8 @@ tlm_seat_create_session (TlmSeat *seat,
      *is created */
     seat->priv->prev_dbus_observer = seat->priv->dbus_observer;
     seat->priv->dbus_observer = NULL;
-    if (!_create_dbus_observer (seat, default_user ? default_user : username)) {
+    if (!_create_dbus_observer (seat,
+            priv->default_active ? priv->default_user : username)) {
         g_object_unref (priv->session);
         g_signal_emit (seat, signals[SIG_SESSION_ERROR],  0,
                 TLM_ERROR_DBUS_SERVER_START_FAILURE);
@@ -623,6 +642,14 @@ tlm_seat_terminate_session (TlmSeat *seat)
     g_return_val_if_fail (seat && TLM_IS_SEAT(seat), FALSE);
     g_return_val_if_fail (seat->priv, FALSE);
 
+    if (seat->priv->default_active) {
+        seat->priv->default_active = FALSE;
+        g_signal_emit (seat,
+                signals[SIG_PREPARE_USER_LOGOUT],
+                0,
+                seat->priv->default_user);
+    }
+
     if (!seat->priv->session ||
         !tlm_session_remote_terminate (seat->priv->session)) {
         WARN ("No active session to terminate");
index f252f9a415b3509fc7a0d316850e7211cbce80e1..fe566216117b677aadbf7f5354a4b8f24e21ffc8 100644 (file)
@@ -33,7 +33,6 @@
 #include <grp.h>
 #include <stdio.h>
 #include <signal.h>
-#include <errno.h>
 #include <termios.h>
 #include <libintl.h>
 #include <sys/types.h>
index 53495f0eb25bdd59ea807296705917f777c4b417..3649b7d8bf98592be9fe1dc1d3f40d9f82a87056 100644 (file)
@@ -25,7 +25,7 @@
 
 #include "config.h"
 
-#include <error.h>
+#include <unistd.h>
 #include <errno.h>
 #include <getopt.h>
 #include <stdio.h>
@@ -42,7 +42,6 @@ static void launch_from_file(const char *file) {
   GList *commands = NULL, *tmp_list = NULL;
   GList *argv_list = NULL;
   gchar **argv = NULL;
-  gchar *command = NULL;
 
   if (!(fp = fopen(file, "r"))) {
     ERR("Failed to open file '%s':%s", file, strerror(errno));
@@ -55,7 +54,7 @@ static void launch_from_file(const char *file) {
     if (!strlen(cmd) || cmd[0] == '#') /* comment */
       continue;
 
-    INFO("COMMAND: %s(%ld)\n", cmd, strlen(cmd));
+    INFO("COMMAND: %s(%u)\n", cmd, strlen(cmd));
     commands = g_list_append(commands, g_strdup(cmd));
   }
 
@@ -131,8 +130,6 @@ int main(int argc, char *argv[]) {
   int i, c;
   char *file = NULL;
 
-  pid_t child_pid = 0;
-
   tlm_log_init("tlm-launch");
 
   while ((c = getopt_long(argc, argv, "f:h", opts, &i)) != -1) {