summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Johnston <matt@ucc.asn.au>2005-12-06 16:51:55 +0000
committerMatt Johnston <matt@ucc.asn.au>2005-12-06 16:51:55 +0000
commit20c90f8f666f20ea0c8ebdbbc0c397cd79d9455b (patch)
treedc6bece4692049393b3d3ffd4990629c2c502ff5
parenteccfa7ceba8d3dee2c31801ae03d442ff7b79d4a (diff)
downloaddropbear-20c90f8f666f20ea0c8ebdbbc0c397cd79d9455b.tar.gz
* fix -L forwarding on the client, broke last rev
-rw-r--r--cli-tcpfwd.c1
-rw-r--r--svr-tcpfwd.c1
-rw-r--r--tcp-accept.c29
-rw-r--r--tcpfwd.h2
4 files changed, 24 insertions, 9 deletions
diff --git a/cli-tcpfwd.c b/cli-tcpfwd.c
index d8f1da6..c3bfd4d 100644
--- a/cli-tcpfwd.c
+++ b/cli-tcpfwd.c
@@ -107,6 +107,7 @@ static int cli_localtcp(unsigned int listenport, const char* remoteaddr,
tcpinfo->listenport = listenport;
tcpinfo->chantype = &cli_chan_tcplocal;
+ tcpinfo->tcp_type = direct;
ret = listen_tcpfwd(tcpinfo);
diff --git a/svr-tcpfwd.c b/svr-tcpfwd.c
index 6e70d67..53a115e 100644
--- a/svr-tcpfwd.c
+++ b/svr-tcpfwd.c
@@ -208,6 +208,7 @@ static int svr_remotetcpreq() {
tcpinfo->listenaddr = bindaddr;
tcpinfo->listenport = port;
tcpinfo->chantype = &svr_chan_tcpremote;
+ tcpinfo->tcp_type = forwarded;
ret = listen_tcpfwd(tcpinfo);
diff --git a/tcp-accept.c b/tcp-accept.c
index ac33566..90d72b3 100644
--- a/tcp-accept.c
+++ b/tcp-accept.c
@@ -65,15 +65,28 @@ static void tcp_acceptor(struct Listener *listener, int sock) {
}
if (send_msg_channel_open_init(fd, tcpinfo->chantype) == DROPBEAR_SUCCESS) {
-
- // address that was connected
- buf_putstring(ses.writepayload, tcpinfo->listenaddr,
- strlen(tcpinfo->listenaddr));
- // port that was connected
- buf_putint(ses.writepayload, tcpinfo->listenport);
- // originator ip
+ unsigned char* addr = NULL;
+ unsigned int port = 0;
+
+ if (tcpinfo->tcp_type == direct) {
+ /* "direct-tcpip" */
+ /* host to connect, port to connect */
+ addr = tcpinfo->sendaddr;
+ port = tcpinfo->sendport;
+ } else {
+ dropbear_assert(tcpinfo->tcp_type == forwarded);
+ /* "forwarded-tcpip" */
+ /* address that was connected, port that was connected */
+ addr = tcpinfo->listenaddr;
+ port = tcpinfo->listenport;
+ }
+
+ buf_putstring(ses.writepayload, addr, strlen(addr));
+ buf_putint(ses.writepayload, port);
+
+ /* originator ip */
buf_putstring(ses.writepayload, ipstring, strlen(ipstring));
- // originator port
+ /* originator port */
buf_putint(ses.writepayload, atol(portstring));
encrypt_packet();
diff --git a/tcpfwd.h b/tcpfwd.h
index e980ee2..28af029 100644
--- a/tcpfwd.h
+++ b/tcpfwd.h
@@ -40,7 +40,7 @@ struct TCPListener {
unsigned int listenport;
const struct ChanType *chantype;
-
+ enum {direct, forwarded} tcp_type;
};
/* A link in a list of forwards */