Print this page
12306 XPG4v2 slave pty behaviour should generally be disabled
Reviewed by: Robert Mustacchi <rm@fingolfin.org>
Change-ID: I7ccd399c22866f34dd20c6bb9d28e77ba4e24c67

*** 23,34 **** * Use is subject to license terms. */ /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */ /* All Rights Reserved */ - /* * Pseudo Terminal Slave Driver. * * The pseudo-tty subsystem simulates a terminal connection, where the master * side represents the terminal and the slave represents the user process's --- 23,36 ---- * Use is subject to license terms. */ /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */ /* All Rights Reserved */ + /* + * Copyright 2020 OmniOS Community Edition (OmniOSce) Association. + */ /* * Pseudo Terminal Slave Driver. * * The pseudo-tty subsystem simulates a terminal connection, where the master * side represents the terminal and the slave represents the user process's
*** 104,113 **** --- 106,116 ---- #include <sys/types.h> #include <sys/param.h> #include <sys/sysmacros.h> #include <sys/stream.h> #include <sys/stropts.h> + #include <sys/strsubr.h> #include <sys/stat.h> #include <sys/errno.h> #include <sys/debug.h> #include <sys/cmn_err.h> #include <sys/ptms.h>
*** 335,355 **** } DDBGP("ptsopen: p = %p\n", (uintptr_t)ptsp); DDBG("ptsopen: state = %x\n", ptsp->pt_state); - ASSERT(ptsp->pt_minor == dminor); if ((ptsp->pt_state & PTLOCK) || !(ptsp->pt_state & PTMOPEN)) { mutex_exit(&ptsp->pt_lock); mutex_exit(&ptms_lock); return (EAGAIN); } /* ! * if already, open simply return... */ if (ptsp->pt_state & PTSOPEN) { ASSERT(rqp->q_ptr == ptsp); ASSERT(ptsp->pts_rdq == rqp); mutex_exit(&ptsp->pt_lock); --- 338,357 ---- } DDBGP("ptsopen: p = %p\n", (uintptr_t)ptsp); DDBG("ptsopen: state = %x\n", ptsp->pt_state); ASSERT(ptsp->pt_minor == dminor); if ((ptsp->pt_state & PTLOCK) || !(ptsp->pt_state & PTMOPEN)) { mutex_exit(&ptsp->pt_lock); mutex_exit(&ptms_lock); return (EAGAIN); } /* ! * if already open, simply return... */ if (ptsp->pt_state & PTSOPEN) { ASSERT(rqp->q_ptr == ptsp); ASSERT(ptsp->pts_rdq == rqp); mutex_exit(&ptsp->pt_lock);
*** 384,393 **** --- 386,398 ---- WR(rqp)->q_ptr = rqp->q_ptr = ptsp; mutex_exit(&ptsp->pt_lock); mutex_exit(&ptms_lock); + if (ptsp->pt_state & PTSTTY) + STREAM(rqp)->sd_flag |= STRXPG4TTY; + qprocson(rqp); /* * After qprocson pts driver is fully plumbed into the stream and can * send/receive messages. Setting pts_rdq will allow master side to send
*** 414,425 **** putnext(rqp, mop); return (0); } - - /* * Find the address to private data identifying the slave's write * queue. Send a 0-length msg up the slave's read queue to designate * the master is closing. Uattach the master from the slave by nulling * out master's write queue field in private data. --- 419,428 ----