summaryrefslogtreecommitdiffhomepage
path: root/cli-chansession.c
diff options
context:
space:
mode:
authorMatt Johnston <matt@ucc.asn.au>2006-03-21 16:16:41 +0000
committerMatt Johnston <matt@ucc.asn.au>2006-03-21 16:16:41 +0000
commitcdbe853595d1ba06be4127d86c60a9bc2e9e3545 (patch)
treec69a24fd85c5048ca1e0e138858ad9de04ba2373 /cli-chansession.c
parent3f49fc5f2ca0ec4adb5cac081f502cbb86702efa (diff)
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. --HG-- branch : dbclient-netcat-alike extra : convert_revision : d1f69334581dc4c35f9ca16aa5355074c9dd315d
Diffstat (limited to 'cli-chansession.c')
-rw-r--r--cli-chansession.c45
1 files changed, 43 insertions, 2 deletions
diff --git a/cli-chansession.c b/cli-chansession.c
index 6d358b7..76dbb3c 100644
--- a/cli-chansession.c
+++ b/cli-chansession.c
@@ -367,14 +367,55 @@ static int cli_initchansess(struct Channel *channel) {
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