Vendor import of OpenSSH 3.7.1p2.
This commit is contained in:
+30
-18
@@ -59,7 +59,7 @@
|
||||
*/
|
||||
|
||||
#include "includes.h"
|
||||
RCSID("$OpenBSD: clientloop.c,v 1.107 2003/04/01 10:22:21 markus Exp $");
|
||||
RCSID("$OpenBSD: clientloop.c,v 1.112 2003/06/28 16:23:06 deraadt Exp $");
|
||||
|
||||
#include "ssh.h"
|
||||
#include "ssh1.h"
|
||||
@@ -395,9 +395,9 @@ client_suspend_self(Buffer *bin, Buffer *bout, Buffer *berr)
|
||||
|
||||
/* Flush stdout and stderr buffers. */
|
||||
if (buffer_len(bout) > 0)
|
||||
atomicio(write, fileno(stdout), buffer_ptr(bout), buffer_len(bout));
|
||||
atomicio(vwrite, fileno(stdout), buffer_ptr(bout), buffer_len(bout));
|
||||
if (buffer_len(berr) > 0)
|
||||
atomicio(write, fileno(stderr), buffer_ptr(berr), buffer_len(berr));
|
||||
atomicio(vwrite, fileno(stderr), buffer_ptr(berr), buffer_len(berr));
|
||||
|
||||
leave_raw_mode();
|
||||
|
||||
@@ -490,13 +490,13 @@ process_cmdline(void)
|
||||
if (*s == 0)
|
||||
goto out;
|
||||
if (strlen(s) < 2 || s[0] != '-' || !(s[1] == 'L' || s[1] == 'R')) {
|
||||
log("Invalid command.");
|
||||
logit("Invalid command.");
|
||||
goto out;
|
||||
}
|
||||
if (s[1] == 'L')
|
||||
local = 1;
|
||||
if (!local && !compat20) {
|
||||
log("Not supported for SSH protocol version 1.");
|
||||
logit("Not supported for SSH protocol version 1.");
|
||||
goto out;
|
||||
}
|
||||
s += 2;
|
||||
@@ -507,24 +507,24 @@ process_cmdline(void)
|
||||
sfwd_port, buf, sfwd_host_port) != 3 &&
|
||||
sscanf(s, "%5[0-9]/%255[^/]/%5[0-9]",
|
||||
sfwd_port, buf, sfwd_host_port) != 3) {
|
||||
log("Bad forwarding specification.");
|
||||
logit("Bad forwarding specification.");
|
||||
goto out;
|
||||
}
|
||||
if ((fwd_port = a2port(sfwd_port)) == 0 ||
|
||||
(fwd_host_port = a2port(sfwd_host_port)) == 0) {
|
||||
log("Bad forwarding port(s).");
|
||||
logit("Bad forwarding port(s).");
|
||||
goto out;
|
||||
}
|
||||
if (local) {
|
||||
if (channel_setup_local_fwd_listener(fwd_port, buf,
|
||||
fwd_host_port, options.gateway_ports) < 0) {
|
||||
log("Port forwarding failed.");
|
||||
logit("Port forwarding failed.");
|
||||
goto out;
|
||||
}
|
||||
} else
|
||||
channel_request_remote_forwarding(fwd_port, buf,
|
||||
fwd_host_port);
|
||||
log("Forwarding port.");
|
||||
logit("Forwarding port.");
|
||||
out:
|
||||
signal(SIGINT, handler);
|
||||
enter_raw_mode();
|
||||
@@ -574,10 +574,23 @@ process_escapes(Buffer *bin, Buffer *bout, Buffer *berr, char *buf, int len)
|
||||
/* We have been continued. */
|
||||
continue;
|
||||
|
||||
case 'B':
|
||||
if (compat20) {
|
||||
snprintf(string, sizeof string,
|
||||
"%cB\r\n", escape_char);
|
||||
buffer_append(berr, string,
|
||||
strlen(string));
|
||||
channel_request_start(session_ident,
|
||||
"break", 0);
|
||||
packet_put_int(1000);
|
||||
packet_send();
|
||||
}
|
||||
continue;
|
||||
|
||||
case 'R':
|
||||
if (compat20) {
|
||||
if (datafellows & SSH_BUG_NOREKEY)
|
||||
log("Server does not support re-keying");
|
||||
logit("Server does not support re-keying");
|
||||
else
|
||||
need_rekeying = 1;
|
||||
}
|
||||
@@ -636,6 +649,7 @@ process_escapes(Buffer *bin, Buffer *bout, Buffer *berr, char *buf, int len)
|
||||
"%c?\r\n\
|
||||
Supported escape sequences:\r\n\
|
||||
%c. - terminate connection\r\n\
|
||||
%cB - send a BREAK to the remote system\r\n\
|
||||
%cC - open a command line\r\n\
|
||||
%cR - Request rekey (SSH protocol 2 only)\r\n\
|
||||
%c^Z - suspend ssh\r\n\
|
||||
@@ -646,7 +660,7 @@ Supported escape sequences:\r\n\
|
||||
(Note that escapes are only recognized immediately after newline.)\r\n",
|
||||
escape_char, escape_char, escape_char, escape_char,
|
||||
escape_char, escape_char, escape_char, escape_char,
|
||||
escape_char, escape_char);
|
||||
escape_char, escape_char, escape_char);
|
||||
buffer_append(berr, string, strlen(string));
|
||||
continue;
|
||||
|
||||
@@ -968,9 +982,8 @@ client_loop(int have_pty, int escape_char_arg, int ssh2_chan_id)
|
||||
/* Do channel operations unless rekeying in progress. */
|
||||
if (!rekeying) {
|
||||
channel_after_select(readset, writeset);
|
||||
|
||||
if (need_rekeying) {
|
||||
debug("user requests rekeying");
|
||||
if (need_rekeying || packet_need_rekeying()) {
|
||||
debug("need rekeying");
|
||||
xxx_kex->done = 0;
|
||||
kex_send_kexinit(xxx_kex);
|
||||
need_rekeying = 0;
|
||||
@@ -1146,7 +1159,7 @@ client_request_forwarded_tcpip(const char *request_type, int rchan)
|
||||
c = channel_new("forwarded-tcpip",
|
||||
SSH_CHANNEL_CONNECTING, sock, sock, -1,
|
||||
CHAN_TCP_WINDOW_DEFAULT, CHAN_TCP_WINDOW_DEFAULT, 0,
|
||||
xstrdup(originator_address), 1);
|
||||
originator_address, 1);
|
||||
xfree(originator_address);
|
||||
xfree(listen_address);
|
||||
return c;
|
||||
@@ -1182,8 +1195,7 @@ client_request_x11(const char *request_type, int rchan)
|
||||
return NULL;
|
||||
c = channel_new("x11",
|
||||
SSH_CHANNEL_X11_OPEN, sock, sock, -1,
|
||||
CHAN_TCP_WINDOW_DEFAULT, CHAN_X11_PACKET_DEFAULT, 0,
|
||||
xstrdup("x11"), 1);
|
||||
CHAN_TCP_WINDOW_DEFAULT, CHAN_X11_PACKET_DEFAULT, 0, "x11", 1);
|
||||
c->force_drain = 1;
|
||||
return c;
|
||||
}
|
||||
@@ -1205,7 +1217,7 @@ client_request_agent(const char *request_type, int rchan)
|
||||
c = channel_new("authentication agent connection",
|
||||
SSH_CHANNEL_OPEN, sock, sock, -1,
|
||||
CHAN_X11_WINDOW_DEFAULT, CHAN_TCP_WINDOW_DEFAULT, 0,
|
||||
xstrdup("authentication agent connection"), 1);
|
||||
"authentication agent connection", 1);
|
||||
c->force_drain = 1;
|
||||
return c;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user