X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=networking%2Finetd.c;h=67984accb56f297babb293b43af66cf8cd5cdc0c;hb=9a4100cf53f75356854ce752374babf8135c3f42;hp=aa35ffa2b879414634bb145a246ac10168b68ac5;hpb=e6a2f4cc5a47d3022bdf5ca2cacbaa5a8c5baf7a;p=oweals%2Fbusybox.git diff --git a/networking/inetd.c b/networking/inetd.c index aa35ffa2b..67984accb 100644 --- a/networking/inetd.c +++ b/networking/inetd.c @@ -153,6 +153,76 @@ * setgid(specified group) * setuid() */ +//config:config INETD +//config: bool "inetd (18 kb)" +//config: default y +//config: select FEATURE_SYSLOG +//config: help +//config: Internet superserver daemon +//config: +//config:config FEATURE_INETD_SUPPORT_BUILTIN_ECHO +//config: bool "Support echo service on port 7" +//config: default y +//config: depends on INETD +//config: help +//config: Internal service which echoes data back. +//config: Activated by configuration lines like these: +//config: echo stream tcp nowait root internal +//config: echo dgram udp wait root internal +//config: +//config:config FEATURE_INETD_SUPPORT_BUILTIN_DISCARD +//config: bool "Support discard service on port 8" +//config: default y +//config: depends on INETD +//config: help +//config: Internal service which discards all input. +//config: Activated by configuration lines like these: +//config: discard stream tcp nowait root internal +//config: discard dgram udp wait root internal +//config: +//config:config FEATURE_INETD_SUPPORT_BUILTIN_TIME +//config: bool "Support time service on port 37" +//config: default y +//config: depends on INETD +//config: help +//config: Internal service which returns big-endian 32-bit number +//config: of seconds passed since 1900-01-01. The number wraps around +//config: on overflow. +//config: Activated by configuration lines like these: +//config: time stream tcp nowait root internal +//config: time dgram udp wait root internal +//config: +//config:config FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME +//config: bool "Support daytime service on port 13" +//config: default y +//config: depends on INETD +//config: help +//config: Internal service which returns human-readable time. +//config: Activated by configuration lines like these: +//config: daytime stream tcp nowait root internal +//config: daytime dgram udp wait root internal +//config: +//config:config FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN +//config: bool "Support chargen service on port 19" +//config: default y +//config: depends on INETD +//config: help +//config: Internal service which generates endless stream +//config: of all ASCII chars beetween space and char 126. +//config: Activated by configuration lines like these: +//config: chargen stream tcp nowait root internal +//config: chargen dgram udp wait root internal +//config: +//config:config FEATURE_INETD_RPC +//config: bool "Support RPC services" +//config: default n # very rarely used, and needs Sun RPC support in libc +//config: depends on INETD +//config: help +//config: Support Sun-RPC based services + +//applet:IF_INETD(APPLET(inetd, BB_DIR_USR_SBIN, BB_SUID_DROP)) + +//kbuild:lib-$(CONFIG_INETD) += inetd.o //usage:#define inetd_trivial_usage //usage: "[-fe] [-q N] [-R N] [CONFFILE]" @@ -160,9 +230,10 @@ //usage: "Listen for network connections and launch programs\n" //usage: "\n -f Run in foreground" //usage: "\n -e Log to stderr" -//usage: "\n -q N Socket listen queue (default: 128)" +//usage: "\n -q N Socket listen queue (default 128)" //usage: "\n -R N Pause services after N connects/min" -//usage: "\n (default: 0 - disabled)" +//usage: "\n (default 0 - disabled)" +//usage: "\n Default CONFFILE is /etc/inetd.conf" #include #include /* setrlimit */ @@ -174,7 +245,8 @@ #if ENABLE_FEATURE_INETD_RPC # if defined(__UCLIBC__) && ! defined(__UCLIBC_HAS_RPC__) -# error "You need to build uClibc with UCLIBC_HAS_RPC for NFS support" +# warning "You probably need to build uClibc with UCLIBC_HAS_RPC for NFS support" + /* not #error, since user may be using e.g. libtirpc instead */ # endif # include # include @@ -350,6 +422,7 @@ enum { LINE_SIZE = COMMON_BUFSIZE - offsetof(struct globals, line) }; #define allsock (G.allsock ) #define line (G.line ) #define INIT_G() do { \ + setup_common_bufsiz(); \ BUILD_BUG_ON(sizeof(G) > COMMON_BUFSIZE); \ rlim_ofile_cur = OPEN_MAX; \ global_queuelen = 128; \ @@ -1152,8 +1225,8 @@ int inetd_main(int argc UNUSED_PARAM, char **argv) if (real_uid != 0) /* run by non-root user */ config_filename = NULL; - opt_complementary = "R+:q+"; /* -q N, -R N */ - opt = getopt32(argv, "R:feq:", &max_concurrency, &global_queuelen); + /* -q N, -R N */ + opt = getopt32(argv, "R:+feq:+", &max_concurrency, &global_queuelen); argv += optind; //argc -= optind; if (argv[0]) @@ -1459,8 +1532,11 @@ int inetd_main(int argc UNUSED_PARAM, char **argv) } /* for (;;) */ } -#if !BB_MMU +#if ENABLE_FEATURE_INETD_SUPPORT_BUILTIN_ECHO \ + || ENABLE_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD +# if !BB_MMU static const char *const cat_args[] = { "cat", NULL }; +# endif #endif /* @@ -1471,14 +1547,14 @@ static const char *const cat_args[] = { "cat", NULL }; /* ARGSUSED */ static void FAST_FUNC echo_stream(int s, servtab_t *sep UNUSED_PARAM) { -#if BB_MMU +# if BB_MMU while (1) { ssize_t sz = safe_read(s, line, LINE_SIZE); if (sz <= 0) break; xwrite(s, line, sz); } -#else +# else /* We are after vfork here! */ /* move network socket to stdin/stdout */ xmove_fd(s, STDIN_FILENO); @@ -1488,7 +1564,7 @@ static void FAST_FUNC echo_stream(int s, servtab_t *sep UNUSED_PARAM) xopen(bb_dev_null, O_WRONLY); BB_EXECVP("cat", (char**)cat_args); /* on failure we return to main, which does exit(EXIT_FAILURE) */ -#endif +# endif } static void FAST_FUNC echo_dg(int s, servtab_t *sep) { @@ -1512,10 +1588,10 @@ static void FAST_FUNC echo_dg(int s, servtab_t *sep) /* ARGSUSED */ static void FAST_FUNC discard_stream(int s, servtab_t *sep UNUSED_PARAM) { -#if BB_MMU +# if BB_MMU while (safe_read(s, line, LINE_SIZE) > 0) continue; -#else +# else /* We are after vfork here! */ /* move network socket to stdin */ xmove_fd(s, STDIN_FILENO); @@ -1526,7 +1602,7 @@ static void FAST_FUNC discard_stream(int s, servtab_t *sep UNUSED_PARAM) xdup2(STDOUT_FILENO, STDERR_FILENO); BB_EXECVP("cat", (char**)cat_args); /* on failure we return to main, which does exit(EXIT_FAILURE) */ -#endif +# endif } /* ARGSUSED */ static void FAST_FUNC discard_dg(int s, servtab_t *sep UNUSED_PARAM) @@ -1623,7 +1699,7 @@ static uint32_t machtime(void) struct timeval tv; gettimeofday(&tv, NULL); - return htonl((uint32_t)(tv.tv_sec + 2208988800)); + return htonl((uint32_t)(tv.tv_sec + 2208988800U)); } /* ARGSUSED */ static void FAST_FUNC machtime_stream(int s, servtab_t *sep UNUSED_PARAM)