diff cli-chansession.c @ 296:6b41e2cbf071 dbclient-netcat-alike

A hack to make dbclient to tcp forwarding netcat style. eg ./dbclient -i testkey -L 1234:remotehost:remoteport tunnelhost will ssh to tunnelhost (using testkey, there's no way to ask for a password) and then tcpfwd to remotehost:remoteport on stdin/stdout. There's no way to give a cmdline password, so -i for a keyfile will have to do. Yet another reason for agent forwarding. The 1234 is a dummy var, I think it has to be a valid portnumber though.
author Matt Johnston <matt@ucc.asn.au>
date Tue, 21 Mar 2006 16:16:41 +0000
parents 84925eceeb13
children d4f32c3443ac
line wrap: on
line diff
--- a/cli-chansession.c	Sat Mar 11 14:59:34 2006 +0000
+++ b/cli-chansession.c	Tue Mar 21 16:16:41 2006 +0000
@@ -367,14 +367,55 @@
 
 void cli_send_chansess_request() {
 
+	unsigned int port = 0;
+	unsigned char* addr = NULL;
+	unsigned char* ipstring = "127.0.0.1";
+	unsigned char* portstring = "22";
+
+	/* hack hack */
+	static const struct ChanType cli_chan_tcphack = {
+		0, /* sepfds */
+		"direct-tcpip",
+		NULL,
+		NULL,
+		NULL,
+		cli_closechansess
+	};
+
 	TRACE(("enter cli_send_chansess_request"))
-	if (send_msg_channel_open_init(STDIN_FILENO, &clichansess) 
+	if (send_msg_channel_open_init(STDIN_FILENO, &cli_chan_tcphack) 
 			== DROPBEAR_FAILURE) {
 		dropbear_exit("Couldn't open initial channel");
 	}
 
-	/* No special channel request data */
+	if (cli_opts.localfwds == NULL) {
+		dropbear_exit("You need to give a \"-L ignored:host:port\" option with this hacked up dbclient.");
+	}
+
+	addr = cli_opts.localfwds->connectaddr;
+	port = cli_opts.localfwds->connectport;
+
+	buf_putstring(ses.writepayload, addr, strlen(addr));
+	buf_putint(ses.writepayload, port);
+
+	/* originator ip */
+	buf_putstring(ses.writepayload, ipstring, strlen(ipstring));
+	/* originator port */
+	buf_putint(ses.writepayload, atol(portstring));
+
 	encrypt_packet();
 	TRACE(("leave cli_send_chansess_request"))
 
 }
+
+#if 0
+	while (cli_opts.localfwds != NULL) {
+		ret = cli_localtcp(cli_opts.localfwds->listenport,
+				cli_opts.localfwds->connectaddr,
+				cli_opts.localfwds->connectport);
+		if (ret == DROPBEAR_FAILURE) {
+			dropbear_log(LOG_WARNING, "Failed local port forward %d:%s:%d",
+					cli_opts.localfwds->listenport,
+					cli_opts.localfwds->connectaddr,
+					cli_opts.localfwds->connectport);
+#endif