Magellan Linux

Diff of /tags/mkinitrd-6_3_1/busybox/networking/nc.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 984 by niro, Sun May 30 11:32:42 2010 UTC revision 1123 by niro, Wed Aug 18 21:56:57 2010 UTC
# Line 9  Line 9 
9    
10  #include "libbb.h"  #include "libbb.h"
11    
12  #if ENABLE_DESKTOP  //config:config NC
13  #include "nc_bloaty.c"  //config: bool "nc"
14    //config: default y
15    //config: help
16    //config:  A simple Unix utility which reads and writes data across network
17    //config:  connections.
18    //config:
19    //config:config NC_SERVER
20    //config: bool "Netcat server options (-l)"
21    //config: default y
22    //config: depends on NC
23    //config: help
24    //config:  Allow netcat to act as a server.
25    //config:
26    //config:config NC_EXTRA
27    //config: bool "Netcat extensions (-eiw and filename)"
28    //config: default y
29    //config: depends on NC
30    //config: help
31    //config:  Add -e (support for executing the rest of the command line after
32    //config:  making or receiving a successful connection), -i (delay interval for
33    //config:  lines sent), -w (timeout for initial connection).
34    //config:
35    //config:config NC_110_COMPAT
36    //config: bool "Netcat 1.10 compatibility (+2.5k)"
37    //config: default n  # off specially for Rob
38    //config: depends on NC
39    //config: help
40    //config:  This option makes nc closely follow original nc-1.10.
41    //config:  The code is about 2.5k bigger. It enables
42    //config:  -s ADDR, -n, -u, -v, -o FILE, -z options, but loses
43    //config:  busybox-specific extensions: -f FILE and -ll.
44    
45    #if ENABLE_NC_110_COMPAT
46    # include "nc_bloaty.c"
47  #else  #else
48    
49    //usage:#if !ENABLE_NC_110_COMPAT
50    //usage:
51    //usage:#if ENABLE_NC_SERVER || ENABLE_NC_EXTRA
52    //usage:#define NC_OPTIONS_STR "\n\nOptions:"
53    //usage:#else
54    //usage:#define NC_OPTIONS_STR
55    //usage:#endif
56    //usage:
57    //usage:#define nc_trivial_usage
58    //usage: IF_NC_EXTRA("[-iN] [-wN] ")IF_NC_SERVER("[-l] [-p PORT] ")
59    //usage:       "["IF_NC_EXTRA("-f FILE|")"IPADDR PORT]"IF_NC_EXTRA(" [-e PROG]")
60    //usage:#define nc_full_usage "\n\n"
61    //usage:       "Open a pipe to IP:PORT" IF_NC_EXTRA(" or FILE")
62    //usage: NC_OPTIONS_STR
63    //usage: IF_NC_EXTRA(
64    //usage:     "\n -e PROG Run PROG after connect"
65    //usage: IF_NC_SERVER(
66    //usage:     "\n -l Listen mode, for inbound connects"
67    //usage: IF_NC_EXTRA(
68    //usage:     "\n (use -l twice with -e for persistent server)")
69    //usage:     "\n -p PORT Local port"
70    //usage: )
71    //usage:     "\n -w SEC Timeout for connect"
72    //usage:     "\n -i SEC Delay interval for lines sent"
73    //usage:     "\n -f FILE Use file (ala /dev/ttyS0) instead of network"
74    //usage: )
75    //usage:
76    //usage:#define nc_notes_usage ""
77    //usage: IF_NC_EXTRA(
78    //usage:       "To use netcat as a terminal emulator on a serial port:\n\n"
79    //usage:       "$ stty 115200 -F /dev/ttyS0\n"
80    //usage:       "$ stty raw -echo -ctlecho && nc -f /dev/ttyS0\n"
81    //usage: )
82    //usage:
83    //usage:#define nc_example_usage
84    //usage:       "$ nc foobar.somedomain.com 25\n"
85    //usage:       "220 foobar ESMTP Exim 3.12 #1 Sat, 15 Apr 2000 00:03:02 -0600\n"
86    //usage:       "help\n"
87    //usage:       "214-Commands supported:\n"
88    //usage:       "214-    HELO EHLO MAIL RCPT DATA AUTH\n"
89    //usage:       "214     NOOP QUIT RSET HELP\n"
90    //usage:       "quit\n"
91    //usage:       "221 foobar closing connection\n"
92    //usage:
93    //usage:#endif
94    
95  /* Lots of small differences in features  /* Lots of small differences in features
96   * when compared to "standard" nc   * when compared to "standard" nc
97   */   */
# Line 39  int nc_main(int argc, char **argv) Line 118  int nc_main(int argc, char **argv)
118    
119   if (ENABLE_NC_SERVER || ENABLE_NC_EXTRA) {   if (ENABLE_NC_SERVER || ENABLE_NC_EXTRA) {
120   /* getopt32 is _almost_ usable:   /* getopt32 is _almost_ usable:
121   ** it cannot handle "... -e prog -prog-opt" */   ** it cannot handle "... -e PROG -prog-opt" */
122   while ((opt = getopt(argc, argv,   while ((opt = getopt(argc, argv,
123          "" IF_NC_SERVER("lp:") IF_NC_EXTRA("w:i:f:e:") )) > 0          "" IF_NC_SERVER("lp:") IF_NC_EXTRA("w:i:f:e:") )) > 0
124   ) {   ) {
# Line 57  int nc_main(int argc, char **argv) Line 136  int nc_main(int argc, char **argv)
136   /* We cannot just 'break'. We should let getopt finish.   /* We cannot just 'break'. We should let getopt finish.
137   ** Or else we won't be able to find where   ** Or else we won't be able to find where
138   ** 'host' and 'port' params are   ** 'host' and 'port' params are
139   ** (think "nc -w 60 host port -e prog"). */   ** (think "nc -w 60 host port -e PROG"). */
140   IF_NC_EXTRA(   IF_NC_EXTRA(
141   char **p;   char **p;
142   // +2: one for progname (optarg) and one for NULL   // +2: one for progname (optarg) and one for NULL
# Line 70  int nc_main(int argc, char **argv) Line 149  int nc_main(int argc, char **argv)
149   )   )
150   /* optind points to argv[arvc] (NULL) now.   /* optind points to argv[arvc] (NULL) now.
151   ** FIXME: we assume that getopt will not count options   ** FIXME: we assume that getopt will not count options
152   ** possibly present on "-e prog args" and will not   ** possibly present on "-e PROG ARGS" and will not
153   ** include them into final value of optind   ** include them into final value of optind
154   ** which is to be used ...  */   ** which is to be used ...  */
155   } else bb_show_usage();   } else bb_show_usage();
# Line 137  int nc_main(int argc, char **argv) Line 216  int nc_main(int argc, char **argv)
216   if (execparam) {   if (execparam) {
217   pid_t pid;   pid_t pid;
218   /* With more than one -l, repeatedly act as server */   /* With more than one -l, repeatedly act as server */
219   if (do_listen > 1 && (pid = vfork()) != 0) {   if (do_listen > 1 && (pid = xvfork()) != 0) {
220   /* parent or error */   /* parent */
  if (pid < 0)  
  bb_perror_msg_and_die("vfork");  
221   /* prevent zombies */   /* prevent zombies */
222   signal(SIGCHLD, SIG_IGN);   signal(SIGCHLD, SIG_IGN);
223   close(cfd);   close(cfd);

Legend:
Removed from v.984  
changed lines
  Added in v.1123