From 0164cb8a87cf3060f13954ce4e842ecbe8316817 Mon Sep 17 00:00:00 2001 From: Damien Miller Date: Wed, 5 Nov 2008 16:30:31 +1100 Subject: [PATCH] - stevesk@cvs.openbsd.org 2008/11/05 03:23:09 [clientloop.c ssh.1] add dynamic forward escape command line; ok djm@ --- ChangeLog | 5 ++++- clientloop.c | 25 ++++++++++++++++--------- ssh.1 | 9 +++++---- 3 files changed, 25 insertions(+), 14 deletions(-) diff --git a/ChangeLog b/ChangeLog index d49180e6e..1b4594114 100644 --- a/ChangeLog +++ b/ChangeLog @@ -36,6 +36,9 @@ space was not malloc'd in that case. ok djm@ + - stevesk@cvs.openbsd.org 2008/11/05 03:23:09 + [clientloop.c ssh.1] + add dynamic forward escape command line; ok djm@ 20081103 - OpenBSD CVS Sync @@ -4886,4 +4889,4 @@ OpenServer 6 and add osr5bigcrypt support so when someone migrates passwords between UnixWare and OpenServer they will still work. OK dtucker@ -$Id: ChangeLog,v 1.5131 2008/11/05 05:30:06 djm Exp $ +$Id: ChangeLog,v 1.5132 2008/11/05 05:30:31 djm Exp $ diff --git a/clientloop.c b/clientloop.c index 0ed4194a6..737807496 100644 --- a/clientloop.c +++ b/clientloop.c @@ -1,4 +1,4 @@ -/* $OpenBSD: clientloop.c,v 1.203 2008/11/01 17:40:33 stevesk Exp $ */ +/* $OpenBSD: clientloop.c,v 1.204 2008/11/05 03:23:09 stevesk Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -764,7 +764,7 @@ process_cmdline(void) void (*handler)(int); char *s, *cmd, *cancel_host; int delete = 0; - int local = 0; + int local = 0, remote = 0, dynamic = 0; u_short cancel_port; Forward fwd; @@ -789,6 +789,8 @@ process_cmdline(void) "Request local forward"); logit(" -R[bind_address:]port:host:hostport " "Request remote forward"); + logit(" -D[bind_address:]port " + "Request dynamic forward"); logit(" -KR[bind_address:]port " "Cancel remote forward"); if (!options.permit_local_command) @@ -808,17 +810,22 @@ process_cmdline(void) delete = 1; s++; } - if (*s != 'L' && *s != 'R') { + if (*s == 'L') + local = 1; + else if (*s == 'R') + remote = 1; + else if (*s == 'D') + dynamic = 1; + else { logit("Invalid command."); goto out; } - if (*s == 'L') - local = 1; - if (local && delete) { + + if ((local || dynamic) && delete) { logit("Not supported."); goto out; } - if ((!local || delete) && !compat20) { + if (remote && delete && !compat20) { logit("Not supported for SSH protocol version 1."); goto out; } @@ -842,11 +849,11 @@ process_cmdline(void) } channel_request_rforward_cancel(cancel_host, cancel_port); } else { - if (!parse_forward(&fwd, s, 0)) { + if (!parse_forward(&fwd, s, dynamic ? 1 : 0)) { logit("Bad forwarding specification."); goto out; } - if (local) { + if (local || dynamic) { if (channel_setup_local_fwd_listener(fwd.listen_host, fwd.listen_port, fwd.connect_host, fwd.connect_port, options.gateway_ports) < 0) { diff --git a/ssh.1 b/ssh.1 index c8cd2136c..5f55dfe9d 100644 --- a/ssh.1 +++ b/ssh.1 @@ -34,8 +34,8 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.\" $OpenBSD: ssh.1,v 1.278 2008/10/08 23:34:03 djm Exp $ -.Dd $Mdocdate: October 8 2008 $ +.\" $OpenBSD: ssh.1,v 1.279 2008/11/05 03:23:09 stevesk Exp $ +.Dd $Mdocdate: November 5 2008 $ .Dt SSH 1 .Os .Sh NAME @@ -898,9 +898,10 @@ Send a BREAK to the remote system .It Cm ~C Open command line. Currently this allows the addition of port forwardings using the -.Fl L -and +.Fl L , .Fl R +and +.Fl D options (see above). It also allows the cancellation of existing remote port-forwardings using