diff options
author | Robert Ancell <robert.ancell@canonical.com> | 2011-09-21 15:37:47 +1000 |
---|---|---|
committer | Robert Ancell <robert.ancell@canonical.com> | 2011-09-21 15:37:47 +1000 |
commit | df1b615e27107b33b23d06e5b135b1687902ea9c (patch) | |
tree | 3c0579dc800a8f85950a637cd9b90118973377a8 | |
parent | 48fc1ae1913321336d4fdae7eac67817ee368e24 (diff) | |
download | lightdm-df1b615e27107b33b23d06e5b135b1687902ea9c.tar.gz |
Write ~/.Xauthority in the daemon to be more consistent with how it is modified after the session ends
-rw-r--r-- | src/xsession.c | 56 |
1 files changed, 17 insertions, 39 deletions
diff --git a/src/xsession.c b/src/xsession.c index 3b0201d7..d685b707 100644 --- a/src/xsession.c +++ b/src/xsession.c @@ -41,17 +41,6 @@ xsession_new (XServer *xserver) return session; } -static void -write_authority (XSession *session) -{ - GError *error = NULL; - - xauth_write (session->priv->authority, XAUTH_WRITE_MODE_REPLACE, session->priv->authority_file, &error); - if (error) - g_warning ("Failed to write authority: %s", error->message); - g_clear_error (&error); -} - static gboolean xsession_start (Session *session) { @@ -73,6 +62,8 @@ xsession_start (Session *session) if (xserver_get_authority (xsession->priv->xserver)) { gchar *path; + gboolean drop_privileges, result; + GError *error = NULL; xsession->priv->authority = g_object_ref (xserver_get_authority (xsession->priv->xserver)); @@ -100,21 +91,21 @@ xsession_start (Session *session) process_set_env (PROCESS (session), "XAUTHORITY", path); xsession->priv->authority_file = g_file_new_for_path (path); - if (xsession->priv->authority_in_system_dir) - { - gboolean drop_privileges; - - g_debug ("Adding session authority to %s", path); - drop_privileges = geteuid () == 0; - if (drop_privileges) - privileges_drop (session_get_user (SESSION (session))); - write_authority (xsession); - if (drop_privileges) - privileges_reclaim (); - } - else - g_debug ("Adding session authority to %s (written in session process)", path); + + g_debug ("Adding session authority to %s", path); + drop_privileges = geteuid () == 0; + if (drop_privileges) + privileges_drop (session_get_user (SESSION (session))); + result = xauth_write (xsession->priv->authority, XAUTH_WRITE_MODE_REPLACE, xsession->priv->authority_file, &error); + if (drop_privileges) + privileges_reclaim (); + if (error) + g_warning ("Failed to write authority: %s", error->message); + g_clear_error (&error); g_free (path); + + if (!result) + return FALSE; } process_set_env (PROCESS (session), "DISPLAY", xserver_get_address (xsession->priv->xserver)); @@ -130,7 +121,7 @@ xsession_remove_authority (XSession *session) gboolean drop_privileges; g_debug ("Removing session authority from %s", g_file_get_path (session->priv->authority_file)); - + drop_privileges = geteuid () == 0; if (drop_privileges) privileges_drop (session_get_user (SESSION (session))); @@ -148,17 +139,6 @@ xsession_remove_authority (XSession *session) } static void -xsession_run (Process *process) -{ - XSession *xsession = XSESSION (process); - - if (!xsession->priv->authority_in_system_dir) - write_authority (xsession); - - PROCESS_CLASS (xsession_parent_class)->run (process); -} - -static void xsession_stop (Session *session) { xsession_remove_authority (XSESSION (session)); @@ -189,12 +169,10 @@ static void xsession_class_init (XSessionClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); - ProcessClass *process_class = PROCESS_CLASS (klass); SessionClass *session_class = SESSION_CLASS (klass); session_class->start = xsession_start; session_class->stop = xsession_stop; - process_class->run = xsession_run; object_class->finalize = xsession_finalize; g_type_class_add_private (klass, sizeof (XSessionPrivate)); |