Test if sshd accidentally acquires controlling tty
When SSHD_ACQUIRES_CTTY is defined, test for the problematic behaviour in the STREAMS code before activating the workaround. ok djm@
This commit is contained in:
parent
766176cfdb
commit
df93529dd7
|
@ -66,6 +66,7 @@
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
#include "misc.h"
|
#include "misc.h"
|
||||||
|
#include "log.h"
|
||||||
|
|
||||||
#ifndef O_NOCTTY
|
#ifndef O_NOCTTY
|
||||||
#define O_NOCTTY 0
|
#define O_NOCTTY 0
|
||||||
|
@ -73,8 +74,7 @@
|
||||||
|
|
||||||
#if defined(HAVE_DEV_PTMX) && !defined(HAVE__GETPTY)
|
#if defined(HAVE_DEV_PTMX) && !defined(HAVE__GETPTY)
|
||||||
static int
|
static int
|
||||||
openpty_streams(int *amaster, int *aslave, char *name, struct termios *termp,
|
openpty_streams(int *amaster, int *aslave)
|
||||||
struct winsize *winp)
|
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* This code is used e.g. on Solaris 2.x. (Note that Solaris 2.3
|
* This code is used e.g. on Solaris 2.x. (Note that Solaris 2.3
|
||||||
|
@ -162,14 +162,21 @@ openpty(int *amaster, int *aslave, char *name, struct termios *termp,
|
||||||
* different session and is available to become controlling terminal
|
* different session and is available to become controlling terminal
|
||||||
* for the client's subprocess. See bugzilla #245 for details.
|
* for the client's subprocess. See bugzilla #245 for details.
|
||||||
*/
|
*/
|
||||||
|
int r, fd;
|
||||||
static int junk_ptyfd = -1, junk_ttyfd;
|
static int junk_ptyfd = -1, junk_ttyfd;
|
||||||
|
|
||||||
if (junk_ptyfd == -1)
|
r = openpty_streams(amaster, aslave);
|
||||||
(void)openpty_streams(&junk_ptyfd, &junk_ttyfd, NULL, NULL,
|
if (junk_ptyfd == -1 && (fd = open(_PATH_TTY, O_RDWR|O_NOCTTY)) >= 0) {
|
||||||
NULL);
|
close(fd);
|
||||||
|
junk_ptyfd = *amaster;
|
||||||
|
junk_ttyfd = *aslave;
|
||||||
|
debug("STREAMS bug workaround pty %d tty %d name %s",
|
||||||
|
junk_ptyfd, junk_ttyfd, ttyname(junk_ttyfd));
|
||||||
|
} else
|
||||||
|
return r;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return openpty_streams(amaster, aslave, name, termp, winp);
|
return openpty_streams(amaster, aslave);
|
||||||
|
|
||||||
#elif defined(HAVE_DEV_PTS_AND_PTC)
|
#elif defined(HAVE_DEV_PTS_AND_PTC)
|
||||||
/* AIX-style pty code. */
|
/* AIX-style pty code. */
|
||||||
|
|
Loading…
Reference in New Issue