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 */