summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cli-tcpfwd.c2
-rw-r--r--svr-tcpfwd.c5
-rw-r--r--tcp-accept.c8
-rw-r--r--tcpfwd.h3
4 files changed, 12 insertions, 6 deletions
diff --git a/cli-tcpfwd.c b/cli-tcpfwd.c
index 662a407..aa112b2 100644
--- a/cli-tcpfwd.c
+++ b/cli-tcpfwd.c
@@ -135,7 +135,7 @@ static int cli_localtcp(const char* listenaddr,
tcpinfo->chantype = &cli_chan_tcplocal;
tcpinfo->tcp_type = direct;
- ret = listen_tcpfwd(tcpinfo);
+ ret = listen_tcpfwd(tcpinfo, NULL);
if (ret == DROPBEAR_FAILURE) {
m_free(tcpinfo);
diff --git a/svr-tcpfwd.c b/svr-tcpfwd.c
index cf6e07b..acdb59f 100644
--- a/svr-tcpfwd.c
+++ b/svr-tcpfwd.c
@@ -168,6 +168,7 @@ static int svr_remotetcpreq(int *allocated_listen_port) {
unsigned int addrlen;
struct TCPListener *tcpinfo = NULL;
unsigned int port;
+ struct Listener *listener = NULL;
TRACE(("enter remotetcpreq"))
@@ -208,9 +209,9 @@ static int svr_remotetcpreq(int *allocated_listen_port) {
tcpinfo->listenaddr = m_strdup(request_addr);
}
- ret = listen_tcpfwd(tcpinfo);
+ ret = listen_tcpfwd(tcpinfo, &listener);
if (DROPBEAR_SUCCESS == ret) {
- tcpinfo->listenport = get_sock_port(ses.listeners[0]->socks[0]);
+ tcpinfo->listenport = get_sock_port(listener->socks[0]);
*allocated_listen_port = tcpinfo->listenport;
}
diff --git a/tcp-accept.c b/tcp-accept.c
index 18cd8c6..6578d71 100644
--- a/tcp-accept.c
+++ b/tcp-accept.c
@@ -110,12 +110,12 @@ static void tcp_acceptor(const struct Listener *listener, int sock) {
}
}
-int listen_tcpfwd(struct TCPListener* tcpinfo) {
+int listen_tcpfwd(struct TCPListener* tcpinfo, struct Listener **ret_listener) {
char portstring[NI_MAXSERV];
int socks[DROPBEAR_MAX_SOCKS];
- struct Listener *listener = NULL;
int nsocks;
+ struct Listener *listener;
char* errstring = NULL;
TRACE(("enter listen_tcpfwd"))
@@ -142,6 +142,10 @@ int listen_tcpfwd(struct TCPListener* tcpinfo) {
return DROPBEAR_FAILURE;
}
+ if (ret_listener) {
+ *ret_listener = listener;
+ }
+
TRACE(("leave listen_tcpfwd: success"))
return DROPBEAR_SUCCESS;
}
diff --git a/tcpfwd.h b/tcpfwd.h
index 3fce879..fa81fa4 100644
--- a/tcpfwd.h
+++ b/tcpfwd.h
@@ -26,6 +26,7 @@
#include "channel.h"
#include "list.h"
+#include "listener.h"
struct TCPListener {
@@ -69,7 +70,7 @@ void cli_recv_msg_request_success(void);
void cli_recv_msg_request_failure(void);
/* Common */
-int listen_tcpfwd(struct TCPListener* tcpinfo);
+int listen_tcpfwd(struct TCPListener* tcpinfo, struct Listener **ret_listener);
int tcp_prio_inithandler(struct Channel* chan);
/* A random identifier */