memset (&ut, 0, sizeof (ut));
ut.ut_type = USER_PROCESS;
ut.ut_pid = child_pid;
- if (tty)
- strncpy (ut.ut_line, tty + strlen ("/dev/"), sizeof (ut.ut_line));
if (xdisplay)
+ {
+ strncpy (ut.ut_line, xdisplay, sizeof (ut.ut_line));
strncpy (ut.ut_id, xdisplay, sizeof (ut.ut_id));
+ }
+ else if (tty)
+ strncpy (ut.ut_line, tty + strlen ("/dev/"), sizeof (ut.ut_line));
strncpy (ut.ut_user, username, sizeof (ut.ut_user));
if (xdisplay)
strncpy (ut.ut_host, xdisplay, sizeof (ut.ut_host));
memset (&ut, 0, sizeof (ut));
ut.ut_type = DEAD_PROCESS;
ut.ut_pid = child_pid;
- if (tty)
- strncpy (ut.ut_line, tty + strlen ("/dev/"), sizeof (ut.ut_line));
if (xdisplay)
+ {
+ strncpy (ut.ut_line, xdisplay, sizeof (ut.ut_line));
strncpy (ut.ut_id, xdisplay, sizeof (ut.ut_id));
+ }
+ else if (tty)
+ strncpy (ut.ut_line, tty + strlen ("/dev/"), sizeof (ut.ut_line));
strncpy (ut.ut_user, username, sizeof (ut.ut_user));
if (xdisplay)
strncpy (ut.ut_host, xdisplay, sizeof (ut.ut_host));
test-vnc-open-file-descriptors \
test-xdmcp-client \
test-xdmcp-server-login \
+ test-utmp \
test-no-accounts-service \
test-console-kit \
test-no-console-kit \
scripts/user-renamed.conf \
scripts/user-renamed-invalid.conf \
scripts/user-session.conf \
+ scripts/utmp.conf \
scripts/vnc-command.conf \
scripts/vnc-dimensions.conf \
scripts/vnc-login.conf \
--- /dev/null
+#
+# Check UTMP records written on login
+#
+
+[test-utmp-config]
+check-events=true
+
+[SeatDefaults]
+autologin-user=have-password1
+user-session=default
+
+#?*START-DAEMON
+#?RUNNER DAEMON-START
+
+# X server starts
+#?XSERVER-0 START VT=7 SEAT=seat0
+
+# Daemon connects when X server is ready
+#?*XSERVER-0 INDICATE-READY
+#?XSERVER-0 INDICATE-READY
+#?XSERVER-0 ACCEPT-CONNECT
+
+# UTMP record written
+#?UTMP TYPE=USER_PROCESS LINE=:0 ID=:0 USER=have-password1 HOST=:0
+
+# Autologin session starts
+#?SESSION-X-0 START XDG_SEAT=seat0 XDG_VTNR=7 XDG_GREETER_DATA_DIR=.*/have-password1 DESKTOP_SESSION=default USER=have-password1
+#?XSERVER-0 ACCEPT-CONNECT
+#?SESSION-X-0 CONNECT-XSERVER
+
+# Logout session
+#?*SESSION-X-0 LOGOUT
+
+# UTMP record written
+#?UTMP TYPE=DEAD_PROCESS LINE=:0 ID=:0 USER=have-password1 HOST=:0
+
+# X server stops
+#?XSERVER-0 TERMINATE SIGNAL=15
+
+# X server starts
+#?XSERVER-0 START VT=7 SEAT=seat0
+
+# Daemon connects when X server is ready
+#?*XSERVER-0 INDICATE-READY
+#?XSERVER-0 INDICATE-READY
+#?XSERVER-0 ACCEPT-CONNECT
+
+# Greeter starts
+#?GREETER-X-0 START XDG_SEAT=seat0 XDG_VTNR=7 XDG_SESSION_CLASS=greeter
+#?XSERVER-0 ACCEPT-CONNECT
+#?GREETER-X-0 CONNECT-XSERVER
+#?GREETER-X-0 CONNECT-TO-DAEMON
+#?GREETER-X-0 CONNECTED-TO-DAEMON
+
+# Wait in case the greeter tries to log in immediately
+#?*WAIT
+
+# Cleanup
+#?*STOP-DAEMON
+#?GREETER-X-0 TERMINATE SIGNAL=15
+#?XSERVER-0 TERMINATE SIGNAL=15
+#?RUNNER DAEMON-EXIT STATUS=0
static int active_vt = 7;
static gboolean status_connected = FALSE;
+static GKeyFile *config;
+
+static void connect_status (void)
+{
+ if (status_connected)
+ return;
+ status_connected = TRUE;
+
+ status_connect (NULL, NULL);
+
+ config = g_key_file_new ();
+ g_key_file_load_from_file (config, g_build_filename (g_getenv ("LIGHTDM_TEST_ROOT"), "script", NULL), G_KEY_FILE_NONE, NULL);
+}
struct pam_handle
{
if (vt != active_vt)
{
active_vt = vt;
- if (!status_connected)
- status_connected = status_connect (NULL, NULL);
+ connect_status ();
status_notify ("VT ACTIVATE VT=%d", active_vt);
}
break;
struct utmpx *
pututxline (const struct utmpx *ut)
{
+ GString *status;
+
+ status = g_string_new ("UTMP");
+ switch (ut->ut_type)
+ {
+ case INIT_PROCESS:
+ g_string_append_printf (status, " TYPE=INIT_PROCESS");
+ break;
+ case LOGIN_PROCESS:
+ g_string_append_printf (status, " TYPE=LOGIN_PROCESS");
+ break;
+ case USER_PROCESS:
+ g_string_append_printf (status, " TYPE=USER_PROCESS");
+ break;
+ case DEAD_PROCESS:
+ g_string_append_printf (status, " TYPE=DEAD_PROCESS");
+ break;
+ default:
+ g_string_append_printf (status, " TYPE=%d", ut->ut_type);
+ }
+ if (ut->ut_line)
+ g_string_append_printf (status, " LINE=%s", ut->ut_line);
+ if (ut->ut_id)
+ g_string_append_printf (status, " ID=%s", ut->ut_id);
+ if (ut->ut_user)
+ g_string_append_printf (status, " USER=%s", ut->ut_user);
+ if (ut->ut_host)
+ g_string_append_printf (status, " HOST=%s", ut->ut_host);
+
+ connect_status ();
+ if (g_key_file_get_boolean (config, "test-utmp-config", "check-events", NULL))
+ status_notify ("%s", status->str);
+ g_string_free (status, TRUE);
+
return (struct utmpx *)ut;
}
--- /dev/null
+#!/bin/sh
+./src/dbus-env ./src/test-runner utmp test-gobject-greeter