diff options
author | Robert Ancell <robert.ancell@canonical.com> | 2011-09-22 12:47:22 +1000 |
---|---|---|
committer | Robert Ancell <robert.ancell@canonical.com> | 2011-09-22 12:47:22 +1000 |
commit | 658561cb603b5accde340725f6013e3a79e4f237 (patch) | |
tree | d1e28da0cbbfa327e6d876cef2bfd23bb978ae74 | |
parent | 7c11dac48b906f49370d78d43dc14e00a5744479 (diff) | |
download | lightdm-658561cb603b5accde340725f6013e3a79e4f237.tar.gz |
Split session setup into pre and post PAM session sections
-rw-r--r-- | src/session.c | 18 | ||||
-rw-r--r-- | src/session.h | 3 | ||||
-rw-r--r-- | src/xsession.c | 21 |
3 files changed, 31 insertions, 11 deletions
diff --git a/src/session.c b/src/session.c index c538ac35..78bbca54 100644 --- a/src/session.c +++ b/src/session.c @@ -326,6 +326,9 @@ session_real_start (Session *session) if (session->priv->console_kit_cookie) session_set_env (session, "XDG_SESSION_COOKIE", session->priv->console_kit_cookie); + if (!SESSION_GET_CLASS (session)->setup (session)) + return FALSE; + user = pam_session_get_user (session->priv->authentication); process_set_user (PROCESS (session), user); process_set_working_directory (PROCESS (session), user_get_home_directory (user)); @@ -353,13 +356,19 @@ void session_stop (Session *session) { g_return_if_fail (session != NULL); - SESSION_GET_CLASS (session)->stop (session); + SESSION_GET_CLASS (session)->cleanup (session); + process_signal (PROCESS (session), SIGTERM); +} + +static gboolean +session_setup (Session *session) +{ + return TRUE; } static void -session_real_stop (Session *session) +session_cleanup (Session *session) { - process_signal (PROCESS (session), SIGTERM); } static void @@ -417,7 +426,8 @@ session_class_init (SessionClass *klass) ProcessClass *process_class = PROCESS_CLASS (klass); klass->start = session_real_start; - klass->stop = session_real_stop; + klass->setup = session_setup; + klass->cleanup = session_cleanup; process_class->run = session_run; process_class->stopped = session_stopped; object_class->finalize = session_finalize; diff --git a/src/session.h b/src/session.h index bfda1792..892bd0f5 100644 --- a/src/session.h +++ b/src/session.h @@ -36,7 +36,8 @@ typedef struct ProcessClass parent_class; gboolean (*start)(Session *session); - void (*stop)(Session *session); + gboolean (*setup)(Session *session); + void (*cleanup)(Session *session); } SessionClass; GType session_get_type (void); diff --git a/src/xsession.c b/src/xsession.c index 86567a82..e1e75022 100644 --- a/src/xsession.c +++ b/src/xsession.c @@ -59,6 +59,16 @@ xsession_start (Session *session) session_set_console_kit_parameter (session, "is-local", g_variant_new_boolean (FALSE)); } + session_set_env (session, "DISPLAY", xserver_get_address (xsession->priv->xserver)); + + return SESSION_CLASS (xsession_parent_class)->start (session); +} + +static gboolean +xsession_setup (Session *session) +{ + XSession *xsession = XSESSION (session); + if (xserver_get_authority (xsession->priv->xserver)) { gchar *path; @@ -108,9 +118,7 @@ xsession_start (Session *session) return FALSE; } - session_set_env (session, "DISPLAY", xserver_get_address (xsession->priv->xserver)); - - return SESSION_CLASS (xsession_parent_class)->start (session); + return SESSION_CLASS (xsession_parent_class)->setup (session); } static void @@ -139,10 +147,10 @@ xsession_remove_authority (XSession *session) } static void -xsession_stop (Session *session) +xsession_cleanup (Session *session) { xsession_remove_authority (XSESSION (session)); - SESSION_CLASS (xsession_parent_class)->stop (session); + SESSION_CLASS (xsession_parent_class)->cleanup (session); } static void @@ -172,7 +180,8 @@ xsession_class_init (XSessionClass *klass) SessionClass *session_class = SESSION_CLASS (klass); session_class->start = xsession_start; - session_class->stop = xsession_stop; + session_class->setup = xsession_setup; + session_class->cleanup = xsession_cleanup; object_class->finalize = xsession_finalize; g_type_class_add_private (klass, sizeof (XSessionPrivate)); |