Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions common/user-list.c
Original file line number Diff line number Diff line change
Expand Up @@ -1348,11 +1348,17 @@ common_user_get_language (CommonUser *user)
void
common_user_set_language (CommonUser *user, const gchar *language)
{
CommonUserPrivate *priv = common_user_get_instance_private (user);

g_return_if_fail (COMMON_IS_USER (user));
if (g_strcmp0 (common_user_get_language (user), language) != 0)
{
call_method (user, "SetLanguage", g_variant_new ("(s)", language), "()", NULL);
save_string_to_dmrc (user, "Desktop", "Language", language);
g_free (priv->language);
priv->language = g_strdup (language);
if (priv->language && priv->language[0] == '\0')
g_clear_pointer (&priv->language, g_free);
}
}

Expand Down Expand Up @@ -1421,11 +1427,20 @@ common_user_get_session (CommonUser *user)
void
common_user_set_session (CommonUser *user, const gchar *session)
{
CommonUserPrivate *priv = common_user_get_instance_private (user);

g_return_if_fail (COMMON_IS_USER (user));
/* Update the in-memory cache: load_dmrc only runs once when AccountsService
* is unavailable, so skipping this left .dmrc stuck after switching away
* from the originally loaded session (#325). */
if (g_strcmp0 (common_user_get_session (user), session) != 0)
{
call_method (user, "SetXSession", g_variant_new ("(s)", session), "()", NULL);
save_string_to_dmrc (user, "Desktop", "Session", session);
g_free (priv->session);
priv->session = g_strdup (session);
if (priv->session && priv->session[0] == '\0')
g_clear_pointer (&priv->session, g_free);
}
}

Expand Down
2 changes: 2 additions & 0 deletions tests/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,7 @@ TESTS = \
test-login-multi-prompt-gobject \
test-login-pick-session-gobject \
test-login-remember-session-gobject \
test-login-remember-original-session \
test-login-manual-remember-session-gobject \
test-login-previous-session-gobject \
test-login-wrong-password-gobject \
Expand Down Expand Up @@ -500,6 +501,7 @@ EXTRA_DIST = \
scripts/login-pick-session.conf \
scripts/login-previous-session.conf \
scripts/login-remember-session.conf \
scripts/login-remember-original-session.conf \
scripts/login-remote-session.conf \
scripts/login-session-crash.conf \
scripts/login-two-factor.conf \
Expand Down
70 changes: 70 additions & 0 deletions tests/scripts/login-remember-original-session.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
#
# Returning to the originally loaded .dmrc session must rewrite .dmrc (issue #325)
#

[test-runner-config]
disable-accounts-service=true

[Seat:*]
user-session=default

#?*START-DAEMON
#?RUNNER DAEMON-START

#?XSERVER-0 START VT=7 SEAT=seat0
#?*XSERVER-0 INDICATE-READY
#?XSERVER-0 INDICATE-READY
#?XSERVER-0 ACCEPT-CONNECT

#?GREETER-X-0 START XDG_SEAT=seat0 XDG_VTNR=7 XDG_SESSION_CLASS=greeter
#?LOGIN1 ACTIVATE-SESSION SESSION=c0
#?XSERVER-0 ACCEPT-CONNECT
#?GREETER-X-0 CONNECT-XSERVER
#?GREETER-X-0 CONNECT-TO-DAEMON
#?GREETER-X-0 CONNECTED-TO-DAEMON

# have-session starts with Session=alternative in .dmrc; switch to default
#?*GREETER-X-0 AUTHENTICATE USERNAME=have-session
#?GREETER-X-0 AUTHENTICATION-COMPLETE USERNAME=have-session AUTHENTICATED=TRUE
#?*GREETER-X-0 START-SESSION SESSION=default
#?GREETER-X-0 TERMINATE SIGNAL=15

#?SESSION-X-0 START XDG_SEAT=seat0 XDG_VTNR=7 XDG_GREETER_DATA_DIR=.*/have-session XDG_SESSION_TYPE=x11 XDG_SESSION_DESKTOP=default USER=have-session
#?LOGIN1 ACTIVATE-SESSION SESSION=c1
#?XSERVER-0 ACCEPT-CONNECT
#?SESSION-X-0 CONNECT-XSERVER

#?*SESSION-X-0 LOGOUT
#?XSERVER-0 TERMINATE SIGNAL=15

#?XSERVER-0 START VT=7 SEAT=seat0
#?*XSERVER-0 INDICATE-READY
#?XSERVER-0 INDICATE-READY
#?XSERVER-0 ACCEPT-CONNECT

#?GREETER-X-0 START XDG_SEAT=seat0 XDG_VTNR=7 XDG_SESSION_CLASS=greeter
#?LOGIN1 ACTIVATE-SESSION SESSION=c2
#?XSERVER-0 ACCEPT-CONNECT
#?GREETER-X-0 CONNECT-XSERVER
#?GREETER-X-0 CONNECT-TO-DAEMON
#?GREETER-X-0 CONNECTED-TO-DAEMON

# Switch back to the originally loaded session
#?*GREETER-X-0 AUTHENTICATE USERNAME=have-session
#?GREETER-X-0 AUTHENTICATION-COMPLETE USERNAME=have-session AUTHENTICATED=TRUE
#?*GREETER-X-0 START-SESSION SESSION=alternative
#?GREETER-X-0 TERMINATE SIGNAL=15

#?SESSION-X-0 START XDG_SEAT=seat0 XDG_VTNR=7 XDG_GREETER_DATA_DIR=.*/have-session XDG_SESSION_TYPE=x11 XDG_SESSION_DESKTOP=alternative NAME=alternative USER=have-session
#?LOGIN1 ACTIVATE-SESSION SESSION=c3
#?XSERVER-0 ACCEPT-CONNECT
#?SESSION-X-0 CONNECT-XSERVER

# .dmrc must record alternative again (not stay stuck on default)
#?*CHECK-DMRC-SESSION USERNAME=have-session
#?RUNNER DMRC-SESSION USERNAME=have-session SESSION=alternative

#?*STOP-DAEMON
#?SESSION-X-0 TERMINATE SIGNAL=15
#?XSERVER-0 TERMINATE SIGNAL=15
#?RUNNER DAEMON-EXIT STATUS=0
12 changes: 12 additions & 0 deletions tests/src/test-runner.c
Original file line number Diff line number Diff line change
Expand Up @@ -801,6 +801,18 @@ handle_command (const gchar *command)
}
else if (strcmp (name, "STOP-DAEMON") == 0)
stop_process (lightdm_process);
else if (strcmp (name, "CHECK-DMRC-SESSION") == 0)
{
const gchar *username = g_hash_table_lookup (params, "USERNAME");
g_autofree gchar *path = g_build_filename (g_getenv ("LIGHTDM_TEST_ROOT"), "home", username, ".dmrc", NULL);
g_autoptr(GKeyFile) dmrc = g_key_file_new ();
g_autofree gchar *session = NULL;
if (g_key_file_load_from_file (dmrc, path, G_KEY_FILE_NONE, NULL))
session = g_key_file_get_string (dmrc, "Desktop", "Session", NULL);
g_autofree gchar *status_text = g_strdup_printf ("RUNNER DMRC-SESSION USERNAME=%s SESSION=%s",
username, session ? session : "");
check_status (status_text);
}
// FIXME: Make generic RUN-COMMAND
else if (strcmp (name, "START-XSERVER") == 0)
{
Expand Down
2 changes: 2 additions & 0 deletions tests/test-login-remember-original-session
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
#!/bin/sh
./src/dbus-env ./src/test-runner login-remember-original-session test-gobject-greeter