|
|
75a7a3 |
From 6df33bb3293d220bcdff7abc68f61ebad841ffe1 Mon Sep 17 00:00:00 2001
|
|
|
75a7a3 |
From: Ray Strode <rstrode@redhat.com>
|
|
|
75a7a3 |
Date: Fri, 12 May 2017 10:11:09 -0400
|
|
|
75a7a3 |
Subject: [PATCH] Revert "session: forward is-initial from display to worker"
|
|
|
75a7a3 |
MIME-Version: 1.0
|
|
|
75a7a3 |
Content-Type: text/plain; charset=UTF-8
|
|
|
75a7a3 |
Content-Transfer-Encoding: 8bit
|
|
|
75a7a3 |
|
|
|
75a7a3 |
This reverts commit 7a4e34049c79e907d1a027390c5d3a8dcdc11977.
|
|
|
75a7a3 |
|
|
|
75a7a3 |
It breaks login screen until reboot on 7.3→7.4 upgrade.
|
|
|
75a7a3 |
---
|
|
|
75a7a3 |
daemon/gdm-display.c | 6 ------
|
|
|
75a7a3 |
daemon/gdm-session-worker.c | 21 +++++----------------
|
|
|
75a7a3 |
daemon/gdm-session-worker.xml | 3 ---
|
|
|
75a7a3 |
daemon/gdm-session.c | 25 -------------------------
|
|
|
75a7a3 |
4 files changed, 5 insertions(+), 50 deletions(-)
|
|
|
75a7a3 |
|
|
|
75a7a3 |
diff --git a/daemon/gdm-display.c b/daemon/gdm-display.c
|
|
|
75a7a3 |
index 2af8e13e..c44e4941 100644
|
|
|
75a7a3 |
--- a/daemon/gdm-display.c
|
|
|
75a7a3 |
+++ b/daemon/gdm-display.c
|
|
|
75a7a3 |
@@ -1488,119 +1488,113 @@ wants_initial_setup (GdmDisplay *self)
|
|
|
75a7a3 |
/* don't run initial-setup on remote displays
|
|
|
75a7a3 |
*/
|
|
|
75a7a3 |
if (!self->priv->is_local) {
|
|
|
75a7a3 |
return FALSE;
|
|
|
75a7a3 |
}
|
|
|
75a7a3 |
|
|
|
75a7a3 |
/* don't run if the system has existing users */
|
|
|
75a7a3 |
if (self->priv->have_existing_user_accounts) {
|
|
|
75a7a3 |
return FALSE;
|
|
|
75a7a3 |
}
|
|
|
75a7a3 |
|
|
|
75a7a3 |
/* don't run if initial-setup is unavailable */
|
|
|
75a7a3 |
if (!can_create_environment ("gnome-initial-setup")) {
|
|
|
75a7a3 |
return FALSE;
|
|
|
75a7a3 |
}
|
|
|
75a7a3 |
|
|
|
75a7a3 |
if (!gdm_settings_direct_get_boolean (GDM_KEY_INITIAL_SETUP_ENABLE, &enabled)) {
|
|
|
75a7a3 |
return FALSE;
|
|
|
75a7a3 |
}
|
|
|
75a7a3 |
|
|
|
75a7a3 |
if (initial_setup_disabled_by_anaconda ()) {
|
|
|
75a7a3 |
return FALSE;
|
|
|
75a7a3 |
}
|
|
|
75a7a3 |
|
|
|
75a7a3 |
return enabled;
|
|
|
75a7a3 |
}
|
|
|
75a7a3 |
|
|
|
75a7a3 |
void
|
|
|
75a7a3 |
gdm_display_start_greeter_session (GdmDisplay *self)
|
|
|
75a7a3 |
{
|
|
|
75a7a3 |
- GdmSession *session;
|
|
|
75a7a3 |
char *display_name;
|
|
|
75a7a3 |
char *seat_id;
|
|
|
75a7a3 |
char *hostname;
|
|
|
75a7a3 |
char *auth_file = NULL;
|
|
|
75a7a3 |
|
|
|
75a7a3 |
g_return_if_fail (g_strcmp0 (self->priv->session_class, "greeter") == 0);
|
|
|
75a7a3 |
|
|
|
75a7a3 |
g_debug ("GdmDisplay: Running greeter");
|
|
|
75a7a3 |
|
|
|
75a7a3 |
display_name = NULL;
|
|
|
75a7a3 |
seat_id = NULL;
|
|
|
75a7a3 |
hostname = NULL;
|
|
|
75a7a3 |
|
|
|
75a7a3 |
g_object_get (self,
|
|
|
75a7a3 |
"x11-display-name", &display_name,
|
|
|
75a7a3 |
"seat-id", &seat_id,
|
|
|
75a7a3 |
"remote-hostname", &hostname,
|
|
|
75a7a3 |
NULL);
|
|
|
75a7a3 |
if (self->priv->access_file != NULL) {
|
|
|
75a7a3 |
auth_file = gdm_display_access_file_get_path (self->priv->access_file);
|
|
|
75a7a3 |
}
|
|
|
75a7a3 |
|
|
|
75a7a3 |
g_debug ("GdmDisplay: Creating greeter for %s %s", display_name, hostname);
|
|
|
75a7a3 |
|
|
|
75a7a3 |
g_signal_connect_object (self->priv->launch_environment,
|
|
|
75a7a3 |
"opened",
|
|
|
75a7a3 |
G_CALLBACK (on_launch_environment_session_opened),
|
|
|
75a7a3 |
self, 0);
|
|
|
75a7a3 |
g_signal_connect_object (self->priv->launch_environment,
|
|
|
75a7a3 |
"started",
|
|
|
75a7a3 |
G_CALLBACK (on_launch_environment_session_started),
|
|
|
75a7a3 |
self, 0);
|
|
|
75a7a3 |
g_signal_connect_object (self->priv->launch_environment,
|
|
|
75a7a3 |
"stopped",
|
|
|
75a7a3 |
G_CALLBACK (on_launch_environment_session_stopped),
|
|
|
75a7a3 |
self, 0);
|
|
|
75a7a3 |
g_signal_connect_object (self->priv->launch_environment,
|
|
|
75a7a3 |
"exited",
|
|
|
75a7a3 |
G_CALLBACK (on_launch_environment_session_exited),
|
|
|
75a7a3 |
self, 0);
|
|
|
75a7a3 |
g_signal_connect_object (self->priv->launch_environment,
|
|
|
75a7a3 |
"died",
|
|
|
75a7a3 |
G_CALLBACK (on_launch_environment_session_died),
|
|
|
75a7a3 |
self, 0);
|
|
|
75a7a3 |
|
|
|
75a7a3 |
if (auth_file != NULL) {
|
|
|
75a7a3 |
g_object_set (self->priv->launch_environment,
|
|
|
75a7a3 |
"x11-authority-file", auth_file,
|
|
|
75a7a3 |
NULL);
|
|
|
75a7a3 |
}
|
|
|
75a7a3 |
|
|
|
75a7a3 |
gdm_launch_environment_start (self->priv->launch_environment);
|
|
|
75a7a3 |
|
|
|
75a7a3 |
- session = gdm_launch_environment_get_session (self->priv->launch_environment);
|
|
|
75a7a3 |
- g_object_set (G_OBJECT (session),
|
|
|
75a7a3 |
- "display-is-initial", self->priv->is_initial,
|
|
|
75a7a3 |
- NULL);
|
|
|
75a7a3 |
-
|
|
|
75a7a3 |
g_free (display_name);
|
|
|
75a7a3 |
g_free (seat_id);
|
|
|
75a7a3 |
g_free (hostname);
|
|
|
75a7a3 |
g_free (auth_file);
|
|
|
75a7a3 |
}
|
|
|
75a7a3 |
|
|
|
75a7a3 |
static void
|
|
|
75a7a3 |
chown_initial_setup_home_dir (void)
|
|
|
75a7a3 |
{
|
|
|
75a7a3 |
GFile *dir;
|
|
|
75a7a3 |
GError *error;
|
|
|
75a7a3 |
char *gis_dir_path;
|
|
|
75a7a3 |
char *gis_uid_path;
|
|
|
75a7a3 |
char *gis_uid_contents;
|
|
|
75a7a3 |
struct passwd *pwe;
|
|
|
75a7a3 |
uid_t uid;
|
|
|
75a7a3 |
|
|
|
75a7a3 |
if (!gdm_get_pwent_for_name (INITIAL_SETUP_USERNAME, &pwe)) {
|
|
|
75a7a3 |
g_warning ("Unknown user %s", INITIAL_SETUP_USERNAME);
|
|
|
75a7a3 |
return;
|
|
|
75a7a3 |
}
|
|
|
75a7a3 |
|
|
|
75a7a3 |
gis_dir_path = g_strdup (pwe->pw_dir);
|
|
|
75a7a3 |
|
|
|
75a7a3 |
gis_uid_path = g_build_filename (gis_dir_path,
|
|
|
75a7a3 |
"gnome-initial-setup-uid",
|
|
|
75a7a3 |
NULL);
|
|
|
75a7a3 |
if (!g_file_get_contents (gis_uid_path, &gis_uid_contents, NULL, NULL)) {
|
|
|
75a7a3 |
g_warning ("Unable to read %s", gis_uid_path);
|
|
|
75a7a3 |
goto out;
|
|
|
75a7a3 |
diff --git a/daemon/gdm-session-worker.c b/daemon/gdm-session-worker.c
|
|
|
75a7a3 |
index d97b02b5..dffc8917 100644
|
|
|
75a7a3 |
--- a/daemon/gdm-session-worker.c
|
|
|
75a7a3 |
+++ b/daemon/gdm-session-worker.c
|
|
|
75a7a3 |
@@ -134,61 +134,60 @@ struct GdmSessionWorkerPrivate
|
|
|
75a7a3 |
pam_handle_t *pam_handle;
|
|
|
75a7a3 |
|
|
|
75a7a3 |
GPid child_pid;
|
|
|
75a7a3 |
guint child_watch_id;
|
|
|
75a7a3 |
|
|
|
75a7a3 |
/* from Setup */
|
|
|
75a7a3 |
char *service;
|
|
|
75a7a3 |
char *x11_display_name;
|
|
|
75a7a3 |
char *x11_authority_file;
|
|
|
75a7a3 |
char *display_device;
|
|
|
75a7a3 |
char *display_seat_id;
|
|
|
75a7a3 |
char *hostname;
|
|
|
75a7a3 |
char *username;
|
|
|
75a7a3 |
char *log_file;
|
|
|
75a7a3 |
char *session_id;
|
|
|
75a7a3 |
uid_t uid;
|
|
|
75a7a3 |
gid_t gid;
|
|
|
75a7a3 |
gboolean password_is_required;
|
|
|
75a7a3 |
|
|
|
75a7a3 |
int cred_flags;
|
|
|
75a7a3 |
int login_vt;
|
|
|
75a7a3 |
int session_vt;
|
|
|
75a7a3 |
int session_tty_fd;
|
|
|
75a7a3 |
|
|
|
75a7a3 |
char **arguments;
|
|
|
75a7a3 |
guint32 cancelled : 1;
|
|
|
75a7a3 |
guint32 timed_out : 1;
|
|
|
75a7a3 |
guint32 is_program_session : 1;
|
|
|
75a7a3 |
guint32 is_reauth_session : 1;
|
|
|
75a7a3 |
guint32 display_is_local : 1;
|
|
|
75a7a3 |
- guint32 display_is_initial : 1;
|
|
|
75a7a3 |
guint state_change_idle_id;
|
|
|
75a7a3 |
GdmSessionDisplayMode display_mode;
|
|
|
75a7a3 |
|
|
|
75a7a3 |
char *server_address;
|
|
|
75a7a3 |
GDBusConnection *connection;
|
|
|
75a7a3 |
GdmDBusWorkerManager *manager;
|
|
|
75a7a3 |
|
|
|
75a7a3 |
GHashTable *reauthentication_requests;
|
|
|
75a7a3 |
|
|
|
75a7a3 |
GdmSessionAuditor *auditor;
|
|
|
75a7a3 |
GdmSessionSettings *user_settings;
|
|
|
75a7a3 |
|
|
|
75a7a3 |
GDBusMethodInvocation *pending_invocation;
|
|
|
75a7a3 |
};
|
|
|
75a7a3 |
|
|
|
75a7a3 |
enum {
|
|
|
75a7a3 |
PROP_0,
|
|
|
75a7a3 |
PROP_SERVER_ADDRESS,
|
|
|
75a7a3 |
PROP_IS_REAUTH_SESSION,
|
|
|
75a7a3 |
};
|
|
|
75a7a3 |
|
|
|
75a7a3 |
static void gdm_session_worker_class_init (GdmSessionWorkerClass *klass);
|
|
|
75a7a3 |
static void gdm_session_worker_init (GdmSessionWorker *session_worker);
|
|
|
75a7a3 |
static void gdm_session_worker_finalize (GObject *object);
|
|
|
75a7a3 |
|
|
|
75a7a3 |
static void gdm_session_worker_set_environment_variable (GdmSessionWorker *worker,
|
|
|
75a7a3 |
const char *key,
|
|
|
75a7a3 |
const char *value);
|
|
|
75a7a3 |
|
|
|
75a7a3 |
static void queue_state_change (GdmSessionWorker *worker);
|
|
|
75a7a3 |
@@ -2057,67 +2056,63 @@ gdm_session_worker_start_session (GdmSessionWorker *worker,
|
|
|
75a7a3 |
g_assert (sizeof (GPid) <= sizeof (int));
|
|
|
75a7a3 |
|
|
|
75a7a3 |
g_debug ("GdmSessionWorker: state SESSION_STARTED");
|
|
|
75a7a3 |
worker->priv->state = GDM_SESSION_WORKER_STATE_SESSION_STARTED;
|
|
|
75a7a3 |
|
|
|
75a7a3 |
gdm_session_worker_watch_child (worker);
|
|
|
75a7a3 |
|
|
|
75a7a3 |
out:
|
|
|
75a7a3 |
if (error_code != PAM_SUCCESS) {
|
|
|
75a7a3 |
gdm_session_worker_uninitialize_pam (worker, error_code);
|
|
|
75a7a3 |
return FALSE;
|
|
|
75a7a3 |
}
|
|
|
75a7a3 |
|
|
|
75a7a3 |
return TRUE;
|
|
|
75a7a3 |
}
|
|
|
75a7a3 |
|
|
|
75a7a3 |
static gboolean
|
|
|
75a7a3 |
set_up_for_new_vt (GdmSessionWorker *worker)
|
|
|
75a7a3 |
{
|
|
|
75a7a3 |
int fd;
|
|
|
75a7a3 |
char vt_string[256], tty_string[256];
|
|
|
75a7a3 |
int session_vt = 0;
|
|
|
75a7a3 |
|
|
|
75a7a3 |
fd = open ("/dev/tty0", O_RDWR | O_NOCTTY);
|
|
|
75a7a3 |
|
|
|
75a7a3 |
if (fd < 0) {
|
|
|
75a7a3 |
g_debug ("GdmSessionWorker: couldn't open VT master: %m");
|
|
|
75a7a3 |
return FALSE;
|
|
|
75a7a3 |
}
|
|
|
75a7a3 |
|
|
|
75a7a3 |
- if (worker->priv->display_is_initial) {
|
|
|
75a7a3 |
- session_vt = atoi (GDM_INITIAL_VT);
|
|
|
75a7a3 |
- } else {
|
|
|
75a7a3 |
- if (ioctl(fd, VT_OPENQRY, &session_vt) < 0) {
|
|
|
75a7a3 |
- g_debug ("GdmSessionWorker: couldn't open new VT: %m");
|
|
|
75a7a3 |
- goto fail;
|
|
|
75a7a3 |
- }
|
|
|
75a7a3 |
+ if (ioctl(fd, VT_OPENQRY, &session_vt) < 0) {
|
|
|
75a7a3 |
+ g_debug ("GdmSessionWorker: couldn't open new VT: %m");
|
|
|
75a7a3 |
+ goto fail;
|
|
|
75a7a3 |
}
|
|
|
75a7a3 |
|
|
|
75a7a3 |
worker->priv->session_vt = session_vt;
|
|
|
75a7a3 |
|
|
|
75a7a3 |
close (fd);
|
|
|
75a7a3 |
fd = -1;
|
|
|
75a7a3 |
|
|
|
75a7a3 |
g_assert (session_vt > 0);
|
|
|
75a7a3 |
|
|
|
75a7a3 |
g_snprintf (vt_string, sizeof (vt_string), "%d", session_vt);
|
|
|
75a7a3 |
|
|
|
75a7a3 |
/* Set the VTNR. This is used by logind to configure a session in
|
|
|
75a7a3 |
* the logind-managed case, but it doesn't hurt to set it always.
|
|
|
75a7a3 |
* When logind gains support for XDG_VTNR=auto, we can make the
|
|
|
75a7a3 |
* OPENQRY and this whole path only used by the new VT code. */
|
|
|
75a7a3 |
gdm_session_worker_set_environment_variable (worker,
|
|
|
75a7a3 |
"XDG_VTNR",
|
|
|
75a7a3 |
vt_string);
|
|
|
75a7a3 |
|
|
|
75a7a3 |
g_snprintf (tty_string, 256, "/dev/tty%d", session_vt);
|
|
|
75a7a3 |
worker->priv->session_tty_fd = open (tty_string, O_RDWR | O_NOCTTY);
|
|
|
75a7a3 |
pam_set_item (worker->priv->pam_handle, PAM_TTY, tty_string);
|
|
|
75a7a3 |
|
|
|
75a7a3 |
return TRUE;
|
|
|
75a7a3 |
|
|
|
75a7a3 |
fail:
|
|
|
75a7a3 |
close (fd);
|
|
|
75a7a3 |
return FALSE;
|
|
|
75a7a3 |
}
|
|
|
75a7a3 |
|
|
|
75a7a3 |
@@ -2795,166 +2790,160 @@ gdm_session_worker_handle_establish_credentials (GdmDBusWorker *object,
|
|
|
75a7a3 |
GdmSessionWorker *worker = GDM_SESSION_WORKER (object);
|
|
|
75a7a3 |
validate_and_queue_state_change (worker, invocation, GDM_SESSION_WORKER_STATE_ACCREDITED);
|
|
|
75a7a3 |
|
|
|
75a7a3 |
if (!worker->priv->is_reauth_session) {
|
|
|
75a7a3 |
worker->priv->cred_flags = PAM_ESTABLISH_CRED;
|
|
|
75a7a3 |
} else {
|
|
|
75a7a3 |
worker->priv->cred_flags = PAM_REINITIALIZE_CRED;
|
|
|
75a7a3 |
}
|
|
|
75a7a3 |
|
|
|
75a7a3 |
return TRUE;
|
|
|
75a7a3 |
}
|
|
|
75a7a3 |
|
|
|
75a7a3 |
static gboolean
|
|
|
75a7a3 |
gdm_session_worker_handle_open (GdmDBusWorker *object,
|
|
|
75a7a3 |
GDBusMethodInvocation *invocation)
|
|
|
75a7a3 |
{
|
|
|
75a7a3 |
GdmSessionWorker *worker = GDM_SESSION_WORKER (object);
|
|
|
75a7a3 |
validate_and_queue_state_change (worker, invocation, GDM_SESSION_WORKER_STATE_ACCOUNT_DETAILS_SAVED);
|
|
|
75a7a3 |
return TRUE;
|
|
|
75a7a3 |
}
|
|
|
75a7a3 |
|
|
|
75a7a3 |
static gboolean
|
|
|
75a7a3 |
gdm_session_worker_handle_setup (GdmDBusWorker *object,
|
|
|
75a7a3 |
GDBusMethodInvocation *invocation,
|
|
|
75a7a3 |
const char *service,
|
|
|
75a7a3 |
const char *x11_display_name,
|
|
|
75a7a3 |
const char *x11_authority_file,
|
|
|
75a7a3 |
const char *console,
|
|
|
75a7a3 |
const char *seat_id,
|
|
|
75a7a3 |
const char *hostname,
|
|
|
75a7a3 |
- gboolean display_is_local,
|
|
|
75a7a3 |
- gboolean display_is_initial)
|
|
|
75a7a3 |
+ gboolean display_is_local)
|
|
|
75a7a3 |
{
|
|
|
75a7a3 |
GdmSessionWorker *worker = GDM_SESSION_WORKER (object);
|
|
|
75a7a3 |
validate_and_queue_state_change (worker, invocation, GDM_SESSION_WORKER_STATE_SETUP_COMPLETE);
|
|
|
75a7a3 |
|
|
|
75a7a3 |
worker->priv->service = g_strdup (service);
|
|
|
75a7a3 |
worker->priv->x11_display_name = g_strdup (x11_display_name);
|
|
|
75a7a3 |
worker->priv->x11_authority_file = g_strdup (x11_authority_file);
|
|
|
75a7a3 |
worker->priv->display_device = g_strdup (console);
|
|
|
75a7a3 |
worker->priv->display_seat_id = g_strdup (seat_id);
|
|
|
75a7a3 |
worker->priv->hostname = g_strdup (hostname);
|
|
|
75a7a3 |
worker->priv->display_is_local = display_is_local;
|
|
|
75a7a3 |
- worker->priv->display_is_initial = display_is_initial;
|
|
|
75a7a3 |
worker->priv->username = NULL;
|
|
|
75a7a3 |
|
|
|
75a7a3 |
g_signal_connect_swapped (worker->priv->user_settings,
|
|
|
75a7a3 |
"notify::language-name",
|
|
|
75a7a3 |
G_CALLBACK (on_saved_language_name_read),
|
|
|
75a7a3 |
worker);
|
|
|
75a7a3 |
|
|
|
75a7a3 |
g_signal_connect_swapped (worker->priv->user_settings,
|
|
|
75a7a3 |
"notify::session-name",
|
|
|
75a7a3 |
G_CALLBACK (on_saved_session_name_read),
|
|
|
75a7a3 |
worker);
|
|
|
75a7a3 |
return TRUE;
|
|
|
75a7a3 |
}
|
|
|
75a7a3 |
|
|
|
75a7a3 |
static gboolean
|
|
|
75a7a3 |
gdm_session_worker_handle_setup_for_user (GdmDBusWorker *object,
|
|
|
75a7a3 |
GDBusMethodInvocation *invocation,
|
|
|
75a7a3 |
const char *service,
|
|
|
75a7a3 |
const char *username,
|
|
|
75a7a3 |
const char *x11_display_name,
|
|
|
75a7a3 |
const char *x11_authority_file,
|
|
|
75a7a3 |
const char *console,
|
|
|
75a7a3 |
const char *seat_id,
|
|
|
75a7a3 |
const char *hostname,
|
|
|
75a7a3 |
- gboolean display_is_local,
|
|
|
75a7a3 |
- gboolean display_is_initial)
|
|
|
75a7a3 |
+ gboolean display_is_local)
|
|
|
75a7a3 |
{
|
|
|
75a7a3 |
GdmSessionWorker *worker = GDM_SESSION_WORKER (object);
|
|
|
75a7a3 |
|
|
|
75a7a3 |
if (!validate_state_change (worker, invocation, GDM_SESSION_WORKER_STATE_SETUP_COMPLETE))
|
|
|
75a7a3 |
return TRUE;
|
|
|
75a7a3 |
|
|
|
75a7a3 |
worker->priv->service = g_strdup (service);
|
|
|
75a7a3 |
worker->priv->x11_display_name = g_strdup (x11_display_name);
|
|
|
75a7a3 |
worker->priv->x11_authority_file = g_strdup (x11_authority_file);
|
|
|
75a7a3 |
worker->priv->display_device = g_strdup (console);
|
|
|
75a7a3 |
worker->priv->display_seat_id = g_strdup (seat_id);
|
|
|
75a7a3 |
worker->priv->hostname = g_strdup (hostname);
|
|
|
75a7a3 |
worker->priv->display_is_local = display_is_local;
|
|
|
75a7a3 |
- worker->priv->display_is_initial = display_is_initial;
|
|
|
75a7a3 |
worker->priv->username = g_strdup (username);
|
|
|
75a7a3 |
|
|
|
75a7a3 |
g_signal_connect_swapped (worker->priv->user_settings,
|
|
|
75a7a3 |
"notify::language-name",
|
|
|
75a7a3 |
G_CALLBACK (on_saved_language_name_read),
|
|
|
75a7a3 |
worker);
|
|
|
75a7a3 |
|
|
|
75a7a3 |
g_signal_connect_swapped (worker->priv->user_settings,
|
|
|
75a7a3 |
"notify::session-name",
|
|
|
75a7a3 |
G_CALLBACK (on_saved_session_name_read),
|
|
|
75a7a3 |
worker);
|
|
|
75a7a3 |
|
|
|
75a7a3 |
/* Load settings from accounts daemon before continuing
|
|
|
75a7a3 |
*/
|
|
|
75a7a3 |
worker->priv->pending_invocation = invocation;
|
|
|
75a7a3 |
if (gdm_session_settings_load (worker->priv->user_settings, username)) {
|
|
|
75a7a3 |
queue_state_change (worker);
|
|
|
75a7a3 |
} else {
|
|
|
75a7a3 |
g_signal_connect (G_OBJECT (worker->priv->user_settings),
|
|
|
75a7a3 |
"notify::is-loaded",
|
|
|
75a7a3 |
G_CALLBACK (on_settings_is_loaded_changed),
|
|
|
75a7a3 |
worker);
|
|
|
75a7a3 |
}
|
|
|
75a7a3 |
|
|
|
75a7a3 |
return TRUE;
|
|
|
75a7a3 |
}
|
|
|
75a7a3 |
|
|
|
75a7a3 |
static gboolean
|
|
|
75a7a3 |
gdm_session_worker_handle_setup_for_program (GdmDBusWorker *object,
|
|
|
75a7a3 |
GDBusMethodInvocation *invocation,
|
|
|
75a7a3 |
const char *service,
|
|
|
75a7a3 |
const char *username,
|
|
|
75a7a3 |
const char *x11_display_name,
|
|
|
75a7a3 |
const char *x11_authority_file,
|
|
|
75a7a3 |
const char *console,
|
|
|
75a7a3 |
const char *seat_id,
|
|
|
75a7a3 |
const char *hostname,
|
|
|
75a7a3 |
gboolean display_is_local,
|
|
|
75a7a3 |
- gboolean display_is_initial,
|
|
|
75a7a3 |
const char *log_file)
|
|
|
75a7a3 |
{
|
|
|
75a7a3 |
GdmSessionWorker *worker = GDM_SESSION_WORKER (object);
|
|
|
75a7a3 |
validate_and_queue_state_change (worker, invocation, GDM_SESSION_WORKER_STATE_SETUP_COMPLETE);
|
|
|
75a7a3 |
|
|
|
75a7a3 |
worker->priv->service = g_strdup (service);
|
|
|
75a7a3 |
worker->priv->x11_display_name = g_strdup (x11_display_name);
|
|
|
75a7a3 |
worker->priv->x11_authority_file = g_strdup (x11_authority_file);
|
|
|
75a7a3 |
worker->priv->display_device = g_strdup (console);
|
|
|
75a7a3 |
worker->priv->display_seat_id = g_strdup (seat_id);
|
|
|
75a7a3 |
worker->priv->hostname = g_strdup (hostname);
|
|
|
75a7a3 |
worker->priv->display_is_local = display_is_local;
|
|
|
75a7a3 |
- worker->priv->display_is_initial = display_is_initial;
|
|
|
75a7a3 |
worker->priv->username = g_strdup (username);
|
|
|
75a7a3 |
worker->priv->log_file = g_strdup (log_file);
|
|
|
75a7a3 |
worker->priv->is_program_session = TRUE;
|
|
|
75a7a3 |
|
|
|
75a7a3 |
return TRUE;
|
|
|
75a7a3 |
}
|
|
|
75a7a3 |
|
|
|
75a7a3 |
static gboolean
|
|
|
75a7a3 |
gdm_session_worker_handle_start_program (GdmDBusWorker *object,
|
|
|
75a7a3 |
GDBusMethodInvocation *invocation,
|
|
|
75a7a3 |
const char *text)
|
|
|
75a7a3 |
{
|
|
|
75a7a3 |
GdmSessionWorker *worker = GDM_SESSION_WORKER (object);
|
|
|
75a7a3 |
GError *parse_error = NULL;
|
|
|
75a7a3 |
validate_state_change (worker, invocation, GDM_SESSION_WORKER_STATE_SESSION_STARTED);
|
|
|
75a7a3 |
|
|
|
75a7a3 |
if (worker->priv->is_reauth_session) {
|
|
|
75a7a3 |
g_dbus_method_invocation_return_error (invocation,
|
|
|
75a7a3 |
GDM_SESSION_WORKER_ERROR,
|
|
|
75a7a3 |
GDM_SESSION_WORKER_ERROR_IN_REAUTH_SESSION,
|
|
|
75a7a3 |
"Cannot start a program while in a reauth session");
|
|
|
75a7a3 |
return TRUE;
|
|
|
75a7a3 |
}
|
|
|
75a7a3 |
|
|
|
75a7a3 |
g_debug ("GdmSessionWorker: start program: %s", text);
|
|
|
75a7a3 |
|
|
|
75a7a3 |
g_clear_pointer (&worker->priv->arguments, (GDestroyNotify) g_strfreev);
|
|
|
75a7a3 |
if (! g_shell_parse_argv (text, NULL, &worker->priv->arguments, &parse_error)) {
|
|
|
75a7a3 |
g_dbus_method_invocation_take_error (invocation, parse_error);
|
|
|
75a7a3 |
return TRUE;
|
|
|
75a7a3 |
diff --git a/daemon/gdm-session-worker.xml b/daemon/gdm-session-worker.xml
|
|
|
75a7a3 |
index 9f6d8b35..f7d1dc2d 100644
|
|
|
75a7a3 |
--- a/daemon/gdm-session-worker.xml
|
|
|
75a7a3 |
+++ b/daemon/gdm-session-worker.xml
|
|
|
75a7a3 |
@@ -5,83 +5,80 @@
|
|
|
75a7a3 |
<method name="Authorize" />
|
|
|
75a7a3 |
<method name="EstablishCredentials" />
|
|
|
75a7a3 |
<method name="Open">
|
|
|
75a7a3 |
<arg name="session_id" direction="out" type="s"/>
|
|
|
75a7a3 |
</method>
|
|
|
75a7a3 |
<method name="SetLanguageName">
|
|
|
75a7a3 |
<arg name="language" direction="in" type="s"/>
|
|
|
75a7a3 |
</method>
|
|
|
75a7a3 |
<method name="SetSessionName">
|
|
|
75a7a3 |
<arg name="session_name" direction="in" type="s" />
|
|
|
75a7a3 |
</method>
|
|
|
75a7a3 |
<method name="SetSessionDisplayMode">
|
|
|
75a7a3 |
<arg name="mode" direction="in" type="s"/>
|
|
|
75a7a3 |
</method>
|
|
|
75a7a3 |
<method name="SetEnvironmentVariable">
|
|
|
75a7a3 |
<arg name="name" direction="in" type="s"/>
|
|
|
75a7a3 |
<arg name="value" direction="in" type="s"/>
|
|
|
75a7a3 |
</method>
|
|
|
75a7a3 |
<method name="StartProgram">
|
|
|
75a7a3 |
<arg name="command" direction="in" type="s"/>
|
|
|
75a7a3 |
<arg name="child_pid" direction="out" type="i"/>
|
|
|
75a7a3 |
</method>
|
|
|
75a7a3 |
<method name="Setup">
|
|
|
75a7a3 |
<arg name="service_name" direction="in" type="s"/>
|
|
|
75a7a3 |
<arg name="x11_display_name" direction="in" type="s"/>
|
|
|
75a7a3 |
<arg name="x11_authority_file" direction="in" type="s"/>
|
|
|
75a7a3 |
<arg name="display_device" direction="in" type="s"/>
|
|
|
75a7a3 |
<arg name="display_seat" direction="in" type="s"/>
|
|
|
75a7a3 |
<arg name="hostname" direction="in" type="s"/>
|
|
|
75a7a3 |
<arg name="display_is_local" direction="in" type="b"/>
|
|
|
75a7a3 |
- <arg name="display_is_initial" direction="in" type="b"/>
|
|
|
75a7a3 |
</method>
|
|
|
75a7a3 |
<method name="SetupForUser">
|
|
|
75a7a3 |
<arg name="service_name" direction="in" type="s"/>
|
|
|
75a7a3 |
<arg name="user_name" direction="in" type="s"/>
|
|
|
75a7a3 |
<arg name="x11_display_name" direction="in" type="s"/>
|
|
|
75a7a3 |
<arg name="x11_authority_file" direction="in" type="s"/>
|
|
|
75a7a3 |
<arg name="display_device" direction="in" type="s"/>
|
|
|
75a7a3 |
<arg name="display_seat" direction="in" type="s"/>
|
|
|
75a7a3 |
<arg name="hostname" direction="in" type="s"/>
|
|
|
75a7a3 |
<arg name="display_is_local" direction="in" type="b"/>
|
|
|
75a7a3 |
- <arg name="display_is_initial" direction="in" type="b"/>
|
|
|
75a7a3 |
</method>
|
|
|
75a7a3 |
<method name="SetupForProgram">
|
|
|
75a7a3 |
<arg name="service_name" direction="in" type="s"/>
|
|
|
75a7a3 |
<arg name="user_name" direction="in" type="s"/>
|
|
|
75a7a3 |
<arg name="x11_display_name" direction="in" type="s"/>
|
|
|
75a7a3 |
<arg name="x11_authority_file" direction="in" type="s"/>
|
|
|
75a7a3 |
<arg name="display_device" direction="in" type="s"/>
|
|
|
75a7a3 |
<arg name="display_seat" direction="in" type="s"/>
|
|
|
75a7a3 |
<arg name="hostname" direction="in" type="s"/>
|
|
|
75a7a3 |
<arg name="display_is_local" direction="in" type="b"/>
|
|
|
75a7a3 |
- <arg name="display_is_initial" direction="in" type="b"/>
|
|
|
75a7a3 |
<arg name="log_file" direction="in" type="s"/>
|
|
|
75a7a3 |
</method>
|
|
|
75a7a3 |
<method name="StartReauthentication">
|
|
|
75a7a3 |
<arg name="pid_of_caller" direction="in" type="i"/>
|
|
|
75a7a3 |
<arg name="uid_of_caller" direction="in" type="i"/>
|
|
|
75a7a3 |
<arg name="address" direction="out" type="s"/>
|
|
|
75a7a3 |
</method>
|
|
|
75a7a3 |
|
|
|
75a7a3 |
<signal name="SessionExited">
|
|
|
75a7a3 |
<arg name="service_name" type="s" />
|
|
|
75a7a3 |
|
|
|
75a7a3 |
signal. Use macros in sys/wait.h to handle it. -->
|
|
|
75a7a3 |
<arg name="status" type="i" />
|
|
|
75a7a3 |
</signal>
|
|
|
75a7a3 |
<signal name="SavedLanguageNameRead">
|
|
|
75a7a3 |
<arg name="language_name" type="s"/>
|
|
|
75a7a3 |
</signal>
|
|
|
75a7a3 |
<signal name="SavedSessionNameRead">
|
|
|
75a7a3 |
<arg name="session_name" type="s"/>
|
|
|
75a7a3 |
</signal>
|
|
|
75a7a3 |
<signal name="UsernameChanged">
|
|
|
75a7a3 |
<arg name="new_username" type="s"/>
|
|
|
75a7a3 |
</signal>
|
|
|
75a7a3 |
<signal name="Reauthenticated">
|
|
|
75a7a3 |
<arg name="service_name" type="s"/>
|
|
|
75a7a3 |
</signal>
|
|
|
75a7a3 |
<signal name="CancelPendingQuery">
|
|
|
75a7a3 |
</signal>
|
|
|
75a7a3 |
</interface>
|
|
|
75a7a3 |
</node>
|
|
|
75a7a3 |
diff --git a/daemon/gdm-session.c b/daemon/gdm-session.c
|
|
|
75a7a3 |
index e69291fb..1dfbef64 100644
|
|
|
75a7a3 |
--- a/daemon/gdm-session.c
|
|
|
75a7a3 |
+++ b/daemon/gdm-session.c
|
|
|
75a7a3 |
@@ -103,74 +103,72 @@ struct _GdmSessionPrivate
|
|
|
75a7a3 |
GdmDBusUserVerifier *user_verifier_interface;
|
|
|
75a7a3 |
GdmDBusGreeter *greeter_interface;
|
|
|
75a7a3 |
GdmDBusRemoteGreeter *remote_greeter_interface;
|
|
|
75a7a3 |
GdmDBusChooser *chooser_interface;
|
|
|
75a7a3 |
|
|
|
75a7a3 |
GList *pending_worker_connections;
|
|
|
75a7a3 |
GList *outside_connections;
|
|
|
75a7a3 |
|
|
|
75a7a3 |
GPid session_pid;
|
|
|
75a7a3 |
|
|
|
75a7a3 |
/* object lifetime scope */
|
|
|
75a7a3 |
char *session_type;
|
|
|
75a7a3 |
char *display_name;
|
|
|
75a7a3 |
char *display_hostname;
|
|
|
75a7a3 |
char *display_device;
|
|
|
75a7a3 |
char *display_seat_id;
|
|
|
75a7a3 |
char *display_x11_authority_file;
|
|
|
75a7a3 |
gboolean display_is_local;
|
|
|
75a7a3 |
|
|
|
75a7a3 |
GdmSessionVerificationMode verification_mode;
|
|
|
75a7a3 |
|
|
|
75a7a3 |
uid_t allowed_user;
|
|
|
75a7a3 |
|
|
|
75a7a3 |
char *fallback_session_name;
|
|
|
75a7a3 |
|
|
|
75a7a3 |
GDBusServer *worker_server;
|
|
|
75a7a3 |
GDBusServer *outside_server;
|
|
|
75a7a3 |
GHashTable *environment;
|
|
|
75a7a3 |
|
|
|
75a7a3 |
guint32 is_program_session : 1;
|
|
|
75a7a3 |
- guint32 display_is_initial : 1;
|
|
|
75a7a3 |
#ifdef ENABLE_WAYLAND_SUPPORT
|
|
|
75a7a3 |
guint32 ignore_wayland : 1;
|
|
|
75a7a3 |
#endif
|
|
|
75a7a3 |
};
|
|
|
75a7a3 |
|
|
|
75a7a3 |
enum {
|
|
|
75a7a3 |
PROP_0,
|
|
|
75a7a3 |
PROP_VERIFICATION_MODE,
|
|
|
75a7a3 |
PROP_ALLOWED_USER,
|
|
|
75a7a3 |
PROP_DISPLAY_NAME,
|
|
|
75a7a3 |
PROP_DISPLAY_HOSTNAME,
|
|
|
75a7a3 |
PROP_DISPLAY_IS_LOCAL,
|
|
|
75a7a3 |
- PROP_DISPLAY_IS_INITIAL,
|
|
|
75a7a3 |
PROP_SESSION_TYPE,
|
|
|
75a7a3 |
PROP_DISPLAY_DEVICE,
|
|
|
75a7a3 |
PROP_DISPLAY_SEAT_ID,
|
|
|
75a7a3 |
PROP_DISPLAY_X11_AUTHORITY_FILE,
|
|
|
75a7a3 |
PROP_USER_X11_AUTHORITY_FILE,
|
|
|
75a7a3 |
PROP_CONVERSATION_ENVIRONMENT,
|
|
|
75a7a3 |
#ifdef ENABLE_WAYLAND_SUPPORT
|
|
|
75a7a3 |
PROP_IGNORE_WAYLAND,
|
|
|
75a7a3 |
#endif
|
|
|
75a7a3 |
};
|
|
|
75a7a3 |
|
|
|
75a7a3 |
enum {
|
|
|
75a7a3 |
CONVERSATION_STARTED = 0,
|
|
|
75a7a3 |
CONVERSATION_STOPPED,
|
|
|
75a7a3 |
SETUP_COMPLETE,
|
|
|
75a7a3 |
CANCELLED,
|
|
|
75a7a3 |
HOSTNAME_SELECTED,
|
|
|
75a7a3 |
CLIENT_REJECTED,
|
|
|
75a7a3 |
CLIENT_CONNECTED,
|
|
|
75a7a3 |
CLIENT_DISCONNECTED,
|
|
|
75a7a3 |
CLIENT_READY_FOR_SESSION_TO_START,
|
|
|
75a7a3 |
DISCONNECTED,
|
|
|
75a7a3 |
AUTHENTICATION_FAILED,
|
|
|
75a7a3 |
VERIFICATION_COMPLETE,
|
|
|
75a7a3 |
SESSION_OPENED,
|
|
|
75a7a3 |
SESSION_STARTED,
|
|
|
75a7a3 |
SESSION_START_FAILED,
|
|
|
75a7a3 |
SESSION_EXITED,
|
|
|
75a7a3 |
SESSION_DIED,
|
|
|
75a7a3 |
REAUTHENTICATION_STARTED,
|
|
|
75a7a3 |
@@ -2118,61 +2116,60 @@ send_setup (GdmSession *self,
|
|
|
75a7a3 |
display_hostname = "";
|
|
|
75a7a3 |
}
|
|
|
75a7a3 |
if (self->priv->display_device != NULL) {
|
|
|
75a7a3 |
display_device = self->priv->display_device;
|
|
|
75a7a3 |
} else {
|
|
|
75a7a3 |
display_device = "";
|
|
|
75a7a3 |
}
|
|
|
75a7a3 |
if (self->priv->display_seat_id != NULL) {
|
|
|
75a7a3 |
display_seat_id = self->priv->display_seat_id;
|
|
|
75a7a3 |
} else {
|
|
|
75a7a3 |
display_seat_id = "";
|
|
|
75a7a3 |
}
|
|
|
75a7a3 |
if (self->priv->display_x11_authority_file != NULL) {
|
|
|
75a7a3 |
display_x11_authority_file = self->priv->display_x11_authority_file;
|
|
|
75a7a3 |
} else {
|
|
|
75a7a3 |
display_x11_authority_file = "";
|
|
|
75a7a3 |
}
|
|
|
75a7a3 |
|
|
|
75a7a3 |
g_debug ("GdmSession: Beginning setup");
|
|
|
75a7a3 |
|
|
|
75a7a3 |
conversation = find_conversation_by_name (self, service_name);
|
|
|
75a7a3 |
if (conversation != NULL) {
|
|
|
75a7a3 |
gdm_dbus_worker_call_setup (conversation->worker_proxy,
|
|
|
75a7a3 |
service_name,
|
|
|
75a7a3 |
display_name,
|
|
|
75a7a3 |
display_x11_authority_file,
|
|
|
75a7a3 |
display_device,
|
|
|
75a7a3 |
display_seat_id,
|
|
|
75a7a3 |
display_hostname,
|
|
|
75a7a3 |
self->priv->display_is_local,
|
|
|
75a7a3 |
- self->priv->display_is_initial,
|
|
|
75a7a3 |
conversation->worker_cancellable,
|
|
|
75a7a3 |
(GAsyncReadyCallback) on_setup_complete_cb,
|
|
|
75a7a3 |
conversation);
|
|
|
75a7a3 |
}
|
|
|
75a7a3 |
}
|
|
|
75a7a3 |
|
|
|
75a7a3 |
static void
|
|
|
75a7a3 |
send_setup_for_user (GdmSession *self,
|
|
|
75a7a3 |
const char *service_name)
|
|
|
75a7a3 |
{
|
|
|
75a7a3 |
const char *display_name;
|
|
|
75a7a3 |
const char *display_device;
|
|
|
75a7a3 |
const char *display_seat_id;
|
|
|
75a7a3 |
const char *display_hostname;
|
|
|
75a7a3 |
const char *display_x11_authority_file;
|
|
|
75a7a3 |
const char *selected_user;
|
|
|
75a7a3 |
GdmSessionConversation *conversation;
|
|
|
75a7a3 |
|
|
|
75a7a3 |
g_assert (service_name != NULL);
|
|
|
75a7a3 |
|
|
|
75a7a3 |
conversation = find_conversation_by_name (self, service_name);
|
|
|
75a7a3 |
|
|
|
75a7a3 |
if (self->priv->display_name != NULL) {
|
|
|
75a7a3 |
display_name = self->priv->display_name;
|
|
|
75a7a3 |
} else {
|
|
|
75a7a3 |
display_name = "";
|
|
|
75a7a3 |
}
|
|
|
75a7a3 |
if (self->priv->display_hostname != NULL) {
|
|
|
75a7a3 |
display_hostname = self->priv->display_hostname;
|
|
|
75a7a3 |
} else {
|
|
|
75a7a3 |
@@ -2184,122 +2181,120 @@ send_setup_for_user (GdmSession *self,
|
|
|
75a7a3 |
display_device = "";
|
|
|
75a7a3 |
}
|
|
|
75a7a3 |
if (self->priv->display_seat_id != NULL) {
|
|
|
75a7a3 |
display_seat_id = self->priv->display_seat_id;
|
|
|
75a7a3 |
} else {
|
|
|
75a7a3 |
display_seat_id = "";
|
|
|
75a7a3 |
}
|
|
|
75a7a3 |
if (self->priv->display_x11_authority_file != NULL) {
|
|
|
75a7a3 |
display_x11_authority_file = self->priv->display_x11_authority_file;
|
|
|
75a7a3 |
} else {
|
|
|
75a7a3 |
display_x11_authority_file = "";
|
|
|
75a7a3 |
}
|
|
|
75a7a3 |
if (self->priv->selected_user != NULL) {
|
|
|
75a7a3 |
selected_user = self->priv->selected_user;
|
|
|
75a7a3 |
} else {
|
|
|
75a7a3 |
selected_user = "";
|
|
|
75a7a3 |
}
|
|
|
75a7a3 |
|
|
|
75a7a3 |
g_debug ("GdmSession: Beginning setup for user %s", self->priv->selected_user);
|
|
|
75a7a3 |
|
|
|
75a7a3 |
if (conversation != NULL) {
|
|
|
75a7a3 |
gdm_dbus_worker_call_setup_for_user (conversation->worker_proxy,
|
|
|
75a7a3 |
service_name,
|
|
|
75a7a3 |
selected_user,
|
|
|
75a7a3 |
display_name,
|
|
|
75a7a3 |
display_x11_authority_file,
|
|
|
75a7a3 |
display_device,
|
|
|
75a7a3 |
display_seat_id,
|
|
|
75a7a3 |
display_hostname,
|
|
|
75a7a3 |
self->priv->display_is_local,
|
|
|
75a7a3 |
- self->priv->display_is_initial,
|
|
|
75a7a3 |
conversation->worker_cancellable,
|
|
|
75a7a3 |
(GAsyncReadyCallback) on_setup_complete_cb,
|
|
|
75a7a3 |
conversation);
|
|
|
75a7a3 |
}
|
|
|
75a7a3 |
}
|
|
|
75a7a3 |
|
|
|
75a7a3 |
static void
|
|
|
75a7a3 |
send_setup_for_program (GdmSession *self,
|
|
|
75a7a3 |
const char *service_name,
|
|
|
75a7a3 |
const char *username,
|
|
|
75a7a3 |
const char *log_file)
|
|
|
75a7a3 |
{
|
|
|
75a7a3 |
const char *display_name;
|
|
|
75a7a3 |
const char *display_device;
|
|
|
75a7a3 |
const char *display_seat_id;
|
|
|
75a7a3 |
const char *display_hostname;
|
|
|
75a7a3 |
const char *display_x11_authority_file;
|
|
|
75a7a3 |
GdmSessionConversation *conversation;
|
|
|
75a7a3 |
|
|
|
75a7a3 |
g_assert (service_name != NULL);
|
|
|
75a7a3 |
|
|
|
75a7a3 |
if (self->priv->display_name != NULL) {
|
|
|
75a7a3 |
display_name = self->priv->display_name;
|
|
|
75a7a3 |
} else {
|
|
|
75a7a3 |
display_name = "";
|
|
|
75a7a3 |
}
|
|
|
75a7a3 |
if (self->priv->display_hostname != NULL) {
|
|
|
75a7a3 |
display_hostname = self->priv->display_hostname;
|
|
|
75a7a3 |
} else {
|
|
|
75a7a3 |
display_hostname = "";
|
|
|
75a7a3 |
}
|
|
|
75a7a3 |
if (self->priv->display_device != NULL) {
|
|
|
75a7a3 |
display_device = self->priv->display_device;
|
|
|
75a7a3 |
} else {
|
|
|
75a7a3 |
display_device = "";
|
|
|
75a7a3 |
}
|
|
|
75a7a3 |
if (self->priv->display_seat_id != NULL) {
|
|
|
75a7a3 |
display_seat_id = self->priv->display_seat_id;
|
|
|
75a7a3 |
} else {
|
|
|
75a7a3 |
display_seat_id = "";
|
|
|
75a7a3 |
}
|
|
|
75a7a3 |
if (self->priv->display_x11_authority_file != NULL) {
|
|
|
75a7a3 |
display_x11_authority_file = self->priv->display_x11_authority_file;
|
|
|
75a7a3 |
} else {
|
|
|
75a7a3 |
display_x11_authority_file = "";
|
|
|
75a7a3 |
}
|
|
|
75a7a3 |
|
|
|
75a7a3 |
g_debug ("GdmSession: Beginning setup for session for program using PAM service %s", service_name);
|
|
|
75a7a3 |
|
|
|
75a7a3 |
conversation = find_conversation_by_name (self, service_name);
|
|
|
75a7a3 |
if (conversation != NULL) {
|
|
|
75a7a3 |
gdm_dbus_worker_call_setup_for_program (conversation->worker_proxy,
|
|
|
75a7a3 |
service_name,
|
|
|
75a7a3 |
username,
|
|
|
75a7a3 |
display_name,
|
|
|
75a7a3 |
display_x11_authority_file,
|
|
|
75a7a3 |
display_device,
|
|
|
75a7a3 |
display_seat_id,
|
|
|
75a7a3 |
display_hostname,
|
|
|
75a7a3 |
self->priv->display_is_local,
|
|
|
75a7a3 |
- self->priv->display_is_initial,
|
|
|
75a7a3 |
log_file,
|
|
|
75a7a3 |
conversation->worker_cancellable,
|
|
|
75a7a3 |
(GAsyncReadyCallback) on_setup_complete_cb,
|
|
|
75a7a3 |
conversation);
|
|
|
75a7a3 |
}
|
|
|
75a7a3 |
}
|
|
|
75a7a3 |
|
|
|
75a7a3 |
void
|
|
|
75a7a3 |
gdm_session_setup (GdmSession *self,
|
|
|
75a7a3 |
const char *service_name)
|
|
|
75a7a3 |
{
|
|
|
75a7a3 |
|
|
|
75a7a3 |
g_return_if_fail (GDM_IS_SESSION (self));
|
|
|
75a7a3 |
|
|
|
75a7a3 |
send_setup (self, service_name);
|
|
|
75a7a3 |
gdm_session_defaults_changed (self);
|
|
|
75a7a3 |
}
|
|
|
75a7a3 |
|
|
|
75a7a3 |
|
|
|
75a7a3 |
void
|
|
|
75a7a3 |
gdm_session_setup_for_user (GdmSession *self,
|
|
|
75a7a3 |
const char *service_name,
|
|
|
75a7a3 |
const char *username)
|
|
|
75a7a3 |
{
|
|
|
75a7a3 |
|
|
|
75a7a3 |
g_return_if_fail (GDM_IS_SESSION (self));
|
|
|
75a7a3 |
g_return_if_fail (username != NULL);
|
|
|
75a7a3 |
|
|
|
75a7a3 |
gdm_session_select_user (self, username);
|
|
|
75a7a3 |
|
|
|
75a7a3 |
@@ -3217,67 +3212,60 @@ set_display_seat_id (GdmSession *self,
|
|
|
75a7a3 |
const char *name)
|
|
|
75a7a3 |
{
|
|
|
75a7a3 |
g_free (self->priv->display_seat_id);
|
|
|
75a7a3 |
self->priv->display_seat_id = g_strdup (name);
|
|
|
75a7a3 |
}
|
|
|
75a7a3 |
|
|
|
75a7a3 |
static void
|
|
|
75a7a3 |
set_user_x11_authority_file (GdmSession *self,
|
|
|
75a7a3 |
const char *name)
|
|
|
75a7a3 |
{
|
|
|
75a7a3 |
g_free (self->priv->user_x11_authority_file);
|
|
|
75a7a3 |
self->priv->user_x11_authority_file = g_strdup (name);
|
|
|
75a7a3 |
}
|
|
|
75a7a3 |
|
|
|
75a7a3 |
static void
|
|
|
75a7a3 |
set_display_x11_authority_file (GdmSession *self,
|
|
|
75a7a3 |
const char *name)
|
|
|
75a7a3 |
{
|
|
|
75a7a3 |
g_free (self->priv->display_x11_authority_file);
|
|
|
75a7a3 |
self->priv->display_x11_authority_file = g_strdup (name);
|
|
|
75a7a3 |
}
|
|
|
75a7a3 |
|
|
|
75a7a3 |
static void
|
|
|
75a7a3 |
set_display_is_local (GdmSession *self,
|
|
|
75a7a3 |
gboolean is_local)
|
|
|
75a7a3 |
{
|
|
|
75a7a3 |
self->priv->display_is_local = is_local;
|
|
|
75a7a3 |
}
|
|
|
75a7a3 |
|
|
|
75a7a3 |
static void
|
|
|
75a7a3 |
-set_display_is_initial (GdmSession *self,
|
|
|
75a7a3 |
- gboolean is_initial)
|
|
|
75a7a3 |
-{
|
|
|
75a7a3 |
- self->priv->display_is_initial = is_initial;
|
|
|
75a7a3 |
-}
|
|
|
75a7a3 |
-
|
|
|
75a7a3 |
-static void
|
|
|
75a7a3 |
set_verification_mode (GdmSession *self,
|
|
|
75a7a3 |
GdmSessionVerificationMode verification_mode)
|
|
|
75a7a3 |
{
|
|
|
75a7a3 |
self->priv->verification_mode = verification_mode;
|
|
|
75a7a3 |
}
|
|
|
75a7a3 |
|
|
|
75a7a3 |
static void
|
|
|
75a7a3 |
set_allowed_user (GdmSession *self,
|
|
|
75a7a3 |
uid_t allowed_user)
|
|
|
75a7a3 |
{
|
|
|
75a7a3 |
self->priv->allowed_user = allowed_user;
|
|
|
75a7a3 |
}
|
|
|
75a7a3 |
|
|
|
75a7a3 |
static void
|
|
|
75a7a3 |
set_conversation_environment (GdmSession *self,
|
|
|
75a7a3 |
char **environment)
|
|
|
75a7a3 |
{
|
|
|
75a7a3 |
g_strfreev (self->priv->conversation_environment);
|
|
|
75a7a3 |
self->priv->conversation_environment = g_strdupv (environment);
|
|
|
75a7a3 |
}
|
|
|
75a7a3 |
|
|
|
75a7a3 |
static void
|
|
|
75a7a3 |
set_session_type (GdmSession *self,
|
|
|
75a7a3 |
const char *session_type)
|
|
|
75a7a3 |
{
|
|
|
75a7a3 |
|
|
|
75a7a3 |
if (g_strcmp0 (self->priv->session_type, session_type) != 0) {
|
|
|
75a7a3 |
g_debug ("GdmSession: setting session to type '%s'", session_type? session_type : "");
|
|
|
75a7a3 |
g_free (self->priv->session_type);
|
|
|
75a7a3 |
self->priv->session_type = g_strdup (session_type);
|
|
|
75a7a3 |
@@ -3292,121 +3280,115 @@ gdm_session_set_property (GObject *object,
|
|
|
75a7a3 |
{
|
|
|
75a7a3 |
GdmSession *self;
|
|
|
75a7a3 |
|
|
|
75a7a3 |
self = GDM_SESSION (object);
|
|
|
75a7a3 |
|
|
|
75a7a3 |
switch (prop_id) {
|
|
|
75a7a3 |
case PROP_SESSION_TYPE:
|
|
|
75a7a3 |
set_session_type (self, g_value_get_string (value));
|
|
|
75a7a3 |
break;
|
|
|
75a7a3 |
case PROP_DISPLAY_NAME:
|
|
|
75a7a3 |
set_display_name (self, g_value_get_string (value));
|
|
|
75a7a3 |
break;
|
|
|
75a7a3 |
case PROP_DISPLAY_HOSTNAME:
|
|
|
75a7a3 |
set_display_hostname (self, g_value_get_string (value));
|
|
|
75a7a3 |
break;
|
|
|
75a7a3 |
case PROP_DISPLAY_DEVICE:
|
|
|
75a7a3 |
set_display_device (self, g_value_get_string (value));
|
|
|
75a7a3 |
break;
|
|
|
75a7a3 |
case PROP_DISPLAY_SEAT_ID:
|
|
|
75a7a3 |
set_display_seat_id (self, g_value_get_string (value));
|
|
|
75a7a3 |
break;
|
|
|
75a7a3 |
case PROP_USER_X11_AUTHORITY_FILE:
|
|
|
75a7a3 |
set_user_x11_authority_file (self, g_value_get_string (value));
|
|
|
75a7a3 |
break;
|
|
|
75a7a3 |
case PROP_DISPLAY_X11_AUTHORITY_FILE:
|
|
|
75a7a3 |
set_display_x11_authority_file (self, g_value_get_string (value));
|
|
|
75a7a3 |
break;
|
|
|
75a7a3 |
case PROP_DISPLAY_IS_LOCAL:
|
|
|
75a7a3 |
set_display_is_local (self, g_value_get_boolean (value));
|
|
|
75a7a3 |
break;
|
|
|
75a7a3 |
- case PROP_DISPLAY_IS_INITIAL:
|
|
|
75a7a3 |
- set_display_is_initial (self, g_value_get_boolean (value));
|
|
|
75a7a3 |
- break;
|
|
|
75a7a3 |
case PROP_VERIFICATION_MODE:
|
|
|
75a7a3 |
set_verification_mode (self, g_value_get_enum (value));
|
|
|
75a7a3 |
break;
|
|
|
75a7a3 |
case PROP_ALLOWED_USER:
|
|
|
75a7a3 |
set_allowed_user (self, g_value_get_uint (value));
|
|
|
75a7a3 |
break;
|
|
|
75a7a3 |
case PROP_CONVERSATION_ENVIRONMENT:
|
|
|
75a7a3 |
set_conversation_environment (self, g_value_get_pointer (value));
|
|
|
75a7a3 |
break;
|
|
|
75a7a3 |
#ifdef ENABLE_WAYLAND_SUPPORT
|
|
|
75a7a3 |
case PROP_IGNORE_WAYLAND:
|
|
|
75a7a3 |
gdm_session_set_ignore_wayland (self, g_value_get_boolean (value));
|
|
|
75a7a3 |
break;
|
|
|
75a7a3 |
#endif
|
|
|
75a7a3 |
default:
|
|
|
75a7a3 |
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
|
|
75a7a3 |
break;
|
|
|
75a7a3 |
}
|
|
|
75a7a3 |
}
|
|
|
75a7a3 |
|
|
|
75a7a3 |
static void
|
|
|
75a7a3 |
gdm_session_get_property (GObject *object,
|
|
|
75a7a3 |
guint prop_id,
|
|
|
75a7a3 |
GValue *value,
|
|
|
75a7a3 |
GParamSpec *pspec)
|
|
|
75a7a3 |
{
|
|
|
75a7a3 |
GdmSession *self;
|
|
|
75a7a3 |
|
|
|
75a7a3 |
self = GDM_SESSION (object);
|
|
|
75a7a3 |
|
|
|
75a7a3 |
switch (prop_id) {
|
|
|
75a7a3 |
case PROP_SESSION_TYPE:
|
|
|
75a7a3 |
g_value_set_string (value, self->priv->session_type);
|
|
|
75a7a3 |
break;
|
|
|
75a7a3 |
case PROP_DISPLAY_NAME:
|
|
|
75a7a3 |
g_value_set_string (value, self->priv->display_name);
|
|
|
75a7a3 |
break;
|
|
|
75a7a3 |
case PROP_DISPLAY_HOSTNAME:
|
|
|
75a7a3 |
g_value_set_string (value, self->priv->display_hostname);
|
|
|
75a7a3 |
break;
|
|
|
75a7a3 |
case PROP_DISPLAY_DEVICE:
|
|
|
75a7a3 |
g_value_set_string (value, self->priv->display_device);
|
|
|
75a7a3 |
break;
|
|
|
75a7a3 |
case PROP_DISPLAY_SEAT_ID:
|
|
|
75a7a3 |
g_value_set_string (value, self->priv->display_seat_id);
|
|
|
75a7a3 |
break;
|
|
|
75a7a3 |
case PROP_USER_X11_AUTHORITY_FILE:
|
|
|
75a7a3 |
g_value_set_string (value, self->priv->user_x11_authority_file);
|
|
|
75a7a3 |
break;
|
|
|
75a7a3 |
case PROP_DISPLAY_X11_AUTHORITY_FILE:
|
|
|
75a7a3 |
g_value_set_string (value, self->priv->display_x11_authority_file);
|
|
|
75a7a3 |
break;
|
|
|
75a7a3 |
case PROP_DISPLAY_IS_LOCAL:
|
|
|
75a7a3 |
g_value_set_boolean (value, self->priv->display_is_local);
|
|
|
75a7a3 |
break;
|
|
|
75a7a3 |
- case PROP_DISPLAY_IS_INITIAL:
|
|
|
75a7a3 |
- g_value_set_boolean (value, self->priv->display_is_initial);
|
|
|
75a7a3 |
- break;
|
|
|
75a7a3 |
case PROP_VERIFICATION_MODE:
|
|
|
75a7a3 |
g_value_set_enum (value, self->priv->verification_mode);
|
|
|
75a7a3 |
break;
|
|
|
75a7a3 |
case PROP_ALLOWED_USER:
|
|
|
75a7a3 |
g_value_set_uint (value, self->priv->allowed_user);
|
|
|
75a7a3 |
break;
|
|
|
75a7a3 |
case PROP_CONVERSATION_ENVIRONMENT:
|
|
|
75a7a3 |
g_value_set_pointer (value, self->priv->environment);
|
|
|
75a7a3 |
break;
|
|
|
75a7a3 |
#ifdef ENABLE_WAYLAND_SUPPORT
|
|
|
75a7a3 |
case PROP_IGNORE_WAYLAND:
|
|
|
75a7a3 |
g_value_set_boolean (value, self->priv->ignore_wayland);
|
|
|
75a7a3 |
break;
|
|
|
75a7a3 |
#endif
|
|
|
75a7a3 |
default:
|
|
|
75a7a3 |
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
|
|
75a7a3 |
break;
|
|
|
75a7a3 |
}
|
|
|
75a7a3 |
}
|
|
|
75a7a3 |
|
|
|
75a7a3 |
static void
|
|
|
75a7a3 |
gdm_session_dispose (GObject *object)
|
|
|
75a7a3 |
{
|
|
|
75a7a3 |
GdmSession *self;
|
|
|
75a7a3 |
|
|
|
75a7a3 |
self = GDM_SESSION (object);
|
|
|
75a7a3 |
|
|
|
75a7a3 |
g_debug ("GdmSession: Disposing session");
|
|
|
75a7a3 |
|
|
|
75a7a3 |
gdm_session_close (self);
|
|
|
75a7a3 |
@@ -3749,67 +3731,60 @@ gdm_session_class_init (GdmSessionClass *session_class)
|
|
|
75a7a3 |
|
|
|
75a7a3 |
g_object_class_install_property (object_class,
|
|
|
75a7a3 |
PROP_SESSION_TYPE,
|
|
|
75a7a3 |
g_param_spec_string ("session-type",
|
|
|
75a7a3 |
NULL,
|
|
|
75a7a3 |
NULL,
|
|
|
75a7a3 |
NULL,
|
|
|
75a7a3 |
G_PARAM_READWRITE));
|
|
|
75a7a3 |
g_object_class_install_property (object_class,
|
|
|
75a7a3 |
PROP_DISPLAY_NAME,
|
|
|
75a7a3 |
g_param_spec_string ("display-name",
|
|
|
75a7a3 |
"display name",
|
|
|
75a7a3 |
"display name",
|
|
|
75a7a3 |
NULL,
|
|
|
75a7a3 |
G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
|
|
|
75a7a3 |
g_object_class_install_property (object_class,
|
|
|
75a7a3 |
PROP_DISPLAY_HOSTNAME,
|
|
|
75a7a3 |
g_param_spec_string ("display-hostname",
|
|
|
75a7a3 |
"display hostname",
|
|
|
75a7a3 |
"display hostname",
|
|
|
75a7a3 |
NULL,
|
|
|
75a7a3 |
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
|
|
|
75a7a3 |
g_object_class_install_property (object_class,
|
|
|
75a7a3 |
PROP_DISPLAY_IS_LOCAL,
|
|
|
75a7a3 |
g_param_spec_boolean ("display-is-local",
|
|
|
75a7a3 |
"display is local",
|
|
|
75a7a3 |
"display is local",
|
|
|
75a7a3 |
TRUE,
|
|
|
75a7a3 |
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
|
|
|
75a7a3 |
g_object_class_install_property (object_class,
|
|
|
75a7a3 |
- PROP_DISPLAY_IS_INITIAL,
|
|
|
75a7a3 |
- g_param_spec_boolean ("display-is-initial",
|
|
|
75a7a3 |
- "display is initial",
|
|
|
75a7a3 |
- "display is initial",
|
|
|
75a7a3 |
- FALSE,
|
|
|
75a7a3 |
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
|
|
|
75a7a3 |
- g_object_class_install_property (object_class,
|
|
|
75a7a3 |
PROP_DISPLAY_X11_AUTHORITY_FILE,
|
|
|
75a7a3 |
g_param_spec_string ("display-x11-authority-file",
|
|
|
75a7a3 |
"display x11 authority file",
|
|
|
75a7a3 |
"display x11 authority file",
|
|
|
75a7a3 |
NULL,
|
|
|
75a7a3 |
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
|
|
|
75a7a3 |
/* not construct only */
|
|
|
75a7a3 |
g_object_class_install_property (object_class,
|
|
|
75a7a3 |
PROP_USER_X11_AUTHORITY_FILE,
|
|
|
75a7a3 |
g_param_spec_string ("user-x11-authority-file",
|
|
|
75a7a3 |
"",
|
|
|
75a7a3 |
"",
|
|
|
75a7a3 |
NULL,
|
|
|
75a7a3 |
G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
|
|
|
75a7a3 |
g_object_class_install_property (object_class,
|
|
|
75a7a3 |
PROP_DISPLAY_DEVICE,
|
|
|
75a7a3 |
g_param_spec_string ("display-device",
|
|
|
75a7a3 |
"display device",
|
|
|
75a7a3 |
"display device",
|
|
|
75a7a3 |
NULL,
|
|
|
75a7a3 |
G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
|
|
|
75a7a3 |
|
|
|
75a7a3 |
g_object_class_install_property (object_class,
|
|
|
75a7a3 |
PROP_DISPLAY_SEAT_ID,
|
|
|
75a7a3 |
g_param_spec_string ("display-seat-id",
|
|
|
75a7a3 |
"display seat id",
|
|
|
75a7a3 |
"display seat id",
|
|
|
75a7a3 |
NULL,
|
|
|
75a7a3 |
G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
|
|
|
75a7a3 |
|
|
|
75a7a3 |
--
|
|
|
75a7a3 |
2.12.2
|
|
|
75a7a3 |
|