You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
1.8 KiB
56 lines
1.8 KiB
commit b2f7983c84fd01e0b29895d7df776b4b162fd8a5 |
|
Author: Todd C. Miller <Todd.Miller@sudo.ws> |
|
Date: Wed Jan 2 07:39:33 2019 -0700 |
|
|
|
Fix setting of utmp entry when running command in a pty. |
|
Regression introduced in sudo 1.8.22. |
|
|
|
diff --git a/src/exec_pty.c b/src/exec_pty.c |
|
index cbcccca3..68312a98 100644 |
|
--- a/src/exec_pty.c |
|
+++ b/src/exec_pty.c |
|
@@ -140,7 +140,7 @@ pty_cleanup(void) |
|
* and slavename globals. |
|
*/ |
|
static bool |
|
-pty_setup(uid_t uid, const char *tty) |
|
+pty_setup(struct command_details *details, const char *tty) |
|
{ |
|
debug_decl(pty_setup, SUDO_DEBUG_EXEC); |
|
|
|
@@ -152,12 +152,15 @@ pty_setup(uid_t uid, const char *tty) |
|
} |
|
|
|
if (!get_pty(&io_fds[SFD_MASTER], &io_fds[SFD_SLAVE], |
|
- slavename, sizeof(slavename), uid)) |
|
+ slavename, sizeof(slavename), details->euid)) |
|
sudo_fatal(U_("unable to allocate pty")); |
|
|
|
/* Add entry to utmp/utmpx? */ |
|
- if (utmp_user != NULL) |
|
+ if (ISSET(details->flags, CD_SET_UTMP)) { |
|
+ utmp_user = |
|
+ details->utmp_user ? details->utmp_user : user_details.username; |
|
utmp_login(tty, slavename, io_fds[SFD_SLAVE], utmp_user); |
|
+ } |
|
|
|
sudo_debug_printf(SUDO_DEBUG_INFO, |
|
"%s: %s fd %d, pty master fd %d, pty slave fd %d", |
|
@@ -1302,12 +1305,11 @@ exec_pty(struct command_details *details, struct command_status *cstat) |
|
/* |
|
* Allocate a pty. |
|
*/ |
|
- if (pty_setup(details->euid, user_details.tty)) { |
|
- if (ISSET(details->flags, CD_SET_UTMP)) |
|
- utmp_user = details->utmp_user ? details->utmp_user : user_details.username; |
|
- } else if (TAILQ_EMPTY(&io_plugins)) { |
|
- /* Not logging I/O and didn't allocate a pty. */ |
|
- debug_return_bool(false); |
|
+ if (!pty_setup(details, user_details.tty)) { |
|
+ if (TAILQ_EMPTY(&io_plugins)) { |
|
+ /* Not logging I/O and didn't allocate a pty. */ |
|
+ debug_return_bool(false); |
|
+ } |
|
} |
|
|
|
/*
|
|
|