nc: introduce CONFIG_NC_110_COMPAT option.
authorDenys Vlasenko <vda.linux@googlemail.com>
Sun, 27 Jun 2010 02:22:02 +0000 (04:22 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Sun, 27 Jun 2010 02:22:02 +0000 (04:22 +0200)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
include/usage.src.h
networking/Config.src
networking/nc.c
networking/nc_bloaty.c

index f84bb93c73ceee03765149dec4b925b6a734b415..6d17ab571c2834da080796d7d72bfb4af66b3099 100644 (file)
@@ -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" \
index ebad9e5989d406fc81f2d55b5f2fbd50a63413cf..449436247c291cdbe5675f44523d32abfdc03864 100644 (file)
@@ -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
index 243c47976b9e6a0f5e1ad183840c5cb39f353314..5fd8bd759b836231a062e995e4367aa11dc8763e 100644 (file)
@@ -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();
index 8d27e968298c42e0621f2bd3d424c897c9c780f1..c44133b5d15a163b35048078f1c755b880667440 100644 (file)
@@ -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
 
 /* 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 */