- stevesk@cvs.openbsd.org 2008/11/05 03:23:09
     [clientloop.c ssh.1]
     add dynamic forward escape command line; ok djm@
diff --git a/ChangeLog b/ChangeLog
index d49180e..1b45941 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 0ed4194..7378074 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 <ylo@cs.hut.fi>
  * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -764,7 +764,7 @@
 	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 @@
 		    "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 @@
 		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 @@
 		}
 		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 c8cd213..5f55dfe 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 @@
 .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