chiark / gitweb /
login: re-use VT-sessions if they already exist
authorDavid Herrmann <dh.herrmann@gmail.com>
Wed, 1 Jul 2015 13:05:01 +0000 (15:05 +0200)
committerSven Eden <yamakuzure@gmx.net>
Tue, 14 Mar 2017 09:05:54 +0000 (10:05 +0100)
Right now, if you start a session via 'su' or 'sudo' from within a
session, we make sure to re-use the existing session instead of creating a
new one. We detect this by reading the session of the requesting PID.

However, with gnome-terminal running as a busname-unit, and as such
running outside the session of the user, this will no longer work.
Therefore, this patch makes sure to return the existing session of a VT if
you start a new one.

This has the side-effect, that you will re-use a session which your PID is
not part of. This works fine, but will break assumptions if the parent
session dies (and as such close your session even though you think you're
part of it). However, this should be perfectly fine. If you run multiple
logins on the same session, you should really know what you're doing. The
current way of silently accepting it but choosing the last registered
session is just weird.

src/login/logind-dbus.c

index 640ae92f7f9cbdb1f8de6ca0a85c0450cce51fe0..659ce18a48869649bf3999f9832562f32b7a36b2 100644 (file)
@@ -690,6 +690,8 @@ static int method_create_session(sd_bus_message *message, void *userdata, sd_bus
         }
 
         manager_get_session_by_pid(m, leader, &session);
+        if (!session && vtnr > 0)
+                session = (vtnr < m->seat0->position_count) ? m->seat0->positions[vtnr] : NULL;
         if (session) {
                 _cleanup_free_ char *path = NULL;
                 _cleanup_close_ int fifo_fd = -1;