summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Ancell <robert.ancell@canonical.com>2011-09-21 15:37:47 +1000
committerRobert Ancell <robert.ancell@canonical.com>2011-09-21 15:37:47 +1000
commitdf1b615e27107b33b23d06e5b135b1687902ea9c (patch)
tree3c0579dc800a8f85950a637cd9b90118973377a8
parent48fc1ae1913321336d4fdae7eac67817ee368e24 (diff)
downloadlightdm-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.c56
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));