[git commit master 1/1] nc: introduce CONFIG_NC_110_COMPAT option.

Denys Vlasenko vda.linux at googlemail.com
Sun Jun 27 02:22:02 UTC 2010


commit: http://git.busybox.net/busybox/commit/?id=77cc2c5738d780b97b56af49510ed64d61ad2e2d
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 include/usage.src.h    |   78 ------------------------------------------
 networking/Config.src  |   23 ------------
 networking/nc.c        |   89 +++++++++++++++++++++++++++++++++++++++++++++---
 networking/nc_bloaty.c |   40 ++++++++++++++++++++-
 4 files changed, 122 insertions(+), 108 deletions(-)

diff --git a/include/usage.src.h b/include/usage.src.h
index f84bb93..6d17ab5 100644
--- a/include/usage.src.h
+++ b/include/usage.src.h
@@ -2954,84 +2954,6 @@ INSERT
        " or\n" \
        "$ nameif -c /etc/my_mactab_file\n" \
 
-#if !ENABLE_DESKTOP
-
-#if ENABLE_NC_SERVER || ENABLE_NC_EXTRA
-#define NC_OPTIONS_STR "\n\nOptions:"
-#else
-#define NC_OPTIONS_STR
-#endif
-
-#define nc_trivial_usage \
-	IF_NC_EXTRA("[-iN] [-wN] ")IF_NC_SERVER("[-l] [-p PORT] ") \
-       "["IF_NC_EXTRA("-f FILENAME|")"IPADDR PORT]"IF_NC_EXTRA(" [-e PROG]")
-#define nc_full_usage "\n\n" \
-       "Open a pipe to IP:port" IF_NC_EXTRA(" or file") \
-	NC_OPTIONS_STR \
-	IF_NC_EXTRA( \
-     "\n	-e PROG	Run PROG after connect" \
-     "\n	-i SEC	Delay interval for lines sent" \
-     "\n	-w SEC	Timeout for connect" \
-     "\n	-f FILE	Use file (ala /dev/ttyS0) instead of network" \
-	) \
-	IF_NC_SERVER( \
-     "\n	-l	Listen mode, for inbound connects" \
-	IF_NC_EXTRA( \
-     "\n		(use -l twice with -e for persistent server)") \
-     "\n	-p PORT	Local port" \
-	)
-
-#define nc_notes_usage "" \
-	IF_NC_EXTRA( \
-       "To use netcat as a terminal emulator on a serial port:\n\n" \
-       "$ stty 115200 -F /dev/ttyS0\n" \
-       "$ stty raw -echo -ctlecho && nc -f /dev/ttyS0\n" \
-	)
-
-#define nc_example_usage \
-       "$ nc foobar.somedomain.com 25\n" \
-       "220 foobar ESMTP Exim 3.12 #1 Sat, 15 Apr 2000 00:03:02 -0600\n" \
-       "help\n" \
-       "214-Commands supported:\n" \
-       "214-    HELO EHLO MAIL RCPT DATA AUTH\n" \
-       "214     NOOP QUIT RSET HELP\n" \
-       "quit\n" \
-       "221 foobar closing connection\n"
-
-#else /* DESKTOP nc - much more compatible with nc 1.10 */
-
-#define nc_trivial_usage \
-       "[OPTIONS] HOST PORT  - connect" \
-	IF_NC_SERVER("\n" \
-       "nc [OPTIONS] -l -p PORT [HOST] [PORT]  - listen")
-#define nc_full_usage "\n\n" \
-       "Options:" \
-     "\n	-e PROG		Run PROG after connect (must be last)" \
-	IF_NC_SERVER( \
-     "\n	-l		Listen mode, for inbound connects" \
-	) \
-     "\n	-n		Don't do DNS resolution" \
-     "\n	-s ADDR		Local address" \
-     "\n	-p PORT		Local port" \
-     "\n	-u		UDP mode" \
-     "\n	-v		Verbose" \
-     "\n	-w SEC		Timeout for connects and final net reads" \
-	IF_NC_EXTRA( \
-     "\n	-i SEC		Delay interval for lines sent" /* ", ports scanned" */ \
-     "\n	-o FILE		Hex dump traffic" \
-     "\n	-z		Zero-I/O mode (scanning)" \
-	) \
-/*   "\n	-r		Randomize local and remote ports" */
-/*   "\n	-g gateway	Source-routing hop point[s], up to 8" */
-/*   "\n	-G num		Source-routing pointer: 4, 8, 12, ..." */
-/*   "\nport numbers can be individual or ranges: lo-hi [inclusive]" */
-
-/* -e PROG can take ARGS too: "nc ... -e ls -l", but we don't document it
- * in help text: nc 1.10 does not allow that. We don't want to entice
- * users to use this incompatibility */
-
-#endif
-
 #define netstat_trivial_usage \
        "[-laentuwxr"IF_FEATURE_NETSTAT_WIDE("W")IF_FEATURE_NETSTAT_PRG("p")"]"
 #define netstat_full_usage "\n\n" \
