Implemented ExitOnForwardFailure option for local and remote forwarding.

This commit is contained in:
Konstantin Tokarev
2015-11-30 20:30:58 +03:00
parent 1b69d6d658
commit 4dc1388ac7
4 changed files with 53 additions and 3 deletions

View File

@@ -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;
}
}