mirror of
https://github.com/PowerShell/openssh-portable.git
synced 2025-07-31 01:35:11 +02:00
- djm@cvs.openbsd.org 2008/06/12 04:17:47
[clientloop.c] thall shalt not code past the eightieth column
This commit is contained in:
parent
9f407c4422
commit
4d5cd33a5f
@ -85,6 +85,9 @@
|
|||||||
Use this queue to verify success or failure for remote forward
|
Use this queue to verify success or failure for remote forward
|
||||||
establishment in a race free way.
|
establishment in a race free way.
|
||||||
ok dtucker@
|
ok dtucker@
|
||||||
|
- djm@cvs.openbsd.org 2008/06/12 04:17:47
|
||||||
|
[clientloop.c]
|
||||||
|
thall shalt not code past the eightieth column
|
||||||
|
|
||||||
20080611
|
20080611
|
||||||
- (djm) [channels.c configure.ac]
|
- (djm) [channels.c configure.ac]
|
||||||
@ -4247,4 +4250,4 @@
|
|||||||
OpenServer 6 and add osr5bigcrypt support so when someone migrates
|
OpenServer 6 and add osr5bigcrypt support so when someone migrates
|
||||||
passwords between UnixWare and OpenServer they will still work. OK dtucker@
|
passwords between UnixWare and OpenServer they will still work. OK dtucker@
|
||||||
|
|
||||||
$Id: ChangeLog,v 1.4978 2008/06/12 18:50:27 dtucker Exp $
|
$Id: ChangeLog,v 1.4979 2008/06/12 18:51:14 dtucker Exp $
|
||||||
|
106
clientloop.c
106
clientloop.c
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: clientloop.c,v 1.196 2008/06/12 04:06:00 djm Exp $ */
|
/* $OpenBSD: clientloop.c,v 1.197 2008/06/12 04:17:47 djm Exp $ */
|
||||||
/*
|
/*
|
||||||
* Author: Tatu Ylonen <ylo@cs.hut.fi>
|
* Author: Tatu Ylonen <ylo@cs.hut.fi>
|
||||||
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
|
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
|
||||||
@ -147,8 +147,8 @@ static volatile sig_atomic_t quit_pending; /* Set non-zero to quit the loop. */
|
|||||||
static int escape_char1; /* Escape character. (proto1 only) */
|
static int escape_char1; /* Escape character. (proto1 only) */
|
||||||
static int escape_pending1; /* Last character was an escape (proto1 only) */
|
static int escape_pending1; /* Last character was an escape (proto1 only) */
|
||||||
static int last_was_cr; /* Last character was a newline. */
|
static int last_was_cr; /* Last character was a newline. */
|
||||||
static int exit_status; /* Used to store the exit status of the command. */
|
static int exit_status; /* Used to store the command exit status. */
|
||||||
static int stdin_eof; /* EOF has been encountered on standard error. */
|
static int stdin_eof; /* EOF has been encountered on stderr. */
|
||||||
static Buffer stdin_buffer; /* Buffer for stdin data. */
|
static Buffer stdin_buffer; /* Buffer for stdin data. */
|
||||||
static Buffer stdout_buffer; /* Buffer for stdout data. */
|
static Buffer stdout_buffer; /* Buffer for stdout data. */
|
||||||
static Buffer stderr_buffer; /* Buffer for stderr data. */
|
static Buffer stderr_buffer; /* Buffer for stderr data. */
|
||||||
@ -392,7 +392,10 @@ client_check_initial_eof_on_stdin(void)
|
|||||||
/* Check for immediate EOF on stdin. */
|
/* Check for immediate EOF on stdin. */
|
||||||
len = read(fileno(stdin), buf, 1);
|
len = read(fileno(stdin), buf, 1);
|
||||||
if (len == 0) {
|
if (len == 0) {
|
||||||
/* EOF. Record that we have seen it and send EOF to server. */
|
/*
|
||||||
|
* EOF. Record that we have seen it and send
|
||||||
|
* EOF to server.
|
||||||
|
*/
|
||||||
debug("Sending eof.");
|
debug("Sending eof.");
|
||||||
stdin_eof = 1;
|
stdin_eof = 1;
|
||||||
packet_start(SSH_CMSG_EOF);
|
packet_start(SSH_CMSG_EOF);
|
||||||
@ -601,9 +604,11 @@ client_suspend_self(Buffer *bin, Buffer *bout, Buffer *berr)
|
|||||||
{
|
{
|
||||||
/* Flush stdout and stderr buffers. */
|
/* Flush stdout and stderr buffers. */
|
||||||
if (buffer_len(bout) > 0)
|
if (buffer_len(bout) > 0)
|
||||||
atomicio(vwrite, fileno(stdout), buffer_ptr(bout), buffer_len(bout));
|
atomicio(vwrite, fileno(stdout), buffer_ptr(bout),
|
||||||
|
buffer_len(bout));
|
||||||
if (buffer_len(berr) > 0)
|
if (buffer_len(berr) > 0)
|
||||||
atomicio(vwrite, fileno(stderr), buffer_ptr(berr), buffer_len(berr));
|
atomicio(vwrite, fileno(stderr), buffer_ptr(berr),
|
||||||
|
buffer_len(berr));
|
||||||
|
|
||||||
leave_raw_mode();
|
leave_raw_mode();
|
||||||
|
|
||||||
@ -643,9 +648,13 @@ client_process_net_input(fd_set *readset)
|
|||||||
/* Read as much as possible. */
|
/* Read as much as possible. */
|
||||||
len = read(connection_in, buf, sizeof(buf));
|
len = read(connection_in, buf, sizeof(buf));
|
||||||
if (len == 0) {
|
if (len == 0) {
|
||||||
/* Received EOF. The remote host has closed the connection. */
|
/*
|
||||||
snprintf(buf, sizeof buf, "Connection to %.300s closed by remote host.\r\n",
|
* Received EOF. The remote host has closed the
|
||||||
host);
|
* connection.
|
||||||
|
*/
|
||||||
|
snprintf(buf, sizeof buf,
|
||||||
|
"Connection to %.300s closed by remote host.\r\n",
|
||||||
|
host);
|
||||||
buffer_append(&stderr_buffer, buf, strlen(buf));
|
buffer_append(&stderr_buffer, buf, strlen(buf));
|
||||||
quit_pending = 1;
|
quit_pending = 1;
|
||||||
return;
|
return;
|
||||||
@ -658,9 +667,13 @@ client_process_net_input(fd_set *readset)
|
|||||||
len = 0;
|
len = 0;
|
||||||
|
|
||||||
if (len < 0) {
|
if (len < 0) {
|
||||||
/* An error has encountered. Perhaps there is a network problem. */
|
/*
|
||||||
snprintf(buf, sizeof buf, "Read from remote host %.300s: %.100s\r\n",
|
* An error has encountered. Perhaps there is a
|
||||||
host, strerror(errno));
|
* network problem.
|
||||||
|
*/
|
||||||
|
snprintf(buf, sizeof buf,
|
||||||
|
"Read from remote host %.300s: %.100s\r\n",
|
||||||
|
host, strerror(errno));
|
||||||
buffer_append(&stderr_buffer, buf, strlen(buf));
|
buffer_append(&stderr_buffer, buf, strlen(buf));
|
||||||
quit_pending = 1;
|
quit_pending = 1;
|
||||||
return;
|
return;
|
||||||
@ -932,8 +945,7 @@ process_escapes(Channel *c, Buffer *bin, Buffer *bout, Buffer *berr,
|
|||||||
strlen(string));
|
strlen(string));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
/* Suspend the program. */
|
/* Suspend the program. Inform the user */
|
||||||
/* Print a message to that effect to the user. */
|
|
||||||
snprintf(string, sizeof string,
|
snprintf(string, sizeof string,
|
||||||
"%c^Z [suspend ssh]\r\n", escape_char);
|
"%c^Z [suspend ssh]\r\n", escape_char);
|
||||||
buffer_append(berr, string, strlen(string));
|
buffer_append(berr, string, strlen(string));
|
||||||
@ -960,7 +972,8 @@ process_escapes(Channel *c, Buffer *bin, Buffer *bout, Buffer *berr,
|
|||||||
case 'R':
|
case 'R':
|
||||||
if (compat20) {
|
if (compat20) {
|
||||||
if (datafellows & SSH_BUG_NOREKEY)
|
if (datafellows & SSH_BUG_NOREKEY)
|
||||||
logit("Server does not support re-keying");
|
logit("Server does not "
|
||||||
|
"support re-keying");
|
||||||
else
|
else
|
||||||
need_rekeying = 1;
|
need_rekeying = 1;
|
||||||
}
|
}
|
||||||
@ -970,8 +983,9 @@ process_escapes(Channel *c, Buffer *bin, Buffer *bout, Buffer *berr,
|
|||||||
if (c && c->ctl_fd != -1)
|
if (c && c->ctl_fd != -1)
|
||||||
goto noescape;
|
goto noescape;
|
||||||
/*
|
/*
|
||||||
* Detach the program (continue to serve connections,
|
* Detach the program (continue to serve
|
||||||
* but put in background and no more new connections).
|
* connections, but put in background and no
|
||||||
|
* more new connections).
|
||||||
*/
|
*/
|
||||||
/* Restore tty modes. */
|
/* Restore tty modes. */
|
||||||
leave_raw_mode();
|
leave_raw_mode();
|
||||||
@ -1000,9 +1014,9 @@ process_escapes(Channel *c, Buffer *bin, Buffer *bout, Buffer *berr,
|
|||||||
return -1;
|
return -1;
|
||||||
} else if (!stdin_eof) {
|
} else if (!stdin_eof) {
|
||||||
/*
|
/*
|
||||||
* Sending SSH_CMSG_EOF alone does not always appear
|
* Sending SSH_CMSG_EOF alone does not
|
||||||
* to be enough. So we try to send an EOF character
|
* always appear to be enough. So we
|
||||||
* first.
|
* try to send an EOF character first.
|
||||||
*/
|
*/
|
||||||
packet_start(SSH_CMSG_STDIN_DATA);
|
packet_start(SSH_CMSG_STDIN_DATA);
|
||||||
packet_put_string("\004", 1);
|
packet_put_string("\004", 1);
|
||||||
@ -1081,11 +1095,14 @@ Supported escape sequences:\r\n\
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
/*
|
/*
|
||||||
* The previous character was not an escape char. Check if this
|
* The previous character was not an escape char.
|
||||||
* is an escape.
|
* Check if this is an escape.
|
||||||
*/
|
*/
|
||||||
if (last_was_cr && ch == escape_char) {
|
if (last_was_cr && ch == escape_char) {
|
||||||
/* It is. Set the flag and continue to next character. */
|
/*
|
||||||
|
* It is. Set the flag and continue to
|
||||||
|
* next character.
|
||||||
|
*/
|
||||||
*escape_pendingp = 1;
|
*escape_pendingp = 1;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -1121,7 +1138,8 @@ client_process_input(fd_set *readset)
|
|||||||
* if it was an error condition.
|
* if it was an error condition.
|
||||||
*/
|
*/
|
||||||
if (len < 0) {
|
if (len < 0) {
|
||||||
snprintf(buf, sizeof buf, "read: %.100s\r\n", strerror(errno));
|
snprintf(buf, sizeof buf, "read: %.100s\r\n",
|
||||||
|
strerror(errno));
|
||||||
buffer_append(&stderr_buffer, buf, strlen(buf));
|
buffer_append(&stderr_buffer, buf, strlen(buf));
|
||||||
}
|
}
|
||||||
/* Mark that we have seen EOF. */
|
/* Mark that we have seen EOF. */
|
||||||
@ -1145,8 +1163,9 @@ client_process_input(fd_set *readset)
|
|||||||
buffer_append(&stdin_buffer, buf, len);
|
buffer_append(&stdin_buffer, buf, len);
|
||||||
} else {
|
} else {
|
||||||
/*
|
/*
|
||||||
* Normal, successful read. But we have an escape character
|
* Normal, successful read. But we have an escape
|
||||||
* and have to process the characters one by one.
|
* character and have to process the characters one
|
||||||
|
* by one.
|
||||||
*/
|
*/
|
||||||
if (process_escapes(NULL, &stdin_buffer,
|
if (process_escapes(NULL, &stdin_buffer,
|
||||||
&stdout_buffer, &stderr_buffer, buf, len) == -1)
|
&stdout_buffer, &stderr_buffer, buf, len) == -1)
|
||||||
@ -1174,7 +1193,8 @@ client_process_output(fd_set *writeset)
|
|||||||
* An error or EOF was encountered. Put an
|
* An error or EOF was encountered. Put an
|
||||||
* error message to stderr buffer.
|
* error message to stderr buffer.
|
||||||
*/
|
*/
|
||||||
snprintf(buf, sizeof buf, "write stdout: %.50s\r\n", strerror(errno));
|
snprintf(buf, sizeof buf,
|
||||||
|
"write stdout: %.50s\r\n", strerror(errno));
|
||||||
buffer_append(&stderr_buffer, buf, strlen(buf));
|
buffer_append(&stderr_buffer, buf, strlen(buf));
|
||||||
quit_pending = 1;
|
quit_pending = 1;
|
||||||
return;
|
return;
|
||||||
@ -1193,7 +1213,10 @@ client_process_output(fd_set *writeset)
|
|||||||
if (errno == EINTR || errno == EAGAIN)
|
if (errno == EINTR || errno == EAGAIN)
|
||||||
len = 0;
|
len = 0;
|
||||||
else {
|
else {
|
||||||
/* EOF or error, but can't even print error message. */
|
/*
|
||||||
|
* EOF or error, but can't even print
|
||||||
|
* error message.
|
||||||
|
*/
|
||||||
quit_pending = 1;
|
quit_pending = 1;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1219,7 +1242,8 @@ client_process_output(fd_set *writeset)
|
|||||||
static void
|
static void
|
||||||
client_process_buffered_input_packets(void)
|
client_process_buffered_input_packets(void)
|
||||||
{
|
{
|
||||||
dispatch_run(DISPATCH_NONBLOCK, &quit_pending, compat20 ? xxx_kex : NULL);
|
dispatch_run(DISPATCH_NONBLOCK, &quit_pending,
|
||||||
|
compat20 ? xxx_kex : NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* scan buf[] for '~' before sending data to the peer */
|
/* scan buf[] for '~' before sending data to the peer */
|
||||||
@ -1423,7 +1447,10 @@ client_loop(int have_pty, int escape_char_arg, int ssh2_chan_id)
|
|||||||
client_process_output(writeset);
|
client_process_output(writeset);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Send as much buffered packet data as possible to the sender. */
|
/*
|
||||||
|
* Send as much buffered packet data as possible to the
|
||||||
|
* sender.
|
||||||
|
*/
|
||||||
if (FD_ISSET(connection_out, writeset))
|
if (FD_ISSET(connection_out, writeset))
|
||||||
packet_write_poll();
|
packet_write_poll();
|
||||||
}
|
}
|
||||||
@ -1468,7 +1495,8 @@ client_loop(int have_pty, int escape_char_arg, int ssh2_chan_id)
|
|||||||
* that the connection has been closed.
|
* that the connection has been closed.
|
||||||
*/
|
*/
|
||||||
if (have_pty && options.log_level != SYSLOG_LEVEL_QUIET) {
|
if (have_pty && options.log_level != SYSLOG_LEVEL_QUIET) {
|
||||||
snprintf(buf, sizeof buf, "Connection to %.64s closed.\r\n", host);
|
snprintf(buf, sizeof buf,
|
||||||
|
"Connection to %.64s closed.\r\n", host);
|
||||||
buffer_append(&stderr_buffer, buf, strlen(buf));
|
buffer_append(&stderr_buffer, buf, strlen(buf));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1504,8 +1532,8 @@ client_loop(int have_pty, int escape_char_arg, int ssh2_chan_id)
|
|||||||
|
|
||||||
/* Report bytes transferred, and transfer rates. */
|
/* Report bytes transferred, and transfer rates. */
|
||||||
total_time = get_current_time() - start_time;
|
total_time = get_current_time() - start_time;
|
||||||
debug("Transferred: stdin %lu, stdout %lu, stderr %lu bytes in %.1f seconds",
|
debug("Transferred: stdin %lu, stdout %lu, stderr %lu bytes in %.1f "
|
||||||
stdin_bytes, stdout_bytes, stderr_bytes, total_time);
|
"seconds", stdin_bytes, stdout_bytes, stderr_bytes, total_time);
|
||||||
if (total_time > 0)
|
if (total_time > 0)
|
||||||
debug("Bytes per second: stdin %.1f, stdout %.1f, stderr %.1f",
|
debug("Bytes per second: stdin %.1f, stdout %.1f, stderr %.1f",
|
||||||
stdin_bytes / total_time, stdout_bytes / total_time,
|
stdin_bytes / total_time, stdout_bytes / total_time,
|
||||||
@ -1631,7 +1659,8 @@ client_request_x11(const char *request_type, int rchan)
|
|||||||
|
|
||||||
if (!options.forward_x11) {
|
if (!options.forward_x11) {
|
||||||
error("Warning: ssh server tried X11 forwarding.");
|
error("Warning: ssh server tried X11 forwarding.");
|
||||||
error("Warning: this is probably a break-in attempt by a malicious server.");
|
error("Warning: this is probably a break-in attempt by a "
|
||||||
|
"malicious server.");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
originator = packet_get_string(NULL);
|
originator = packet_get_string(NULL);
|
||||||
@ -1664,7 +1693,8 @@ client_request_agent(const char *request_type, int rchan)
|
|||||||
|
|
||||||
if (!options.forward_agent) {
|
if (!options.forward_agent) {
|
||||||
error("Warning: ssh server tried agent forwarding.");
|
error("Warning: ssh server tried agent forwarding.");
|
||||||
error("Warning: this is probably a break-in attempt by a malicious server.");
|
error("Warning: this is probably a break-in attempt by a "
|
||||||
|
"malicious server.");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
sock = ssh_get_authentication_socket();
|
sock = ssh_get_authentication_socket();
|
||||||
@ -1790,7 +1820,8 @@ client_input_channel_req(int type, u_int32_t seq, void *ctxt)
|
|||||||
if (id == -1) {
|
if (id == -1) {
|
||||||
error("client_input_channel_req: request for channel -1");
|
error("client_input_channel_req: request for channel -1");
|
||||||
} else if ((c = channel_lookup(id)) == NULL) {
|
} else if ((c = channel_lookup(id)) == NULL) {
|
||||||
error("client_input_channel_req: channel %d: unknown channel", id);
|
error("client_input_channel_req: channel %d: "
|
||||||
|
"unknown channel", id);
|
||||||
} else if (strcmp(rtype, "eow@openssh.com") == 0) {
|
} else if (strcmp(rtype, "eow@openssh.com") == 0) {
|
||||||
packet_check_eom();
|
packet_check_eom();
|
||||||
chan_rcvd_eow(c);
|
chan_rcvd_eow(c);
|
||||||
@ -1956,6 +1987,7 @@ client_init_dispatch_20(void)
|
|||||||
dispatch_set(SSH2_MSG_REQUEST_FAILURE, &client_global_request_reply);
|
dispatch_set(SSH2_MSG_REQUEST_FAILURE, &client_global_request_reply);
|
||||||
dispatch_set(SSH2_MSG_REQUEST_SUCCESS, &client_global_request_reply);
|
dispatch_set(SSH2_MSG_REQUEST_SUCCESS, &client_global_request_reply);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
client_init_dispatch_13(void)
|
client_init_dispatch_13(void)
|
||||||
{
|
{
|
||||||
@ -1975,6 +2007,7 @@ client_init_dispatch_13(void)
|
|||||||
dispatch_set(SSH_SMSG_X11_OPEN, options.forward_x11 ?
|
dispatch_set(SSH_SMSG_X11_OPEN, options.forward_x11 ?
|
||||||
&x11_input_open : &deny_input_open);
|
&x11_input_open : &deny_input_open);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
client_init_dispatch_15(void)
|
client_init_dispatch_15(void)
|
||||||
{
|
{
|
||||||
@ -1982,6 +2015,7 @@ client_init_dispatch_15(void)
|
|||||||
dispatch_set(SSH_MSG_CHANNEL_CLOSE, &channel_input_ieof);
|
dispatch_set(SSH_MSG_CHANNEL_CLOSE, &channel_input_ieof);
|
||||||
dispatch_set(SSH_MSG_CHANNEL_CLOSE_CONFIRMATION, & channel_input_oclose);
|
dispatch_set(SSH_MSG_CHANNEL_CLOSE_CONFIRMATION, & channel_input_oclose);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
client_init_dispatch(void)
|
client_init_dispatch(void)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user