summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordjm <djm@openbsd.org>2010-01-09 05:04:24 +0000
committerdjm <djm@openbsd.org>2010-01-09 05:04:24 +0000
commit046f3ef4ba6097f092278f848784e6130a497dfa (patch)
tree6cee7dfc354ac8a24dced79f9d026295e66c0d61
parentbad place to forget a comma... (diff)
downloadwireguard-openbsd-046f3ef4ba6097f092278f848784e6130a497dfa.tar.xz
wireguard-openbsd-046f3ef4ba6097f092278f848784e6130a497dfa.zip
quell tc[gs]etattr warnings when forcing a tty (ssh -tt), since we
usually don't actually have a tty to read/set; bz#1686 ok dtucker@
-rw-r--r--usr.bin/ssh/clientloop.c23
-rw-r--r--usr.bin/ssh/mux.c7
-rw-r--r--usr.bin/ssh/sshpty.h6
-rw-r--r--usr.bin/ssh/sshtty.c23
4 files changed, 33 insertions, 26 deletions
diff --git a/usr.bin/ssh/clientloop.c b/usr.bin/ssh/clientloop.c
index a6b8cc1c162..cb643e86e2c 100644
--- a/usr.bin/ssh/clientloop.c
+++ b/usr.bin/ssh/clientloop.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: clientloop.c,v 1.215 2009/11/17 05:31:44 djm Exp $ */
+/* $OpenBSD: clientloop.c,v 1.216 2010/01/09 05:04:24 djm Exp $ */
/*
* Author: Tatu Ylonen <ylo@cs.hut.fi>
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -122,6 +122,9 @@ extern int muxserver_sock;
*/
extern char *host;
+/* Force TTY allocation */
+extern int force_tty_flag;
+
/*
* Flag to indicate that we have received a window change signal which has
* not yet been processed. This will cause a message indicating the new
@@ -602,7 +605,7 @@ client_suspend_self(Buffer *bin, Buffer *bout, Buffer *berr)
atomicio(vwrite, fileno(stderr), buffer_ptr(berr),
buffer_len(berr));
- leave_raw_mode();
+ leave_raw_mode(force_tty_flag);
/*
* Free (and clear) the buffer to reduce the amount of data that gets
@@ -623,7 +626,7 @@ client_suspend_self(Buffer *bin, Buffer *bout, Buffer *berr)
buffer_init(bout);
buffer_init(berr);
- enter_raw_mode();
+ enter_raw_mode(force_tty_flag);
}
static void
@@ -765,7 +768,7 @@ process_cmdline(void)
bzero(&fwd, sizeof(fwd));
fwd.listen_host = fwd.connect_host = NULL;
- leave_raw_mode();
+ leave_raw_mode(force_tty_flag);
handler = signal(SIGINT, SIG_IGN);
cmd = s = read_passphrase("\r\nssh> ", RP_ECHO);
if (s == NULL)
@@ -868,7 +871,7 @@ process_cmdline(void)
out:
signal(SIGINT, handler);
- enter_raw_mode();
+ enter_raw_mode(force_tty_flag);
if (cmd)
xfree(cmd);
if (fwd.listen_host != NULL)
@@ -987,7 +990,7 @@ process_escapes(Channel *c, Buffer *bin, Buffer *bout, Buffer *berr,
* more new connections).
*/
/* Restore tty modes. */
- leave_raw_mode();
+ leave_raw_mode(force_tty_flag);
/* Stop listening for new connections. */
channel_stop_listening();
@@ -1279,7 +1282,7 @@ client_channel_closed(int id, void *arg)
{
channel_cancel_cleanup(id);
session_closed = 1;
- leave_raw_mode();
+ leave_raw_mode(force_tty_flag);
}
/*
@@ -1352,7 +1355,7 @@ client_loop(int have_pty, int escape_char_arg, int ssh2_chan_id)
signal(SIGWINCH, window_change_handler);
if (have_pty)
- enter_raw_mode();
+ enter_raw_mode(force_tty_flag);
if (compat20) {
session_ident = ssh2_chan_id;
@@ -1486,7 +1489,7 @@ client_loop(int have_pty, int escape_char_arg, int ssh2_chan_id)
channel_free_all();
if (have_pty)
- leave_raw_mode();
+ leave_raw_mode(force_tty_flag);
/* restore blocking io */
if (!isatty(fileno(stdin)))
@@ -2044,7 +2047,7 @@ client_init_dispatch(void)
void
cleanup_exit(int i)
{
- leave_raw_mode();
+ leave_raw_mode(force_tty_flag);
leave_non_blocking();
if (options.control_path != NULL && muxserver_sock != -1)
unlink(options.control_path);
diff --git a/usr.bin/ssh/mux.c b/usr.bin/ssh/mux.c
index a8f2292578f..6eec57b6b3f 100644
--- a/usr.bin/ssh/mux.c
+++ b/usr.bin/ssh/mux.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: mux.c,v 1.8 2009/08/20 23:54:28 dtucker Exp $ */
+/* $OpenBSD: mux.c,v 1.9 2010/01/09 05:04:24 djm Exp $ */
/*
* Copyright (c) 2002-2008 Damien Miller <djm@openbsd.org>
*
@@ -71,6 +71,7 @@
/* from ssh.c */
extern int tty_flag;
+extern int force_tty_flag;
extern Options options;
extern int stdin_null_flag;
extern char *host;
@@ -671,7 +672,7 @@ muxclient(const char *path)
signal(SIGWINCH, control_client_sigrelay);
if (tty_flag)
- enter_raw_mode();
+ enter_raw_mode(force_tty_flag);
/*
* Stick around until the controlee closes the client_fd.
@@ -696,7 +697,7 @@ muxclient(const char *path)
}
close(sock);
- leave_raw_mode();
+ leave_raw_mode(force_tty_flag);
if (i > (int)sizeof(int))
fatal("%s: master returned too much data (%d > %lu)",
__func__, i, (u_long)sizeof(int));
diff --git a/usr.bin/ssh/sshpty.h b/usr.bin/ssh/sshpty.h
index ac900358462..cfa322480f5 100644
--- a/usr.bin/ssh/sshpty.h
+++ b/usr.bin/ssh/sshpty.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: sshpty.h,v 1.11 2008/05/19 15:45:07 djm Exp $ */
+/* $OpenBSD: sshpty.h,v 1.12 2010/01/09 05:04:24 djm Exp $ */
/*
* Author: Tatu Ylonen <ylo@cs.hut.fi>
@@ -17,8 +17,8 @@
#include <termios.h>
struct termios *get_saved_tio(void);
-void leave_raw_mode(void);
-void enter_raw_mode(void);
+void leave_raw_mode(int);
+void enter_raw_mode(int);
int pty_allocate(int *, int *, char *, size_t);
void pty_release(const char *);
diff --git a/usr.bin/ssh/sshtty.c b/usr.bin/ssh/sshtty.c
index 9df9aa219e4..4729408dc8f 100644
--- a/usr.bin/ssh/sshtty.c
+++ b/usr.bin/ssh/sshtty.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: sshtty.c,v 1.13 2008/05/19 15:45:07 djm Exp $ */
+/* $OpenBSD: sshtty.c,v 1.14 2010/01/09 05:04:24 djm Exp $ */
/*
* Author: Tatu Ylonen <ylo@cs.hut.fi>
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -52,23 +52,25 @@ get_saved_tio(void)
}
void
-leave_raw_mode(void)
+leave_raw_mode(int quiet)
{
if (!_in_raw_mode)
return;
- if (tcsetattr(fileno(stdin), TCSADRAIN, &_saved_tio) == -1)
- perror("tcsetattr");
- else
+ if (tcsetattr(fileno(stdin), TCSADRAIN, &_saved_tio) == -1) {
+ if (!quiet)
+ perror("tcsetattr");
+ } else
_in_raw_mode = 0;
}
void
-enter_raw_mode(void)
+enter_raw_mode(int quiet)
{
struct termios tio;
if (tcgetattr(fileno(stdin), &tio) == -1) {
- perror("tcgetattr");
+ if (!quiet)
+ perror("tcgetattr");
return;
}
_saved_tio = tio;
@@ -84,8 +86,9 @@ enter_raw_mode(void)
tio.c_oflag &= ~OPOST;
tio.c_cc[VMIN] = 1;
tio.c_cc[VTIME] = 0;
- if (tcsetattr(fileno(stdin), TCSADRAIN, &tio) == -1)
- perror("tcsetattr");
- else
+ if (tcsetattr(fileno(stdin), TCSADRAIN, &tio) == -1) {
+ if (!quiet)
+ perror("tcsetattr");
+ } else
_in_raw_mode = 1;
}