make the exec (-e) an optional feature of netcat

This commit is contained in:
Mike Frysinger 2005-05-06 05:00:34 +00:00
parent 60a5c38a4b
commit 7dc7f402a7
3 changed files with 28 additions and 18 deletions

View File

@ -1824,6 +1824,11 @@
" or\n" \ " or\n" \
"$ nameif -c /etc/my_mactab_file\n" \ "$ nameif -c /etc/my_mactab_file\n" \
#ifdef CONFIG_NC_GAPING_SECURITY_HOLE
# define USAGE_NC_EXEC(a) a
#else
# define USAGE_NC_EXEC(a)
#endif
#define nc_trivial_usage \ #define nc_trivial_usage \
"[OPTIONS] [IP] [port]" "[OPTIONS] [IP] [port]"
#define nc_full_usage \ #define nc_full_usage \
@ -1832,8 +1837,10 @@
"\t-l\t\tlisten mode, for inbound connects\n" \ "\t-l\t\tlisten mode, for inbound connects\n" \
"\t-p PORT\t\tlocal port number\n" \ "\t-p PORT\t\tlocal port number\n" \
"\t-i SECS\t\tdelay interval for lines sent\n" \ "\t-i SECS\t\tdelay interval for lines sent\n" \
"\t-w SECS\t\ttimeout for connects and final net reads\n" \ USAGE_NC_EXEC( \
"\t-e PROG\t\tprogram to exec after connect (dangerous!)" "\t-e PROG\t\tprogram to exec after connect (dangerous!)\n" \
) \
"\t-w SECS\t\ttimeout for connects and final net reads"
#define nc_example_usage \ #define nc_example_usage \
"$ nc foobar.somedomain.com 25\n" \ "$ nc foobar.somedomain.com 25\n" \
"220 foobar ESMTP Exim 3.12 #1 Sat, 15 Apr 2000 00:03:02 -0600\n" \ "220 foobar ESMTP Exim 3.12 #1 Sat, 15 Apr 2000 00:03:02 -0600\n" \

View File

@ -422,6 +422,14 @@ config CONFIG_NC
A simple Unix utility which reads and writes data across network A simple Unix utility which reads and writes data across network
connections. connections.
config CONFIG_NC_GAPING_SECURITY_HOLE
bool "gaping security hole"
default n
depends on CONFIG_NC
help
Add support for executing a program after making or receiving a
successful connection (-e option).
config CONFIG_NETSTAT config CONFIG_NETSTAT
bool "netstat" bool "netstat"
default n default n

View File

@ -4,7 +4,7 @@
0.0.1 6K It works. 0.0.1 6K It works.
0.0.2 5K Smaller and you can also check the exit condition if you wish. 0.0.2 5K Smaller and you can also check the exit condition if you wish.
0.0.3 Uses select() 0.0.3 Uses select()
19980918 Busy Boxed! Dave Cinege 19980918 Busy Boxed! Dave Cinege
19990512 Uses Select. Charles P. Wright 19990512 Uses Select. Charles P. Wright
@ -23,7 +23,6 @@
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/ */
#include <stdio.h> #include <stdio.h>
@ -41,8 +40,6 @@
#include <sys/ioctl.h> #include <sys/ioctl.h>
#include "busybox.h" #include "busybox.h"
#define GAPING_SECURITY_HOLE
static void timeout(int signum) static void timeout(int signum)
{ {
bb_error_msg_and_die("Timed out"); bb_error_msg_and_die("Timed out");
@ -52,8 +49,8 @@ int nc_main(int argc, char **argv)
{ {
int do_listen = 0, lport = 0, delay = 0, wsecs = 0, tmpfd, opt, sfd, x; int do_listen = 0, lport = 0, delay = 0, wsecs = 0, tmpfd, opt, sfd, x;
char buf[BUFSIZ]; char buf[BUFSIZ];
#ifdef GAPING_SECURITY_HOLE #ifdef CONFIG_NC_GAPING_SECURITY_HOLE
char * pr00gie = NULL; char *pr00gie = NULL;
#endif #endif
struct sockaddr_in address; struct sockaddr_in address;
@ -72,7 +69,7 @@ int nc_main(int argc, char **argv)
case 'i': case 'i':
delay = atoi(optarg); delay = atoi(optarg);
break; break;
#ifdef GAPING_SECURITY_HOLE #ifdef CONFIG_NC_GAPING_SECURITY_HOLE
case 'e': case 'e':
pr00gie = optarg; pr00gie = optarg;
break; break;
@ -85,13 +82,12 @@ int nc_main(int argc, char **argv)
} }
} }
#ifdef GAPING_SECURITY_HOLE #ifdef CONFIG_NC_GAPING_SECURITY_HOLE
if (pr00gie) { if (pr00gie) {
/* won't need stdin */ /* won't need stdin */
close (STDIN_FILENO); close (STDIN_FILENO);
} }
#endif /* GAPING_SECURITY_HOLE */ #endif /* CONFIG_NC_GAPING_SECURITY_HOLE */
if ((do_listen && optind != argc) || (!do_listen && optind + 2 != argc)) if ((do_listen && optind != argc) || (!do_listen && optind + 2 != argc))
bb_show_usage(); bb_show_usage();
@ -142,19 +138,18 @@ int nc_main(int argc, char **argv)
signal(SIGALRM, SIG_DFL); signal(SIGALRM, SIG_DFL);
} }
#ifdef GAPING_SECURITY_HOLE #ifdef CONFIG_NC_GAPING_SECURITY_HOLE
/* -e given? */ /* -e given? */
if (pr00gie) { if (pr00gie) {
dup2(sfd, 0); dup2(sfd, 0);
close(sfd); close(sfd);
dup2 (0, 1); dup2(0, 1);
dup2 (0, 2); dup2(0, 2);
execl (pr00gie, pr00gie, NULL); execl(pr00gie, pr00gie, NULL);
/* Don't print stuff or it will go over the wire.... */ /* Don't print stuff or it will go over the wire.... */
_exit(-1); _exit(-1);
} }
#endif /* GAPING_SECURITY_HOLE */ #endif /* CONFIG_NC_GAPING_SECURITY_HOLE */
FD_ZERO(&readfds); FD_ZERO(&readfds);
FD_SET(sfd, &readfds); FD_SET(sfd, &readfds);