diff --git a/networking/Config.src b/networking/Config.src
index ebad9e5..4494362 100644
--- a/networking/Config.src
+++ b/networking/Config.src
@@ -623,29 +623,6 @@ config FEATURE_NAMEIF_EXTENDED
 	    new_interface_name  mac=00:80:C8:38:91:B5
 	    new_interface_name  00:80:C8:38:91:B5
 
-config NC
-	bool "nc"
-	default y
-	help
-	  A simple Unix utility which reads and writes data across network
-	  connections.
-
-config NC_SERVER
-	bool "Netcat server options (-l)"
-	default y
-	depends on NC
-	help
-	  Allow netcat to act as a server.
-
-config NC_EXTRA
-	bool "Netcat extensions (-eiw and filename)"
-	default y
-	depends on NC
-	help
-	  Add -e (support for executing the rest of the command line after
-	  making or receiving a successful connection), -i (delay interval for
-	  lines sent), -w (timeout for initial connection).
-
 config NETSTAT
 	bool "netstat"
 	default y
diff --git a/networking/nc.c b/networking/nc.c
index 243c479..5fd8bd7 100644
--- a/networking/nc.c
+++ b/networking/nc.c
@@ -9,10 +9,89 @@
 
 #include "libbb.h"
 
-#if ENABLE_DESKTOP
-#include "nc_bloaty.c"
+//config:config NC
+//config:	bool "nc"
+//config:	default y
+//config:	help
+//config:	  A simple Unix utility which reads and writes data across network
+//config:	  connections.
+//config:
+//config:config NC_SERVER
+//config:	bool "Netcat server options (-l)"
+//config:	default y
+//config:	depends on NC
+//config:	help
+//config:	  Allow netcat to act as a server.
+//config:
+//config:config NC_EXTRA
+//config:	bool "Netcat extensions (-eiw and filename)"
+//config:	default y
+//config:	depends on NC
+//config:	help
+//config:	  Add -e (support for executing the rest of the command line after
+//config:	  making or receiving a successful connection), -i (delay interval for
+//config:	  lines sent), -w (timeout for initial connection).
+//config:
+//config:config NC_110_COMPAT
+//config:	bool "Netcat 1.10 compatibility (+2.5k)"
+//config:	default y
+//config:	depends on NC
+//config:	help
+//config:	  This option makes nc closely follow original nc-1.10.
+//config:	  The code is about 2.5k bigger. It enables
+//config:	  -s ADDR, -n, -u, -v, -o FILE, -z options, but loses
+//config:	  busybox-specific extensions: -f FILE and -ll.
+
+#if ENABLE_NC_110_COMPAT
+# include "nc_bloaty.c"
 #else
 
+//usage:#if !ENABLE_NC_110_COMPAT
+//usage:
+//usage:#if ENABLE_NC_SERVER || ENABLE_NC_EXTRA
+//usage:#define NC_OPTIONS_STR "\n\nOptions:"
+//usage:#else
+//usage:#define NC_OPTIONS_STR
+//usage:#endif
+//usage:
+//usage:#define nc_trivial_usage
+//usage:	IF_NC_EXTRA("[-iN] [-wN] ")IF_NC_SERVER("[-l] [-p PORT] ")
+//usage:       "["IF_NC_EXTRA("-f FILE|")"IPADDR PORT]"IF_NC_EXTRA(" [-e PROG]")
+//usage:#define nc_full_usage "\n\n"
+//usage:       "Open a pipe to IP:PORT" IF_NC_EXTRA(" or FILE")
+//usage:	NC_OPTIONS_STR
+//usage:	IF_NC_EXTRA(
+//usage:     "\n	-e PROG	Run PROG after connect"
+//usage:	IF_NC_SERVER(
+//usage:     "\n	-l	Listen mode, for inbound connects"
+//usage:	IF_NC_EXTRA(
+//usage:     "\n		(use -l twice with -e for persistent server)")
+//usage:     "\n	-p PORT	Local port"
+//usage:	)
+//usage:     "\n	-w SEC	Timeout for connect"
+//usage:     "\n	-i SEC	Delay interval for lines sent"
+//usage:     "\n	-f FILE	Use file (ala /dev/ttyS0) instead of network"
+//usage:	)
+//usage:
+//usage:#define nc_notes_usage ""
+//usage:	IF_NC_EXTRA(
+//usage:       "To use netcat as a terminal emulator on a serial port:\n\n"
+//usage:       "$ stty 115200 -F /dev/ttyS0\n"
+//usage:       "$ stty raw -echo -ctlecho && nc -f /dev/ttyS0\n"
+//usage:	)
+//usage:
+//usage:#define nc_example_usage
+//usage:       "$ nc foobar.somedomain.com 25\n"
+//usage:       "220 foobar ESMTP Exim 3.12 #1 Sat, 15 Apr 2000 00:03:02 -0600\n"
+//usage:       "help\n"
+//usage:       "214-Commands supported:\n"
+//usage:       "214-    HELO EHLO MAIL RCPT DATA AUTH\n"
+//usage:       "214     NOOP QUIT RSET HELP\n"
+//usage:       "quit\n"
+//usage:       "221 foobar closing connection\n"
+//usage:
+//usage:#endif
+
 /* Lots of small differences in features
  * when compared to "standard" nc
  */
