]> rtime.felk.cvut.cz Git - sojka/lightdm.git/commitdiff
Set utmp ut_line to the display name (i.e. :0). This matches what programs expect...
authorRobert Ancell <robert.ancell@canonical.com>
Mon, 10 Mar 2014 04:20:54 +0000 (17:20 +1300)
committerRobert Ancell <robert.ancell@canonical.com>
Mon, 10 Mar 2014 04:20:54 +0000 (17:20 +1300)
src/session-child.c
tests/Makefile.am
tests/scripts/utmp.conf [new file with mode: 0644]
tests/src/libsystem.c
tests/test-utmp [new file with mode: 0755]

index c1c84e5d2f7edd976d6c1115d469b2fa9ba3e289..57f371a14a22337b335deef69476e970c73a71f2 100644 (file)
@@ -601,10 +601,13 @@ session_child_run (int argc, char **argv)
             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));
@@ -632,10 +635,13 @@ session_child_run (int argc, char **argv)
             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));
index 72304faf4b1265be35624b3dace184fb74e68b8f..60e535fcf42225d6148afacb5b66dd1dff226375 100644 (file)
@@ -144,6 +144,7 @@ TESTS = \
        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 \
@@ -475,6 +476,7 @@ EXTRA_DIST = \
        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 \
diff --git a/tests/scripts/utmp.conf b/tests/scripts/utmp.conf
new file mode 100644 (file)
index 0000000..40cf26a
--- /dev/null
@@ -0,0 +1,62 @@
+#
+# 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
index fb1307e48851233ab2b2dbbdb150c4da82f49d60..f2229ff43ff7cabd96ba445b26aafb2010530f80 100644 (file)
@@ -37,6 +37,19 @@ static GList *group_entries = NULL;
 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
 {
@@ -501,8 +514,7 @@ ioctl (int d, unsigned long request, ...)
             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;
@@ -1434,6 +1446,40 @@ setutxent (void)
 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;
 }
 
diff --git a/tests/test-utmp b/tests/test-utmp
new file mode 100755 (executable)
index 0000000..89c63a8
--- /dev/null
@@ -0,0 +1,2 @@
+#!/bin/sh
+./src/dbus-env ./src/test-runner utmp test-gobject-greeter