]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
core: when setting up PAM, try to get tty of STDIN_FILENO if not set explicitly
authorLennart Poettering <lennart@poettering.net>
Fri, 3 Aug 2018 19:30:16 +0000 (21:30 +0200)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Mon, 20 Aug 2018 10:28:17 +0000 (12:28 +0200)
When stdin/stdout/stderr is initialized from an fd, let's read the tty
name of it if we can, and pass that to PAM.

This makes sure that "machinectl shell" sessions have proper TTY fields
initialized that "loginctl" then shows.

src/core/execute.c

index 67f6dbd600c9d54180d76fa23c1eed2195d07623..e26510243337e23fe1f8e07380fc7adf1afe142e 100644 (file)
@@ -1158,6 +1158,16 @@ static int setup_pam(
                 goto fail;
         }
 
+        if (!tty) {
+                _cleanup_free_ char *q = NULL;
+
+                /* Hmm, so no TTY was explicitly passed, but an fd passed to us directly might be a TTY. Let's figure
+                 * out if that's the case, and read the TTY off it. */
+
+                if (getttyname_malloc(STDIN_FILENO, &q) >= 0)
+                        tty = strjoina("/dev/", q);
+        }
+
         if (tty) {
                 pam_code = pam_set_item(handle, PAM_TTY, tty);
                 if (pam_code != PAM_SUCCESS)