diff options
author | Konstantin Tokarev <ktokarev@smartlabs.tv> | 2015-11-30 20:30:58 +0300 |
---|---|---|
committer | Konstantin Tokarev <ktokarev@smartlabs.tv> | 2015-11-30 21:05:36 +0300 |
commit | 4dc1388ac76eee5af402eb751bcae4e38465a9ed (patch) | |
tree | 9440599f8f15f686256cfbf39df543fa8c476db4 /cli-tcpfwd.c | |
parent | 1b69d6d6582c75a6a667d7b2513c5dce3f5504f4 (diff) |
Implemented ExitOnForwardFailure option for local and remote forwarding.
Diffstat (limited to 'cli-tcpfwd.c')
-rw-r--r-- | cli-tcpfwd.c | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/cli-tcpfwd.c b/cli-tcpfwd.c index ec65f41..4d46b94 100644 --- a/cli-tcpfwd.c +++ b/cli-tcpfwd.c @@ -60,6 +60,22 @@ static const struct ChanType cli_chan_tcplocal = { }; #endif +#ifdef ENABLE_CLI_ANYTCPFWD +static void fwd_failed(const char* format, ...) ATTRIB_PRINTF(1,2); +void fwd_failed(const char* format, ...) +{ + va_list param; + va_start(param, format); + + if (cli_opts.exit_on_fwd_failure) + _dropbear_exit(EXIT_FAILURE, format, param); + else + _dropbear_log(LOG_WARNING, format, param); + + va_end(param); +} +#endif + #ifdef ENABLE_CLI_LOCALTCPFWD void setup_localtcp() { m_list_elem *iter; @@ -75,7 +91,7 @@ void setup_localtcp() { fwd->connectaddr, fwd->connectport); if (ret == DROPBEAR_FAILURE) { - dropbear_log(LOG_WARNING, "Failed local port forward %s:%d:%s:%d", + fwd_failed("Failed local port forward %s:%d:%s:%d", fwd->listenaddr, fwd->listenport, fwd->connectaddr, @@ -181,7 +197,10 @@ void cli_recv_msg_request_failure() { struct TCPFwdEntry *fwd = (struct TCPFwdEntry*)iter->item; if (!fwd->have_reply) { fwd->have_reply = 1; - dropbear_log(LOG_WARNING, "Remote TCP forward request failed (port %d -> %s:%d)", fwd->listenport, fwd->connectaddr, fwd->connectport); + fwd_failed("Remote TCP forward request failed (port %d -> %s:%d)", + fwd->listenport, + fwd->connectaddr, + fwd->connectport); return; } } |