On Solaris 11.4 the openpty(3) prototype lives in termios.h.
This commit is contained in:
@@ -110,7 +110,7 @@ static void del_io_events(bool nonblocking);
|
||||
static void sync_ttysize(struct exec_closure_pty *ec);
|
||||
static int safe_close(int fd);
|
||||
static void ev_free_by_fd(struct sudo_event_base *evbase, int fd);
|
||||
static void check_foreground(struct exec_closure_pty *ec);
|
||||
static pid_t check_foreground(struct exec_closure_pty *ec);
|
||||
static void add_io_events(struct sudo_event_base *evbase);
|
||||
static void schedule_signal(struct exec_closure_pty *ec, int signo);
|
||||
|
||||
@@ -487,22 +487,25 @@ log_winchange(unsigned int rows, unsigned int cols)
|
||||
|
||||
/*
|
||||
* Check whether we are running in the foregroup.
|
||||
* Updates the foreground global and does lazy init of the
|
||||
* the pty slave as needed.
|
||||
* Updates the foreground global and updates the window size.
|
||||
* Returns 0 if there is no tty, the foreground process group ID
|
||||
* on success, or -1 on failure (tty revoked).
|
||||
*/
|
||||
static void
|
||||
static pid_t
|
||||
check_foreground(struct exec_closure_pty *ec)
|
||||
{
|
||||
int ret = 0;
|
||||
debug_decl(check_foreground, SUDO_DEBUG_EXEC);
|
||||
|
||||
if (io_fds[SFD_USERTTY] != -1) {
|
||||
foreground = tcgetpgrp(io_fds[SFD_USERTTY]) == ec->ppgrp;
|
||||
if ((ret = tcgetpgrp(io_fds[SFD_USERTTY])) != -1) {
|
||||
foreground = ret == ec->ppgrp;
|
||||
|
||||
/* Also check for window size changes. */
|
||||
sync_ttysize(ec);
|
||||
/* Also check for window size changes. */
|
||||
sync_ttysize(ec);
|
||||
}
|
||||
}
|
||||
|
||||
debug_return;
|
||||
debug_return_int(ret);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -568,6 +571,7 @@ suspend_sudo(struct exec_closure_pty *ec, int signo)
|
||||
log_suspend(SIGCONT);
|
||||
|
||||
/* Check foreground/background status on resume. */
|
||||
/* XXX - handle missing tty */
|
||||
check_foreground(ec);
|
||||
|
||||
/*
|
||||
|
@@ -36,13 +36,16 @@
|
||||
#include <fcntl.h>
|
||||
#include <grp.h>
|
||||
|
||||
#if defined(HAVE_LIBUTIL_H)
|
||||
# include <libutil.h>
|
||||
#elif defined(HAVE_UTIL_H)
|
||||
# include <util.h>
|
||||
#endif
|
||||
#ifdef HAVE_PTY_H
|
||||
# include <pty.h>
|
||||
#if defined(HAVE_OPENPTY)
|
||||
# if defined(HAVE_LIBUTIL_H)
|
||||
# include <libutil.h> /* *BSD */
|
||||
# elif defined(HAVE_UTIL_H)
|
||||
# include <util.h> /* macOS */
|
||||
# elif defined(HAVE_PTY_H)
|
||||
# include <pty.h> /* Linux */
|
||||
# else
|
||||
# include <termios.h> /* Solaris */
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#include "sudo.h"
|
||||
|
Reference in New Issue
Block a user