]> granicus.if.org Git - sudo/commitdiff
When running the command in a pty, defer the call to exec_setup()
authorTodd C. Miller <Todd.Miller@courtesan.com>
Tue, 5 Mar 2013 11:56:57 +0000 (06:56 -0500)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Tue, 5 Mar 2013 11:56:57 +0000 (06:56 -0500)
until just before we exec the command.  This is consistent with the
non-pty path.  As a side effect, the monitor process runs as root
and not the runas user.

src/exec_pty.c

index c7cca81320a0eb21f6777cfd17e16ebf1d7d8f6f..504657a9ecdf1b5603aa425587f438008fe3a9f5 100644 (file)
@@ -707,16 +707,14 @@ fork_pty(struct command_details *details, int sv[], int *maxfd, sigset_t *omask)
        close(signal_pipe[1]);
        fcntl(sv[1], F_SETFD, FD_CLOEXEC);
        sigprocmask(SIG_SETMASK, omask, NULL);
-       if (exec_setup(details, slavename, io_fds[SFD_SLAVE]) == true) {
-           /* Close the other end of the stdin/stdout/stderr pipes and exec. */
-           if (io_pipe[STDIN_FILENO][1])
-               close(io_pipe[STDIN_FILENO][1]);
-           if (io_pipe[STDOUT_FILENO][0])
-               close(io_pipe[STDOUT_FILENO][0]);
-           if (io_pipe[STDERR_FILENO][0])
-               close(io_pipe[STDERR_FILENO][0]);
-           exec_monitor(details, sv[1]);
-       }
+       /* Close the other end of the stdin/stdout/stderr pipes and exec. */
+       if (io_pipe[STDIN_FILENO][1])
+           close(io_pipe[STDIN_FILENO][1]);
+       if (io_pipe[STDOUT_FILENO][0])
+           close(io_pipe[STDOUT_FILENO][0]);
+       if (io_pipe[STDERR_FILENO][0])
+           close(io_pipe[STDERR_FILENO][0]);
+       exec_monitor(details, sv[1]);
        cstat.type = CMD_ERRNO;
        cstat.val = errno;
        ignore_result(send(sv[1], &cstat, sizeof(cstat), 0));