summaryrefslogtreecommitdiff
path: root/src/seat.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/seat.c')
-rw-r--r--src/seat.c445
1 files changed, 144 insertions, 301 deletions
diff --git a/src/seat.c b/src/seat.c
index d320a68c..775ddbb5 100644
--- a/src/seat.c
+++ b/src/seat.c
@@ -65,7 +65,7 @@ struct SeatPrivate
/* TRUE if stopped */
gboolean stopped;
-
+
/* The greeter to be started to replace the current one */
GreeterSession *replacement_greeter;
};
@@ -100,14 +100,12 @@ free_seat_module (gpointer data)
void
seat_register_module (const gchar *name, GType type)
{
- SeatModule *module;
-
if (!seat_modules)
seat_modules = g_hash_table_new_full (g_str_hash, g_str_equal, free_seat_module, NULL);
g_debug ("Registered seat module %s", name);
- module = g_malloc0 (sizeof (SeatModule));
+ SeatModule *module = g_malloc0 (sizeof (SeatModule));
module->name = g_strdup (name);
module->type = type;
g_hash_table_insert (seat_modules, g_strdup (name), module);
@@ -116,10 +114,9 @@ seat_register_module (const gchar *name, GType type)
Seat *
seat_new (const gchar *module_name)
{
- SeatModule *m = NULL;
-
g_return_val_if_fail (module_name != NULL, NULL);
+ SeatModule *m = NULL;
if (seat_modules)
m = g_hash_table_lookup (seat_modules, module_name);
if (!m)
@@ -160,15 +157,13 @@ seat_get_string_list_property (Seat *seat, const gchar *name)
gboolean
seat_get_boolean_property (Seat *seat, const gchar *name)
{
- const gchar *value;
- gint i, length = 0;
-
- value = seat_get_string_property (seat, name);
+ const gchar *value = seat_get_string_property (seat, name);
if (!value)
return FALSE;
/* Count the number of non-whitespace characters */
- for (i = 0; value[i]; i++)
+ gint length = 0;
+ for (gint i = 0; value[i]; i++)
if (!g_ascii_isspace (value[i]))
length = i + 1;
@@ -178,9 +173,7 @@ seat_get_boolean_property (Seat *seat, const gchar *name)
gint
seat_get_integer_property (Seat *seat, const gchar *name)
{
- const gchar *value;
-
- value = seat_get_string_property (seat, name);
+ const gchar *value = seat_get_string_property (seat, name);
return value ? atoi (value) : 0;
}
@@ -234,14 +227,12 @@ set_greeter_idle (gpointer greeter)
void
seat_set_active_session (Seat *seat, Session *session)
{
- GList *link;
-
g_return_if_fail (seat != NULL);
SEAT_GET_CLASS (seat)->set_active_session (seat, session);
/* Stop any greeters */
- for (link = seat->priv->sessions; link; link = link->next)
+ for (GList *link = seat->priv->sessions; link; link = link->next)
{
Session *s = link->data;
@@ -329,9 +320,7 @@ seat_set_externally_activated_session (Seat *seat, Session *session)
Session *
seat_find_session_by_login1_id (Seat *seat, const gchar *login1_session_id)
{
- GList *session_link;
-
- for (session_link = seat->priv->sessions; session_link; session_link = session_link->next)
+ for (GList *session_link = seat->priv->sessions; session_link; session_link = session_link->next)
{
Session *session = session_link->data;
if (g_strcmp0 (login1_session_id, session_get_login1_session_id (session)) == 0)
@@ -358,10 +347,7 @@ seat_get_allow_guest (Seat *seat)
static gboolean
run_script (Seat *seat, DisplayServer *display_server, const gchar *script_name, User *user)
{
- g_autoptr(Process) script = NULL;
- gboolean result = FALSE;
-
- script = process_new (NULL, NULL);
+ g_autoptr(Process) script = process_new (NULL, NULL);
process_set_command (script, script_name);
@@ -391,11 +377,10 @@ run_script (Seat *seat, DisplayServer *display_server, const gchar *script_name,
SEAT_GET_CLASS (seat)->run_script (seat, display_server, script);
+ gboolean result = FALSE;
if (process_start (script, TRUE))
{
- int exit_status;
-
- exit_status = process_get_exit_status (script);
+ int exit_status = process_get_exit_status (script);
if (WIFEXITED (exit_status))
{
l_debug (seat, "Exit status of %s: %d", script_name, WEXITSTATUS (exit_status));
@@ -416,13 +401,12 @@ emit_upstart_signal (const gchar *signal)
{
g_return_if_fail (signal != NULL);
g_return_if_fail (signal[0] != 0);
- g_autoptr(GSubprocess) p = NULL;
if (getuid () != 0)
return;
/* OK if it fails, probably not installed or not running upstart */
- p = g_subprocess_new (G_SUBPROCESS_FLAGS_STDERR_SILENCE, NULL, "initctl", "-q", "emit", signal, "DISPLAY_MANAGER=lightdm", NULL);
+ g_autoptr(GSubprocess) p = g_subprocess_new (G_SUBPROCESS_FLAGS_STDERR_SILENCE, NULL, "initctl", "-q", "emit", signal, "DISPLAY_MANAGER=lightdm", NULL);
}
static void
@@ -442,14 +426,10 @@ check_stopped (Seat *seat)
static void
display_server_stopped_cb (DisplayServer *display_server, Seat *seat)
{
- const gchar *script;
- GList *list, *link;
- Session *active_session;
-
l_debug (seat, "Display server stopped");
/* Run a script right after stopping the display server */
- script = seat_get_string_property (seat, "display-stopped-script");
+ const gchar *script = seat_get_string_property (seat, "display-stopped-script");
if (script)
run_script (seat, NULL, script, NULL);
@@ -464,18 +444,17 @@ display_server_stopped_cb (DisplayServer *display_server, Seat *seat)
}
/* Stop all sessions on this display server */
- list = g_list_copy (seat->priv->sessions);
- for (link = list; link; link = link->next)
+ GList *list = g_list_copy (seat->priv->sessions);
+ for (GList *link = list; link; link = link->next)
g_object_ref (link->data);
- for (link = list; link; link = link->next)
+ for (GList *link = list; link; link = link->next)
{
Session *session = link->data;
- gboolean is_failed_greeter;
if (session_get_display_server (session) != display_server || session_get_is_stopping (session))
continue;
-
- is_failed_greeter = IS_GREETER_SESSION (session) && !session_get_is_started (session);
+
+ gboolean is_failed_greeter = IS_GREETER_SESSION (session) && !session_get_is_started (session);
l_debug (seat, "Stopping session");
session_stop (session);
@@ -493,7 +472,7 @@ display_server_stopped_cb (DisplayServer *display_server, Seat *seat)
if (!seat->priv->stopping)
{
/* If we were the active session, switch to a greeter */
- active_session = seat_get_active_session (seat);
+ Session *active_session = seat_get_active_session (seat);
if (!active_session || session_get_display_server (active_session) == display_server)
{
l_debug (seat, "Active display server stopped, starting greeter");
@@ -517,9 +496,7 @@ can_share_display_server (Seat *seat, DisplayServer *display_server)
static GreeterSession *
find_greeter_session (Seat *seat)
{
- GList *link;
-
- for (link = seat->priv->sessions; link; link = link->next)
+ for (GList *link = seat->priv->sessions; link; link = link->next)
{
Session *session = link->data;
if (!session_get_is_stopping (session) && IS_GREETER_SESSION (session))
@@ -532,9 +509,7 @@ find_greeter_session (Seat *seat)
static GreeterSession *
find_resettable_greeter (Seat *seat)
{
- GList *link;
-
- for (link = seat->priv->sessions; link; link = link->next)
+ for (GList *link = seat->priv->sessions; link; link = link->next)
{
Session *session = link->data;
if (!session_get_is_stopping (session) && IS_GREETER_SESSION (session) &&
@@ -559,12 +534,9 @@ set_greeter_hints (Seat *seat, Greeter *greeter)
static void
switch_to_greeter_from_failed_session (Seat *seat, Session *session)
{
- GreeterSession *greeter_session;
- Greeter *greeter;
- gboolean existing = FALSE;
-
/* Switch to greeter if one open */
- greeter_session = find_resettable_greeter (seat);
+ GreeterSession *greeter_session = find_resettable_greeter (seat);
+ gboolean existing = FALSE;
if (greeter_session)
{
l_debug (seat, "Switching to existing greeter");
@@ -575,7 +547,7 @@ switch_to_greeter_from_failed_session (Seat *seat, Session *session)
{
greeter_session = create_greeter_session (seat);
}
- greeter = greeter_session_get_greeter (greeter_session);
+ Greeter *greeter = greeter_session_get_greeter (greeter_session);
if (session_get_is_guest (session))
greeter_set_hint (greeter, "select-guest", "true");
@@ -596,9 +568,7 @@ switch_to_greeter_from_failed_session (Seat *seat, Session *session)
session_set_display_server (SESSION (greeter_session), session_get_display_server (session));
else
{
- DisplayServer *display_server;
-
- display_server = create_display_server (seat, session);
+ DisplayServer *display_server = create_display_server (seat, session);
session_set_display_server (session, display_server);
if (!start_display_server (seat, display_server))
{
@@ -620,17 +590,11 @@ start_session (Seat *seat, Session *session)
/* Use system location for greeter log file */
if (IS_GREETER_SESSION (session))
{
- gchar *log_dir, *filename, *log_filename;
- gboolean backup_logs;
-
- log_dir = config_get_string (config_get_instance (), "LightDM", "log-directory");
- filename = g_strdup_printf ("%s-greeter.log", seat->priv->name);
- log_filename = g_build_filename (log_dir, filename, NULL);
- g_free (log_dir);
- g_free (filename);
- backup_logs = config_get_boolean (config_get_instance (), "LightDM", "backup-logs");
+ g_autofree gchar *log_dir = config_get_string (config_get_instance (), "LightDM", "log-directory");
+ g_autofree gchar *filename = g_strdup_printf ("%s-greeter.log", seat->priv->name);
+ g_autofree gchar *log_filename = g_build_filename (log_dir, filename, NULL);
+ gboolean backup_logs = config_get_boolean (config_get_instance (), "LightDM", "backup-logs");
session_set_log_file (session, log_filename, backup_logs ? LOG_MODE_BACKUP_AND_TRUNCATE : LOG_MODE_APPEND);
- g_free (log_filename);
}
if (session_start (session))
@@ -651,7 +615,6 @@ static void
run_session (Seat *seat, Session *session)
{
const gchar *script;
-
if (IS_GREETER_SESSION (session))
script = seat_get_string_property (seat, "greeter-setup-script");
else
@@ -694,12 +657,10 @@ run_session (Seat *seat, Session *session)
static Session *
find_user_session (Seat *seat, const gchar *username, Session *ignore_session)
{
- GList *link;
-
if (!username)
return NULL;
- for (link = seat->priv->sessions; link; link = link->next)
+ for (GList *link = seat->priv->sessions; link; link = link->next)
{
Session *session = link->data;
@@ -716,9 +677,7 @@ find_user_session (Seat *seat, const gchar *username, Session *ignore_session)
static void
greeter_active_username_changed_cb (Greeter *greeter, GParamSpec *pspec, Seat *seat)
{
- Session *session;
-
- session = find_user_session (seat, greeter_get_active_username (greeter), seat->priv->active_session);
+ Session *session = find_user_session (seat, greeter_get_active_username (greeter), seat->priv->active_session);
g_clear_object (&seat->priv->next_session);
seat->priv->next_session = session ? g_object_ref (session) : NULL;
@@ -731,9 +690,7 @@ session_authentication_complete_cb (Session *session, Seat *seat)
{
if (session_get_is_authenticated (session))
{
- Session *s;
-
- s = find_user_session (seat, session_get_username (session), session);
+ Session *s = find_user_session (seat, session_get_username (session), session);
if (s)
{
l_debug (seat, "Session authenticated, switching to existing user session");
@@ -761,8 +718,6 @@ session_authentication_complete_cb (Session *session, Seat *seat)
static void
session_stopped_cb (Session *session, Seat *seat)
{
- DisplayServer *display_server;
-
l_debug (seat, "Session stopped");
g_signal_handlers_disconnect_matched (session, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, seat);
@@ -774,13 +729,12 @@ session_stopped_cb (Session *session, Seat *seat)
if (session == seat->priv->session_to_activate)
g_clear_object (&seat->priv->session_to_activate);
- display_server = session_get_display_server (session);
+ DisplayServer *display_server = session_get_display_server (session);
/* Cleanup */
if (!IS_GREETER_SESSION (session))
{
- const gchar *script;
- script = seat_get_string_property (seat, "session-cleanup-script");
+ const gchar *script = seat_get_string_property (seat, "session-cleanup-script");
if (script)
run_script (seat, display_server, script, session_get_user (session));
}
@@ -796,13 +750,13 @@ session_stopped_cb (Session *session, Seat *seat)
g_object_unref (session);
return;
}
-
+
/* If there is a pending replacement greeter, start it */
if (IS_GREETER_SESSION (session) && seat->priv->replacement_greeter)
{
GreeterSession *replacement_greeter = seat->priv->replacement_greeter;
seat->priv->replacement_greeter = NULL;
-
+
if (session_get_is_authenticated (SESSION (replacement_greeter)))
{
l_debug (seat, "Greeter stopped, running session");
@@ -821,9 +775,7 @@ session_stopped_cb (Session *session, Seat *seat)
can_share_display_server (seat, display_server) &&
greeter_get_start_session (greeter_session_get_greeter (GREETER_SESSION (session))))
{
- GList *link;
-
- for (link = seat->priv->sessions; link; link = link->next)
+ for (GList *link = seat->priv->sessions; link; link = link->next)
{
Session *s = link->data;
@@ -905,9 +857,7 @@ set_session_env (Session *session)
static Session *
create_session (Seat *seat, gboolean autostart)
{
- Session *session;
-
- session = SEAT_GET_CLASS (seat)->create_session (seat);
+ Session *session = SEAT_GET_CLASS (seat)->create_session (seat);
seat->priv->sessions = g_list_append (seat->priv->sessions, session);
if (autostart)
g_signal_connect (session, SESSION_SIGNAL_AUTHENTICATION_COMPLETE, G_CALLBACK (session_authentication_complete_cb), seat);
@@ -923,62 +873,53 @@ create_session (Seat *seat, gboolean autostart)
static gchar **
get_session_argv (Seat *seat, SessionConfig *session_config, const gchar *session_wrapper)
{
- gboolean result;
- int argc;
- gchar **argv, *path;
- g_autoptr(GError) error = NULL;
-
/* If configured, run sessions through a wrapper */
if (session_wrapper)
{
- argv = g_malloc (sizeof (gchar *) * 3);
- path = g_find_program_in_path (session_wrapper);
- argv[0] = path ? path : g_strdup (session_wrapper);
+ gchar **argv = g_malloc (sizeof (gchar *) * 3);
+ g_autofree gchar *path = g_find_program_in_path (session_wrapper);
+ argv[0] = path ? g_steal_pointer (&path) : g_strdup (session_wrapper);
argv[1] = g_strdup (session_config_get_command (session_config));
argv[2] = NULL;
return argv;
}
/* Split command into an array listing and make command absolute */
- result = g_shell_parse_argv (session_config_get_command (session_config), &argc, &argv, &error);
+ int argc;
+ g_auto(GStrv) argv = NULL;
+ g_autoptr(GError) error = NULL;
+ gboolean result = g_shell_parse_argv (session_config_get_command (session_config), &argc, &argv, &error);
if (error)
l_debug (seat, "Invalid session command '%s': %s", session_config_get_command (session_config), error->message);
if (!result)
return NULL;
- path = g_find_program_in_path (argv[0]);
+ g_autofree gchar *path = g_find_program_in_path (argv[0]);
if (path)
{
g_free (argv[0]);
- argv[0] = path;
+ argv[0] = g_steal_pointer (&path);
}
- return argv;
+ return g_steal_pointer (&argv);
}
static SessionConfig *
find_session_config (Seat *seat, const gchar *sessions_dir, const gchar *session_name)
{
- g_auto(GStrv) dirs = NULL;
- int i;
-
g_return_val_if_fail (sessions_dir != NULL, NULL);
g_return_val_if_fail (session_name != NULL, NULL);
- dirs = g_strsplit (sessions_dir, ":", -1);
- for (i = 0; dirs[i]; i++)
+ g_auto(GStrv) dirs = g_strsplit (sessions_dir, ":", -1);
+ for (int i = 0; dirs[i]; i++)
{
- g_autofree gchar *filename = NULL;
- g_autofree gchar *path = NULL;
const gchar *default_session_type = "x";
- SessionConfig *session_config;
- g_autoptr(GError) error = NULL;
-
if (strcmp (dirs[i], WAYLAND_SESSIONS_DIR) == 0)
default_session_type = "wayland";
- filename = g_strdup_printf ("%s.desktop", session_name);
- path = g_build_filename (dirs[i], filename, NULL);
- session_config = session_config_new_from_file (path, default_session_type, &error);
+ g_autofree gchar *filename = g_strdup_printf ("%s.desktop", session_name);
+ g_autofree gchar *path = g_build_filename (dirs[i], filename, NULL);
+ g_autoptr(GError) error = NULL;
+ SessionConfig *session_config = session_config_new_from_file (path, default_session_type, &error);
if (session_config)
return session_config;
}
@@ -991,19 +932,15 @@ find_session_config (Seat *seat, const gchar *sessions_dir, const gchar *session
static void
configure_session (Session *session, SessionConfig *config, const gchar *session_name, const gchar *language)
{
- gchar **desktop_names;
-
session_set_config (session, config);
session_set_env (session, "XDG_SESSION_DESKTOP", session_name);
session_set_env (session, "DESKTOP_SESSION", session_name);
session_set_env (session, "GDMSESSION", session_name);
- desktop_names = session_config_get_desktop_names (config);
+ gchar **desktop_names = session_config_get_desktop_names (config);
if (desktop_names)
{
- gchar *value;
- value = g_strjoinv (":", desktop_names);
+ g_autofree gchar *value = g_strjoinv (":", desktop_names);
session_set_env (session, "XDG_CURRENT_DESKTOP", value);
- g_free (value);
}
if (language && language[0] != '\0')
{
@@ -1015,24 +952,17 @@ configure_session (Session *session, SessionConfig *config, const gchar *session
static Session *
create_user_session (Seat *seat, const gchar *username, gboolean autostart)
{
- g_autoptr(User) user = NULL;
- g_autofree gchar *sessions_dir = NULL;
- const gchar *session_name, *language;
- g_autoptr(SessionConfig) session_config = NULL;
- g_autoptr(Session) session = NULL;
- g_auto(GStrv) argv = NULL;
-
l_debug (seat, "Creating user session");
/* Load user preferences */
- user = accounts_get_user_by_name (username);
+ g_autoptr(User) user = accounts_get_user_by_name (username);
if (!user)
{
l_debug (seat, "Can't login unknown user '%s'", username);
return NULL;
}
- session_name = user_get_xsession (user);
- language = user_get_language (user);
+ const gchar *session_name = user_get_xsession (user);
+ const gchar *language = user_get_language (user);
/* Override session for autologin if configured */
if (autostart)
@@ -1044,19 +974,19 @@ create_user_session (Seat *seat, const gchar *username, gboolean autostart)
if (!session_name)
session_name = seat_get_string_property (seat, "user-session");
- sessions_dir = config_get_string (config_get_instance (), "LightDM", "sessions-directory");
- session_config = find_session_config (seat, sessions_dir, session_name);
+ g_autofree gchar *sessions_dir = config_get_string (config_get_instance (), "LightDM", "sessions-directory");
+ g_autoptr(SessionConfig) session_config = find_session_config (seat, sessions_dir, session_name);
if (!session_config)
{
l_debug (seat, "Can't find session '%s'", session_name);
return NULL;
}
- session = create_session (seat, autostart);
+ g_autoptr(Session) session = create_session (seat, autostart);
configure_session (session, session_config, session_name, language);
session_set_username (session, username);
session_set_do_authenticate (session, TRUE);
- argv = get_session_argv (seat, session_config, seat_get_string_property (seat, "session-wrapper"));
+ g_auto(GStrv) argv = get_session_argv (seat, session_config, seat_get_string_property (seat, "session-wrapper"));
session_set_argv (session, argv);
return g_steal_pointer (&session);
@@ -1065,12 +995,10 @@ create_user_session (Seat *seat, const gchar *username, gboolean autostart)
static void
prepend_argv (gchar ***argv, const gchar *value)
{
- gchar **old_argv, **new_argv;
- gint i;
-
- old_argv = *argv;
- new_argv = g_malloc (sizeof (gchar *) * (g_strv_length (*argv) + 2));
+ gchar **old_argv = *argv;
+ gchar **new_argv = g_malloc (sizeof (gchar *) * (g_strv_length (*argv) + 2));
new_argv[0] = g_strdup (value);
+ gint i;
for (i = 0; old_argv[i]; i++)
new_argv[i + 1] = old_argv[i];
new_argv[i + 1] = NULL;
@@ -1082,36 +1010,28 @@ prepend_argv (gchar ***argv, const gchar *value)
static Session *
create_guest_session (Seat *seat, const gchar *session_name)
{
- const gchar *guest_wrapper;
- g_autofree gchar *sessions_dir = NULL;
- g_auto(GStrv) argv = NULL;
- g_autoptr(SessionConfig) session_config = NULL;
- g_autoptr(Session) session = NULL;
-
if (!session_name)
session_name = seat_get_string_property (seat, "guest-session");
if (!session_name)
session_name = seat_get_string_property (seat, "user-session");
- sessions_dir = config_get_string (config_get_instance (), "LightDM", "sessions-directory");
- session_config = find_session_config (seat, sessions_dir, session_name);
+ g_autofree gchar *sessions_dir = config_get_string (config_get_instance (), "LightDM", "sessions-directory");
+ g_autoptr(SessionConfig) session_config = find_session_config (seat, sessions_dir, session_name);
if (!session_config)
{
l_debug (seat, "Can't find session '%s'", session_name);
return NULL;
}
- session = create_session (seat, TRUE);
+ g_autoptr(Session) session = create_session (seat, TRUE);
configure_session (session, session_config, session_name, NULL);
session_set_do_authenticate (session, TRUE);
session_set_is_guest (session, TRUE);
- argv = get_session_argv (seat, session_config, seat_get_string_property (seat, "session-wrapper"));
- guest_wrapper = seat_get_string_property (seat, "guest-wrapper");
+ g_auto(GStrv) argv = get_session_argv (seat, session_config, seat_get_string_property (seat, "session-wrapper"));
+ const gchar *guest_wrapper = seat_get_string_property (seat, "guest-wrapper");
if (guest_wrapper)
{
- gchar *path;
- path = g_find_program_in_path (guest_wrapper);
+ g_autofree gchar *path = g_find_program_in_path (guest_wrapper);
prepend_argv (&argv, path ? path : guest_wrapper);
- g_free (path);
}
session_set_argv (session, argv);
@@ -1123,10 +1043,8 @@ create_guest_session (Seat *seat, const gchar *session_name)
static Session *
get_greeter_session (Seat *seat, Greeter *greeter)
{
- GList *link;
-
/* Stop any greeters */
- for (link = seat->priv->sessions; link; link = link->next)
+ for (GList *link = seat->priv->sessions; link; link = link->next)
{
Session *session = link->data;
@@ -1153,11 +1071,8 @@ greeter_create_session_cb (Greeter *greeter, Seat *seat)
static gboolean
greeter_start_session_cb (Greeter *greeter, SessionType type, const gchar *session_name, Seat *seat)
{
- Session *session, *existing_session, *greeter_session;
- const gchar *username;
- DisplayServer *display_server;
-
/* Get the session to use */
+ Session *session;
if (greeter_get_guest_authenticated (greeter))
{
session = g_object_ref (create_guest_session (seat, session_name));
@@ -1167,15 +1082,10 @@ greeter_start_session_cb (Greeter *greeter, SessionType type, const gchar *sessi
}
else
{
- const gchar *language = NULL;
- g_autoptr(SessionConfig) session_config = NULL;
- User *user;
- gchar *sessions_dir = NULL;
- g_auto(GStrv) argv = NULL;
-
session = greeter_take_authentication_session (greeter);
/* Get session command to run */
+ g_autofree gchar *sessions_dir = NULL;
switch (type)
{
case SESSION_TYPE_LOCAL:
@@ -1187,7 +1097,8 @@ greeter_start_session_cb (Greeter *greeter, SessionType type, const gchar *sessi
}
/* Load user preferences */
- user = session_get_user (session);
+ const gchar *language = NULL;
+ User *user = session_get_user (session);
if (user)
{
const gchar *autologin_username;
@@ -1207,8 +1118,7 @@ greeter_start_session_cb (Greeter *greeter, SessionType type, const gchar *sessi
if (user)
user_set_xsession (session_get_user (session), session_name);
- session_config = find_session_config (seat, sessions_dir, session_name);
- g_free (sessions_dir);
+ g_autoptr(SessionConfig) session_config = find_session_config (seat, sessions_dir, session_name);
if (!session_config)
{
l_debug (seat, "Can't find session '%s'", session_name);
@@ -1216,7 +1126,7 @@ greeter_start_session_cb (Greeter *greeter, SessionType type, const gchar *sessi
}
configure_session (session, session_config, session_name, language);
- argv = get_session_argv (seat, session_config, seat_get_string_property (seat, "session-wrapper"));
+ g_auto(GStrv) argv = get_session_argv (seat, session_config, seat_get_string_property (seat, "session-wrapper"));
session_set_argv (session, argv);
}
@@ -1225,8 +1135,8 @@ greeter_start_session_cb (Greeter *greeter, SessionType type, const gchar *sessi
seat->priv->session_to_activate = session;
/* Return to existing session if it is open */
- username = session_get_username (session);
- existing_session = find_user_session (seat, username, NULL);
+ const gchar *username = session_get_username (session);
+ Session *existing_session = find_user_session (seat, username, NULL);
if (existing_session && session != existing_session)
{
l_debug (seat, "Returning to existing user session %s", username);
@@ -1237,10 +1147,10 @@ greeter_start_session_cb (Greeter *greeter, SessionType type, const gchar *sessi
}
/* If can re-use the display server, stop the greeter first */
- greeter_session = get_greeter_session (seat, greeter);
+ Session *greeter_session = get_greeter_session (seat, greeter);
if (greeter_session)
{
- display_server = session_get_display_server (greeter_session);
+ DisplayServer *display_server = session_get_display_server (greeter_session);
if (display_server &&
!greeter_get_resettable (greeter) &&
can_share_display_server (seat, display_server) &&
@@ -1259,7 +1169,7 @@ greeter_start_session_cb (Greeter *greeter, SessionType type, const gchar *sessi
}
/* Otherwise start a new display server for this session */
- display_server = create_display_server (seat, session);
+ DisplayServer *display_server = create_display_server (seat, session);
session_set_display_server (session, display_server);
if (!start_display_server (seat, display_server))
{
@@ -1273,37 +1183,23 @@ greeter_start_session_cb (Greeter *greeter, SessionType type, const gchar *sessi
static GreeterSession *
create_greeter_session (Seat *seat)
{
- gchar *sessions_dir;
- g_auto(GStrv) argv = NULL;
- SessionConfig *session_config;
- GreeterSession *greeter_session;
- Greeter *greeter;
- const gchar *greeter_wrapper;
- const gchar *autologin_username;
- const gchar *autologin_session;
- int autologin_timeout;
- gboolean autologin_guest;
-
l_debug (seat, "Creating greeter session");
- sessions_dir = config_get_string (config_get_instance (), "LightDM", "greeters-directory");
- session_config = find_session_config (seat, sessions_dir, seat_get_string_property (seat, "greeter-session"));
- g_free (sessions_dir);
+ g_autofree gchar *sessions_dir = config_get_string (config_get_instance (), "LightDM", "greeters-directory");
+ g_autoptr(SessionConfig) session_config = find_session_config (seat, sessions_dir, seat_get_string_property (seat, "greeter-session"));
if (!session_config)
return NULL;
- argv = get_session_argv (seat, session_config, NULL);
- greeter_wrapper = seat_get_string_property (seat, "greeter-wrapper");
+ g_auto(GStrv) argv = get_session_argv (seat, session_config, NULL);
+ const gchar *greeter_wrapper = seat_get_string_property (seat, "greeter-wrapper");
if (greeter_wrapper)
{
- gchar *path;
- path = g_find_program_in_path (greeter_wrapper);
+ g_autofree gchar *path = g_find_program_in_path (greeter_wrapper);
prepend_argv (&argv, path ? path : greeter_wrapper);
- g_free (path);
}
- greeter_session = SEAT_GET_CLASS (seat)->create_greeter_session (seat);
- greeter = greeter_session_get_greeter (greeter_session);
+ GreeterSession *greeter_session = SEAT_GET_CLASS (seat)->create_greeter_session (seat);
+ Greeter *greeter = greeter_session_get_greeter (greeter_session);
session_set_config (SESSION (greeter_session), session_config);
seat->priv->sessions = g_list_append (seat->priv->sessions, SESSION (greeter_session));
g_signal_connect (greeter, GREETER_SIGNAL_ACTIVE_USERNAME_CHANGED, G_CALLBACK (greeter_active_username_changed_cb), seat);
@@ -1316,10 +1212,8 @@ create_greeter_session (Seat *seat)
session_set_pam_service (SESSION (greeter_session), seat_get_string_property (seat, "pam-greeter-service"));
if (getuid () == 0)
{
- gchar *greeter_user;
- greeter_user = config_get_string (config_get_instance (), "LightDM", "greeter-user");
+ g_autofree gchar *greeter_user = config_get_string (config_get_instance (), "LightDM", "greeter-user");
session_set_username (SESSION (greeter_session), greeter_user);
- g_free (greeter_user);
}
else
{
@@ -1339,21 +1233,18 @@ create_greeter_session (Seat *seat)
set_greeter_hints (seat, greeter);
/* Configure for automatic login */
- autologin_username = seat_get_string_property (seat, "autologin-user");
+ const gchar *autologin_username = seat_get_string_property (seat, "autologin-user");
if (g_strcmp0 (autologin_username, "") == 0)
autologin_username = NULL;
- autologin_session = seat_get_string_property (seat, "autologin-session");
+ const gchar *autologin_session = seat_get_string_property (seat, "autologin-session");
if (g_strcmp0 (autologin_session, "") == 0)
autologin_session = NULL;
- autologin_timeout = seat_get_integer_property (seat, "autologin-user-timeout");
- autologin_guest = seat_get_boolean_property (seat, "autologin-guest");
+ int autologin_timeout = seat_get_integer_property (seat, "autologin-user-timeout");
+ gboolean autologin_guest = seat_get_boolean_property (seat, "autologin-guest");
if (autologin_timeout > 0)
{
- gchar *value;
-
- value = g_strdup_printf ("%d", autologin_timeout);
+ g_autofree gchar *value = g_strdup_printf ("%d", autologin_timeout);
greeter_set_hint (greeter, "autologin-timeout", value);
- g_free (value);
if (autologin_username)
greeter_set_hint (greeter, "autologin-user", autologin_username);
if (autologin_session)
@@ -1368,9 +1259,7 @@ create_greeter_session (Seat *seat)
static Session *
find_session_for_display_server (Seat *seat, DisplayServer *display_server)
{
- GList *link;
-
- for (link = seat->priv->sessions; link; link = link->next)
+ for (GList *link = seat->priv->sessions; link; link = link->next)
{
Session *session = link->data;
@@ -1386,11 +1275,8 @@ find_session_for_display_server (Seat *seat, DisplayServer *display_server)
static void
display_server_ready_cb (DisplayServer *display_server, Seat *seat)
{
- const gchar *script;
- Session *session;
-
/* Run setup script */
- script = seat_get_string_property (seat, "display-setup-script");
+ const gchar *script = seat_get_string_property (seat, "display-setup-script");
if (script && !run_script (seat, display_server, script, NULL))
{
l_debug (seat, "Stopping display server due to failed setup script");
@@ -1401,7 +1287,7 @@ display_server_ready_cb (DisplayServer *display_server, Seat *seat)
emit_upstart_signal ("login-session-start");
/* Start the session waiting for this display server */
- session = find_session_for_display_server (seat, display_server);
+ Session *session = find_session_for_display_server (seat, display_server);
if (session)
{
if (session_get_is_authenticated (session))
@@ -1425,16 +1311,14 @@ display_server_ready_cb (DisplayServer *display_server, Seat *seat)
static DisplayServer *
create_display_server (Seat *seat, Session *session)
{
- DisplayServer *display_server;
-
l_debug (seat, "Creating display server of type %s", session_get_session_type (session));
- display_server = SEAT_GET_CLASS (seat)->create_display_server (seat, session);
+ DisplayServer *display_server = SEAT_GET_CLASS (seat)->create_display_server (seat, session);
if (!display_server)
return NULL;
/* Remember this display server */
- if (!g_list_find (seat->priv->display_servers, display_server))
+ if (!g_list_find (seat->priv->display_servers, display_server))
{
seat->priv->display_servers = g_list_append (seat->priv->display_servers, display_server);
g_signal_connect (display_server, DISPLAY_SERVER_SIGNAL_READY, G_CALLBACK (display_server_ready_cb), seat);
@@ -1459,16 +1343,13 @@ start_display_server (Seat *seat, DisplayServer *display_server)
gboolean
seat_switch_to_greeter (Seat *seat)
{
- GreeterSession *greeter_session;
- DisplayServer *display_server;
-
g_return_val_if_fail (seat != NULL, FALSE);
if (!seat_get_can_switch (seat) && seat->priv->sessions != NULL)
return FALSE;
/* Switch to greeter if one open */
- greeter_session = find_greeter_session (seat);
+ GreeterSession *greeter_session = find_greeter_session (seat);
if (greeter_session)
{
l_debug (seat, "Switching to existing greeter");
@@ -1483,7 +1364,7 @@ seat_switch_to_greeter (Seat *seat)
g_clear_object (&seat->priv->session_to_activate);
seat->priv->session_to_activate = g_object_ref (SESSION (greeter_session));
- display_server = create_display_server (seat, SESSION (greeter_session));
+ DisplayServer *display_server = create_display_server (seat, SESSION (greeter_session));
if (!display_server) {
g_clear_object (&seat->priv->session_to_activate);
return FALSE;
@@ -1496,17 +1377,10 @@ seat_switch_to_greeter (Seat *seat)
static void
switch_authentication_complete_cb (Session *session, Seat *seat)
{
- GreeterSession *greeter_session;
- Greeter *greeter;
- DisplayServer *display_server;
- gboolean existing = FALSE;
-
/* If authenticated, then unlock existing session or start new one */
if (session_get_is_authenticated (session))
{
- Session *s;
-
- s = find_user_session (seat, session_get_username (session), session);
+ Session *s = find_user_session (seat, session_get_username (session), session);
if (s)
{
l_debug (seat, "Session authenticated, switching to existing user session");
@@ -1519,7 +1393,7 @@ switch_authentication_complete_cb (Session *session, Seat *seat)
l_debug (seat, "Session authenticated, starting display server");
g_clear_object (&seat->priv->session_to_activate);
seat->priv->session_to_activate = g_object_ref (session);
- display_server = create_display_server (seat, session);
+ DisplayServer *display_server = create_display_server (seat, session);
session_set_display_server (session, display_server);
start_display_server (seat, display_server);
}
@@ -1530,7 +1404,8 @@ switch_authentication_complete_cb (Session *session, Seat *seat)
session_stop (session);
/* See if we already have a greeter up and reuse it if so */
- greeter_session = find_resettable_greeter (seat);
+ GreeterSession *greeter_session = find_resettable_greeter (seat);
+ gboolean existing = FALSE;
if (greeter_session)
{
l_debug (seat, "Switching to existing greeter to authenticate session");
@@ -1542,7 +1417,7 @@ switch_authentication_complete_cb (Session *session, Seat *seat)
l_debug (seat, "Starting greeter to authenticate session");
greeter_session = create_greeter_session (seat);
}
- greeter = greeter_session_get_greeter (greeter_session);
+ Greeter *greeter = greeter_session_get_greeter (greeter_session);
if (session_get_is_guest (session))
greeter_set_hint (greeter, "select-guest", "true");
@@ -1559,7 +1434,7 @@ switch_authentication_complete_cb (Session *session, Seat *seat)
g_clear_object (&seat->priv->session_to_activate);
seat->priv->session_to_activate = g_object_ref (SESSION (greeter_session));
- display_server = create_display_server (seat, SESSION (greeter_session));
+ DisplayServer *display_server = create_display_server (seat, SESSION (greeter_session));
session_set_display_server (SESSION (greeter_session), display_server);
start_display_server (seat, display_server);
}
@@ -1568,8 +1443,6 @@ switch_authentication_complete_cb (Session *session, Seat *seat)
gboolean
seat_switch_to_user (Seat *seat, const gchar *username, const gchar *session_name)
{
- Session *session;
-
g_return_val_if_fail (seat != NULL, FALSE);
g_return_val_if_fail (username != NULL, FALSE);
@@ -1577,7 +1450,7 @@ seat_switch_to_user (Seat *seat, const gchar *username, const gchar *session_nam
return FALSE;
/* If we're already on this session, then ignore */
- session = find_user_session (seat, username, NULL);
+ Session *session = find_user_session (seat, username, NULL);
if (session && session == seat->priv->active_session)
return TRUE;
@@ -1594,9 +1467,7 @@ seat_switch_to_user (Seat *seat, const gchar *username, const gchar *session_nam
static Session *
find_guest_session (Seat *seat)
{
- GList *link;
-
- for (link = seat->priv->sessions; link; link = link->next)
+ for (GList *link = seat->priv->sessions; link; link = link->next)
{
Session *session = link->data;
if (!session_get_is_stopping (session) && session_get_is_guest (session))
@@ -1609,16 +1480,13 @@ find_guest_session (Seat *seat)
gboolean
seat_switch_to_guest (Seat *seat, const gchar *session_name)
{
- Session *session;
- DisplayServer *display_server;
-
g_return_val_if_fail (seat != NULL, FALSE);
if (!seat_get_can_switch (seat) || !seat_get_allow_guest (seat))
return FALSE;
/* Switch to session if one open */
- session = find_guest_session (seat);
+ Session *session = find_guest_session (seat);
if (session)
{
l_debug (seat, "Switching to existing guest account %s", session_get_username (session));
@@ -1630,7 +1498,7 @@ seat_switch_to_guest (Seat *seat, const gchar *session_name)
if (!session)
return FALSE;
- display_server = create_display_server (seat, session);
+ DisplayServer *display_server = create_display_server (seat, session);
g_clear_object (&seat->priv->session_to_activate);
seat->priv->session_to_activate = g_object_ref (session);
@@ -1643,12 +1511,6 @@ seat_switch_to_guest (Seat *seat, const gchar *session_name)
gboolean
seat_lock (Seat *seat, const gchar *username)
{
- GreeterSession *greeter_session;
- Greeter *greeter;
- DisplayServer *display_server = NULL;
- gboolean reset_existing = FALSE;
- gboolean reuse_xserver = FALSE;
-
g_return_val_if_fail (seat != NULL, FALSE);
if (!seat_get_can_switch (seat))
@@ -1659,7 +1521,10 @@ seat_lock (Seat *seat, const gchar *username)
l_debug (seat, "Locking");
/* Switch to greeter we can reuse */
- greeter_session = find_resettable_greeter (seat);
+ gboolean reset_existing = FALSE;
+ gboolean reuse_xserver = FALSE;
+ DisplayServer *display_server = NULL;
+ GreeterSession *greeter_session = find_resettable_greeter (seat);
if (greeter_session)
{
l_debug (seat, "Switching to existing greeter");
@@ -1680,12 +1545,12 @@ seat_lock (Seat *seat, const gchar *username)
}
reuse_xserver = TRUE;
}
-
+
greeter_session = create_greeter_session (seat);
if (!greeter_session)
return FALSE;
}
- greeter = greeter_session_get_greeter (greeter_session);
+ Greeter *greeter = greeter_session_get_greeter (greeter_session);
greeter_set_hint (greeter, "lock-screen", "true");
if (username)
@@ -1745,21 +1610,16 @@ seat_real_setup (Seat *seat)
static gboolean
seat_real_start (Seat *seat)
{
- const gchar *autologin_username;
- int autologin_timeout;
- gboolean autologin_guest;
- gboolean autologin_in_background;
- Session *session = NULL, *background_session = NULL;
-
/* Get autologin settings */
- autologin_username = seat_get_string_property (seat, "autologin-user");
+ const gchar *autologin_username = seat_get_string_property (seat, "autologin-user");
if (g_strcmp0 (autologin_username, "") == 0)
autologin_username = NULL;
- autologin_timeout = seat_get_integer_property (seat, "autologin-user-timeout");
- autologin_guest = seat_get_boolean_property (seat, "autologin-guest");
- autologin_in_background = seat_get_boolean_property (seat, "autologin-in-background");
+ int autologin_timeout = seat_get_integer_property (seat, "autologin-user-timeout");
+ gboolean autologin_guest = seat_get_boolean_property (seat, "autologin-guest");
+ gboolean autologin_in_background = seat_get_boolean_property (seat, "autologin-in-background");
/* Autologin if configured */
+ Session *session = NULL, *background_session = NULL;
if (autologin_timeout == 0 || autologin_in_background)
{
if (autologin_guest)
@@ -1779,12 +1639,10 @@ seat_real_start (Seat *seat)
if (session)
{
- DisplayServer *display_server;
-
g_clear_object (&seat->priv->session_to_activate);
seat->priv->session_to_activate = g_object_ref (session);
- display_server = create_display_server (seat, session);
+ DisplayServer *display_server = create_display_server (seat, session);
session_set_display_server (session, display_server);
if (!display_server || !start_display_server (seat, display_server))
{
@@ -1800,10 +1658,7 @@ seat_real_start (Seat *seat)
/* Fallback to a greeter */
if (!session)
{
- GreeterSession *greeter_session;
- DisplayServer *display_server;
-
- greeter_session = create_greeter_session (seat);
+ GreeterSession *greeter_session = create_greeter_session (seat);
if (!greeter_session)
{
l_debug (seat, "Failed to create greeter session");
@@ -1814,7 +1669,7 @@ seat_real_start (Seat *seat)
session = SESSION (greeter_session);
seat->priv->session_to_activate = g_object_ref (session);
- display_server = create_display_server (seat, session);
+ DisplayServer *display_server = create_display_server (seat, session);
session_set_display_server (session, display_server);
if (!display_server || !start_display_server (seat, display_server))
{
@@ -1836,9 +1691,7 @@ seat_real_start (Seat *seat)
/* Start background session */
if (background_session)
{
- DisplayServer *background_display_server;
-
- background_display_server = create_display_server (seat, background_session);
+ DisplayServer *background_display_server = create_display_server (seat, background_session);
session_set_display_server (background_session, background_display_server);
if (!start_display_server (seat, background_display_server))
l_warning (seat, "Failed to start display server for background session");
@@ -1856,14 +1709,11 @@ seat_real_create_display_server (Seat *seat, Session *session)
static gboolean
seat_real_display_server_is_used (Seat *seat, DisplayServer *display_server)
{
- GList *link;
-
- for (link = seat->priv->sessions; link; link = link->next)
+ for (GList *link = seat->priv->sessions; link; link = link->next)
{
Session *session = link->data;
- DisplayServer *d;
- d = session_get_display_server (session);
+ DisplayServer *d = session_get_display_server (session);
if (!d)
continue;
@@ -1889,9 +1739,7 @@ create_session_cb (Greeter *greeter, Seat *seat)
static Greeter *
create_greeter_cb (Session *session, Seat *seat)
{
- Greeter *greeter;
-
- greeter = greeter_new ();
+ g_autoptr(Greeter) greeter = greeter_new ();
greeter_set_pam_services (greeter,
seat_get_string_property (seat, "pam-service"),
@@ -1903,18 +1751,16 @@ create_greeter_cb (Session *session, Seat *seat)
greeter_set_allow_guest (greeter, seat_get_allow_guest (seat));
set_greeter_hints (seat, greeter);
- return greeter;
+ return g_steal_pointer (&greeter);
}
static Session *
seat_real_create_session (Seat *seat)
{
- Session *session;
-
- session = session_new ();
+ g_autoptr(Session) session = session_new ();
g_signal_connect (session, SESSION_SIGNAL_CREATE_GREETER, G_CALLBACK (create_greeter_cb), seat);
- return session;
+ return g_steal_pointer (&session);
}
static void
@@ -1936,18 +1782,16 @@ seat_real_get_active_session (Seat *seat)
static void
seat_real_stop (Seat *seat)
{
- GList *list, *link;
-
check_stopped (seat);
if (seat->priv->stopped)
return;
/* Stop all the display servers and sessions on the seat. Copy the list as
* it might be modified if a display server / session stops during this loop */
- list = g_list_copy (seat->priv->display_servers);
- for (link = list; link; link = link->next)
+ GList *list = g_list_copy (seat->priv->display_servers);
+ for (GList *link = list; link; link = link->next)
g_object_ref (link->data);
- for (link = list; link; link = link->next)
+ for (GList *link = list; link; link = link->next)
{
DisplayServer *display_server = link->data;
if (!display_server_get_is_stopping (display_server))
@@ -1958,9 +1802,9 @@ seat_real_stop (Seat *seat)
}
g_list_free_full (list, g_object_unref);
list = g_list_copy (seat->priv->sessions);
- for (link = list; link; link = link->next)
+ for (GList *link = list; link; link = link->next)
g_object_ref (link->data);
- for (link = list; link; link = link->next)
+ for (GList *link = list; link; link = link->next)
{
Session *session = link->data;
if (!session_get_is_stopping (session))
@@ -1984,17 +1828,16 @@ static void
seat_finalize (GObject *object)
{
Seat *self = SEAT (object);
- GList *link;
g_free (self->priv->name);
g_hash_table_unref (self->priv->properties);
- for (link = self->priv->display_servers; link; link = link->next)
+ for (GList *link = self->priv->display_servers; link; link = link->next)
{
DisplayServer *display_server = link->data;
g_signal_handlers_disconnect_matched (display_server, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, self);
}
g_list_free_full (self->priv->display_servers, g_object_unref);
- for (link = self->priv->sessions; link; link = link->next)
+ for (GList *link = self->priv->sessions; link; link = link->next)
{
Session *session = link->data;
g_signal_handlers_disconnect_matched (session, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, self);
@@ -2016,7 +1859,7 @@ seat_class_init (SeatClass *klass)
klass->setup = seat_real_setup;
klass->start = seat_real_start;
klass->create_display_server = seat_real_create_display_server;
- klass->display_server_is_used = seat_real_display_server_is_used;
+ klass->display_server_is_used = seat_real_display_server_is_used;
klass->create_greeter_session = seat_real_create_greeter_session;
klass->create_session = seat_real_create_session;
klass->set_active_session = seat_real_set_active_session;