nc: don't redirect stderr to network in -e PROG mode

This in incompatible with nc-1.10, but makes a lot of sense.

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2013-02-28 11:09:14 +01:00
parent bc0ffc0e97
commit a14f319805

View File

@ -24,7 +24,7 @@
//config: Allow netcat to act as a server. //config: Allow netcat to act as a server.
//config: //config:
//config:config NC_EXTRA //config:config NC_EXTRA
//config: bool "Netcat extensions (-eiw and filename)" //config: bool "Netcat extensions (-eiw and -f FILE)"
//config: default y //config: default y
//config: depends on NC //config: depends on NC
//config: help //config: help
@ -60,17 +60,18 @@
//usage:#define nc_full_usage "\n\n" //usage:#define nc_full_usage "\n\n"
//usage: "Open a pipe to IP:PORT" IF_NC_EXTRA(" or FILE") //usage: "Open a pipe to IP:PORT" IF_NC_EXTRA(" or FILE")
//usage: NC_OPTIONS_STR //usage: NC_OPTIONS_STR
//usage: IF_NC_EXTRA(
//usage: "\n -e PROG Run PROG after connect"
//usage: IF_NC_SERVER( //usage: IF_NC_SERVER(
//usage: "\n -l Listen mode, for inbound connects" //usage: "\n -l Listen mode, for inbound connects"
//usage: IF_NC_EXTRA( //usage: IF_NC_EXTRA(
//usage: "\n (use -l twice with -e for persistent server)") //usage: "\n (use -ll with -e for persistent server)"
//usage: )
//usage: "\n -p PORT Local port" //usage: "\n -p PORT Local port"
//usage: ) //usage: )
//usage: "\n -w SEC Timeout for connect" //usage: IF_NC_EXTRA(
//usage: "\n -w SEC Connect timeout"
//usage: "\n -i SEC Delay interval for lines sent" //usage: "\n -i SEC Delay interval for lines sent"
//usage: "\n -f FILE Use file (ala /dev/ttyS0) instead of network" //usage: "\n -f FILE Use file (ala /dev/ttyS0) instead of network"
//usage: "\n -e PROG Run PROG after connect"
//usage: ) //usage: )
//usage: //usage:
//usage:#define nc_notes_usage "" //usage:#define nc_notes_usage ""
@ -147,7 +148,7 @@ int nc_main(int argc, char **argv)
*p++ = argv[optind++]; *p++ = argv[optind++];
} }
) )
/* optind points to argv[arvc] (NULL) now. /* optind points to argv[argc] (NULL) now.
** FIXME: we assume that getopt will not count options ** FIXME: we assume that getopt will not count options
** possibly present on "-e PROG ARGS" and will not ** possibly present on "-e PROG ARGS" and will not
** include them into final value of optind ** include them into final value of optind
@ -226,10 +227,9 @@ int nc_main(int argc, char **argv)
/* child, or main thread if only one -l */ /* child, or main thread if only one -l */
xmove_fd(cfd, 0); xmove_fd(cfd, 0);
xdup2(0, 1); xdup2(0, 1);
xdup2(0, 2); /*xdup2(0, 2); - original nc 1.10 does this, we don't */
IF_NC_EXTRA(BB_EXECVP(execparam[0], execparam);) IF_NC_EXTRA(BB_EXECVP(execparam[0], execparam);)
/* Don't print stuff or it will go over the wire... */ bb_perror_msg_and_die("can't execute '%s'", execparam[0]);
_exit(127);
} }
/* Select loop copying stdin to cfd, and cfd to stdout */ /* Select loop copying stdin to cfd, and cfd to stdout */