@@ -39,7 +118,7 @@ int nc_main(int argc, char **argv)
 
 	if (ENABLE_NC_SERVER || ENABLE_NC_EXTRA) {
 		/* getopt32 is _almost_ usable:
-		** it cannot handle "... -e prog -prog-opt" */
+		** it cannot handle "... -e PROG -prog-opt" */
 		while ((opt = getopt(argc, argv,
 		        "" IF_NC_SERVER("lp:") IF_NC_EXTRA("w:i:f:e:") )) > 0
 		) {
@@ -57,7 +136,7 @@ int nc_main(int argc, char **argv)
 				/* We cannot just 'break'. We should let getopt finish.
 				** Or else we won't be able to find where
 				** 'host' and 'port' params are
-				** (think "nc -w 60 host port -e prog"). */
+				** (think "nc -w 60 host port -e PROG"). */
 				IF_NC_EXTRA(
 					char **p;
 					// +2: one for progname (optarg) and one for NULL
@@ -70,7 +149,7 @@ int nc_main(int argc, char **argv)
 				)
 				/* optind points to argv[arvc] (NULL) now.
 				** 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
 				** which is to be used ...  */
 			} else bb_show_usage();
diff --git a/networking/nc_bloaty.c b/networking/nc_bloaty.c
index 8d27e96..c44133b 100644
--- a/networking/nc_bloaty.c
+++ b/networking/nc_bloaty.c
@@ -36,9 +36,9 @@
  * - source routing
  * - multiple DNS checks
  * Functionalty which is different from nc 1.10:
- * - Prog in '-e prog' can have prog's parameters and options.
+ * - Prog in '-e PROG' can have prog's parameters and options.
  *   Because of this -e option must be last.
- * - nc doesn't redirect stderr to the network socket for the -e prog.
+ * - nc doesn't redirect stderr to the network socket for the -e PROG.
  * - numeric addresses are printed in (), not [] (IPv6 looks better),
  *   port numbers are inside (): (1.2.3.4:5678)
  * - network read errors are reported on verbose levels > 1
@@ -50,6 +50,42 @@
 
 /* done in nc.c: #include "libbb.h" */
 
+//usage:#if ENABLE_NC_110_COMPAT
+//usage:
+//usage:#define nc_trivial_usage
+//usage:       "[OPTIONS] HOST PORT  - connect"
+//usage:	IF_NC_SERVER("\n"
+//usage:       "nc [OPTIONS] -l -p PORT [HOST] [PORT]  - listen")
+//usage:#define nc_full_usage "\n\n"
+//usage:       "Options:"
+//usage:     "\n	-e PROG	Run PROG after connect (must be last)"
+//usage:	IF_NC_SERVER(
+//usage:     "\n	-l	Listen mode, for inbound connects"
+//usage:	)
+//usage:     "\n	-p PORT	Local port"
+//usage:     "\n	-s ADDR	Local address"
+//usage:     "\n	-w SEC	Timeout for connects and final net reads"
+//usage:	IF_NC_EXTRA(
+//usage:     "\n	-i SEC	Delay interval for lines sent" /* ", ports scanned" */
+//usage:	)
+//usage:     "\n	-n	Don't do DNS resolution"
+//usage:     "\n	-u	UDP mode"
+//usage:     "\n	-v	Verbose"
+//usage:	IF_NC_EXTRA(
+//usage:     "\n	-o FILE	Hex dump traffic"
+//usage:     "\n	-z	Zero-I/O mode (scanning)"
+//usage:	)
+//usage:#endif
+
+/*   "\n	-r		Randomize local and remote ports" */
+/*   "\n	-g gateway	Source-routing hop point[s], up to 8" */
+/*   "\n	-G num		Source-routing pointer: 4, 8, 12, ..." */
+/*   "\nport numbers can be individual or ranges: lo-hi [inclusive]" */
+
+/* -e PROG can take ARGS too: "nc ... -e ls -l", but we don't document it
+ * in help text: nc 1.10 does not allow that. We don't want to entice
+ * users to use this incompatibility */
+
 enum {
 	SLEAZE_PORT = 31337,               /* for UDP-scan RTT trick, change if ya want */
 	BIGSIZ = 8192,                     /* big buffers */
-- 
1.7.1



More information about the busybox-cvs mailing list