inetd: preparatory patch, no code changes

This commit is contained in:
Denis Vlasenko
2007-01-14 14:46:18 +00:00
parent d97c9244b1
commit d1a6e8d320

View File

@ -159,15 +159,15 @@
#include <syslog.h> #include <syslog.h>
#include <sys/un.h> #include <sys/un.h>
//#define CONFIG_FEATURE_INETD_RPC //#define ENABLE_FEATURE_INETD_RPC 1
//#define CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO //#define ENABLE_FEATURE_INETD_SUPPORT_BUILTIN_ECHO 1
//#define CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD //#define ENABLE_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD 1
//#define CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME //#define ENABLE_FEATURE_INETD_SUPPORT_BUILTIN_TIME 1
//#define CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME //#define ENABLE_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME 1
//#define CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN //#define ENABLE_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN 1
//#define CONFIG_FEATURE_IPV6 //#define ENABLE_FEATURE_IPV6 1
#ifdef CONFIG_FEATURE_INETD_RPC #if ENABLE_FEATURE_INETD_RPC
#include <rpc/rpc.h> #include <rpc/rpc.h>
#include <rpc/pmap_clnt.h> #include <rpc/pmap_clnt.h>
#endif #endif
@ -194,17 +194,17 @@ static struct rlimit rlim_ofile;
/* Check unsupporting builtin */ /* Check unsupporting builtin */
#if defined CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO || \ #if ENABLE_FEATURE_INETD_SUPPORT_BUILTIN_ECHO || \
defined CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD || \ ENABLE_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD || \
defined CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME || \ ENABLE_FEATURE_INETD_SUPPORT_BUILTIN_TIME || \
defined CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME || \ ENABLE_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME || \
defined CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN ENABLE_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN
# define INETD_FEATURE_ENABLED # define INETD_FEATURE_ENABLED
#endif #endif
#if defined CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO || \ #if ENABLE_FEATURE_INETD_SUPPORT_BUILTIN_ECHO || \
defined CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD || \ ENABLE_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD || \
defined CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN ENABLE_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN
# define INETD_SETPROCTITLE # define INETD_SETPROCTITLE
#endif #endif
@ -214,7 +214,7 @@ typedef struct servtab {
int se_socktype; /* type of socket to use */ int se_socktype; /* type of socket to use */
int se_family; /* address family */ int se_family; /* address family */
char *se_proto; /* protocol used */ char *se_proto; /* protocol used */
#ifdef CONFIG_FEATURE_INETD_RPC #if ENABLE_FEATURE_INETD_RPC
int se_rpcprog; /* rpc program number */ int se_rpcprog; /* rpc program number */
int se_rpcversl; /* rpc program lowest version */ int se_rpcversl; /* rpc program lowest version */
int se_rpcversh; /* rpc program highest version */ int se_rpcversh; /* rpc program highest version */
@ -236,7 +236,7 @@ typedef struct servtab {
union { union {
struct sockaddr se_un_ctrladdr; struct sockaddr se_un_ctrladdr;
struct sockaddr_in se_un_ctrladdr_in; struct sockaddr_in se_un_ctrladdr_in;
#ifdef CONFIG_FEATURE_IPV6 #if ENABLE_FEATURE_IPV6
struct sockaddr_in6 se_un_ctrladdr_in6; struct sockaddr_in6 se_un_ctrladdr_in6;
#endif #endif
struct sockaddr_un se_un_ctrladdr_un; struct sockaddr_un se_un_ctrladdr_un;
@ -264,53 +264,53 @@ struct builtin {
}; };
/* Echo received data */ /* Echo received data */
#ifdef CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO #if ENABLE_FEATURE_INETD_SUPPORT_BUILTIN_ECHO
static void echo_stream(int, servtab_t *); static void echo_stream(int, servtab_t *);
static void echo_dg(int, servtab_t *); static void echo_dg(int, servtab_t *);
#endif #endif
/* Internet /dev/null */ /* Internet /dev/null */
#ifdef CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD #if ENABLE_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD
static void discard_stream(int, servtab_t *); static void discard_stream(int, servtab_t *);
static void discard_dg(int, servtab_t *); static void discard_dg(int, servtab_t *);
#endif #endif
/* Return 32 bit time since 1900 */ /* Return 32 bit time since 1900 */
#ifdef CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME #if ENABLE_FEATURE_INETD_SUPPORT_BUILTIN_TIME
static void machtime_stream(int, servtab_t *); static void machtime_stream(int, servtab_t *);
static void machtime_dg(int, servtab_t *); static void machtime_dg(int, servtab_t *);
#endif #endif
/* Return human-readable time */ /* Return human-readable time */
#ifdef CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME #if ENABLE_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME
static void daytime_stream(int, servtab_t *); static void daytime_stream(int, servtab_t *);
static void daytime_dg(int, servtab_t *); static void daytime_dg(int, servtab_t *);
#endif #endif
/* Familiar character generator */ /* Familiar character generator */
#ifdef CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN #if ENABLE_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN
static void chargen_stream(int, servtab_t *); static void chargen_stream(int, servtab_t *);
static void chargen_dg(int, servtab_t *); static void chargen_dg(int, servtab_t *);
#endif #endif
static const struct builtin builtins[] = { static const struct builtin builtins[] = {
#ifdef CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO #if ENABLE_FEATURE_INETD_SUPPORT_BUILTIN_ECHO
/* Echo received data */ /* Echo received data */
{"echo", SOCK_STREAM, 1, 0, echo_stream,}, {"echo", SOCK_STREAM, 1, 0, echo_stream,},
{"echo", SOCK_DGRAM, 0, 0, echo_dg,}, {"echo", SOCK_DGRAM, 0, 0, echo_dg,},
#endif #endif
#ifdef CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD #if ENABLE_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD
/* Internet /dev/null */ /* Internet /dev/null */
{"discard", SOCK_STREAM, 1, 0, discard_stream,}, {"discard", SOCK_STREAM, 1, 0, discard_stream,},
{"discard", SOCK_DGRAM, 0, 0, discard_dg,}, {"discard", SOCK_DGRAM, 0, 0, discard_dg,},
#endif #endif
#ifdef CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME #if ENABLE_FEATURE_INETD_SUPPORT_BUILTIN_TIME
/* Return 32 bit time since 1900 */ /* Return 32 bit time since 1900 */
{"time", SOCK_STREAM, 0, 0, machtime_stream,}, {"time", SOCK_STREAM, 0, 0, machtime_stream,},
{"time", SOCK_DGRAM, 0, 0, machtime_dg,}, {"time", SOCK_DGRAM, 0, 0, machtime_dg,},
#endif #endif
#ifdef CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME #if ENABLE_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME
/* Return human-readable time */ /* Return human-readable time */
{"daytime", SOCK_STREAM, 0, 0, daytime_stream,}, {"daytime", SOCK_STREAM, 0, 0, daytime_stream,},
{"daytime", SOCK_DGRAM, 0, 0, daytime_dg,}, {"daytime", SOCK_DGRAM, 0, 0, daytime_dg,},
#endif #endif
#ifdef CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN #if ENABLE_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN
/* Familiar character generator */ /* Familiar character generator */
{"chargen", SOCK_STREAM, 1, 0, chargen_stream,}, {"chargen", SOCK_STREAM, 1, 0, chargen_stream,},
{"chargen", SOCK_DGRAM, 0, 0, chargen_dg,}, {"chargen", SOCK_DGRAM, 0, 0, chargen_dg,},
@ -364,7 +364,7 @@ static void endconfig(void)
defhost = 0; defhost = 0;
} }
#ifdef CONFIG_FEATURE_INETD_RPC #if ENABLE_FEATURE_INETD_RPC
static void register_rpc(servtab_t *sep) static void register_rpc(servtab_t *sep)
{ {
int n; int n;
@ -401,7 +401,7 @@ static void unregister_rpc(servtab_t *sep)
bb_error_msg("pmap_unset(%u, %u)", sep->se_rpcprog, n); bb_error_msg("pmap_unset(%u, %u)", sep->se_rpcprog, n);
} }
} }
#endif /* CONFIG_FEATURE_INETD_RPC */ #endif /* FEATURE_INETD_RPC */
static void freeconfig(servtab_t *cp) static void freeconfig(servtab_t *cp)
{ {
@ -417,13 +417,13 @@ static void freeconfig(servtab_t *cp)
free(cp->se_argv[i]); free(cp->se_argv[i]);
} }
static int bump_nofile (void) static int bump_nofile(void)
{ {
#define FD_CHUNK 32 #define FD_CHUNK 32
struct rlimit rl; struct rlimit rl;
if (getrlimit (RLIMIT_NOFILE, &rl) < 0) { if (getrlimit(RLIMIT_NOFILE, &rl) < 0) {
bb_perror_msg("getrlimit"); bb_perror_msg("getrlimit");
return -1; return -1;
} }
@ -456,7 +456,7 @@ static void setup(servtab_t *sep)
if (setsockopt_reuseaddr(sep->se_fd) < 0) if (setsockopt_reuseaddr(sep->se_fd) < 0)
bb_perror_msg("setsockopt(SO_REUSEADDR)"); bb_perror_msg("setsockopt(SO_REUSEADDR)");
#ifdef CONFIG_FEATURE_INETD_RPC #if ENABLE_FEATURE_INETD_RPC
if (isrpcservice(sep)) { if (isrpcservice(sep)) {
struct passwd *pwd; struct passwd *pwd;
@ -577,7 +577,7 @@ static servtab_t *dupconfig(servtab_t *sep)
newtab->se_socktype = sep->se_socktype; newtab->se_socktype = sep->se_socktype;
newtab->se_family = sep->se_family; newtab->se_family = sep->se_family;
newtab->se_proto = xstrdup(sep->se_proto); newtab->se_proto = xstrdup(sep->se_proto);
#ifdef CONFIG_FEATURE_INETD_RPC #if ENABLE_FEATURE_INETD_RPC
newtab->se_rpcprog = sep->se_rpcprog; newtab->se_rpcprog = sep->se_rpcprog;
newtab->se_rpcversl = sep->se_rpcversl; newtab->se_rpcversl = sep->se_rpcversl;
newtab->se_rpcversh = sep->se_rpcversh; newtab->se_rpcversh = sep->se_rpcversh;
@ -669,13 +669,13 @@ static servtab_t *getconfigent(void)
} else { } else {
sep->se_family = AF_INET; sep->se_family = AF_INET;
if (sep->se_proto[strlen(sep->se_proto) - 1] == '6') if (sep->se_proto[strlen(sep->se_proto) - 1] == '6')
#ifdef CONFIG_FEATURE_IPV6 #if ENABLE_FEATURE_IPV6
sep->se_family = AF_INET6; sep->se_family = AF_INET6;
#else #else
bb_error_msg("%s: IPV6 not supported", sep->se_proto); bb_error_msg("%s: IPV6 not supported", sep->se_proto);
#endif #endif
if (strncmp(sep->se_proto, "rpc/", 4) == 0) { if (strncmp(sep->se_proto, "rpc/", 4) == 0) {
#ifdef CONFIG_FEATURE_INETD_RPC #if ENABLE_FEATURE_INETD_RPC
char *p, *ccp; char *p, *ccp;
long l; long l;
@ -872,7 +872,7 @@ static servtab_t *enter(servtab_t *cp)
sep = new_servtab(); sep = new_servtab();
*sep = *cp; *sep = *cp;
sep->se_fd = -1; sep->se_fd = -1;
#ifdef CONFIG_FEATURE_INETD_RPC #if ENABLE_FEATURE_INETD_RPC
sep->se_rpcprog = -1; sep->se_rpcprog = -1;
#endif #endif
Block_Using_Signals(omask); Block_Using_Signals(omask);
@ -906,7 +906,7 @@ static int matchconf(servtab_t *old, servtab_t *new)
sizeof(new->se_ctrladdr_in.sin_addr)) != 0) sizeof(new->se_ctrladdr_in.sin_addr)) != 0)
return 0; return 0;
#ifdef CONFIG_FEATURE_IPV6 #if ENABLE_FEATURE_IPV6
if (old->se_family == AF_INET6 && new->se_family == AF_INET6 && if (old->se_family == AF_INET6 && new->se_family == AF_INET6 &&
memcmp(&old->se_ctrladdr_in6.sin6_addr, memcmp(&old->se_ctrladdr_in6.sin6_addr,
&new->se_ctrladdr_in6.sin6_addr, &new->se_ctrladdr_in6.sin6_addr,
@ -961,7 +961,7 @@ static void config(int sig ATTRIBUTE_UNUSED)
SWAP(char *, sep->se_argv[i], cp->se_argv[i]); SWAP(char *, sep->se_argv[i], cp->se_argv[i]);
#undef SWAP #undef SWAP
#ifdef CONFIG_FEATURE_INETD_RPC #if ENABLE_FEATURE_INETD_RPC
if (isrpcservice(sep)) if (isrpcservice(sep))
unregister_rpc(sep); unregister_rpc(sep);
sep->se_rpcversl = cp->se_rpcversl; sep->se_rpcversl = cp->se_rpcversl;
@ -992,7 +992,7 @@ static void config(int sig ATTRIBUTE_UNUSED)
/* se_ctrladdr_in was set in getconfigent */ /* se_ctrladdr_in was set in getconfigent */
sep->se_ctrladdr_size = sizeof sep->se_ctrladdr_in; sep->se_ctrladdr_size = sizeof sep->se_ctrladdr_in;
#ifdef CONFIG_FEATURE_INETD_RPC #if ENABLE_FEATURE_INETD_RPC
if (isrpcservice(sep)) { if (isrpcservice(sep)) {
struct rpcent *rp; struct rpcent *rp;
// FIXME: atoi_or_else(str, 0) would be handy here // FIXME: atoi_or_else(str, 0) would be handy here
@ -1039,13 +1039,13 @@ static void config(int sig ATTRIBUTE_UNUSED)
setup(sep); setup(sep);
} }
break; break;
#ifdef CONFIG_FEATURE_IPV6 #if ENABLE_FEATURE_IPV6
case AF_INET6: case AF_INET6:
sep->se_ctrladdr_in6.sin6_family = AF_INET6; sep->se_ctrladdr_in6.sin6_family = AF_INET6;
/* se_ctrladdr_in was set in getconfigent */ /* se_ctrladdr_in was set in getconfigent */
sep->se_ctrladdr_size = sizeof sep->se_ctrladdr_in6; sep->se_ctrladdr_size = sizeof sep->se_ctrladdr_in6;
#ifdef CONFIG_FEATURE_INETD_RPC #if ENABLE_FEATURE_INETD_RPC
if (isrpcservice(sep)) { if (isrpcservice(sep)) {
struct rpcent *rp; struct rpcent *rp;
@ -1092,7 +1092,7 @@ static void config(int sig ATTRIBUTE_UNUSED)
setup(sep); setup(sep);
} }
break; break;
#endif /* CONFIG_FEATURE_IPV6 */ #endif /* FEATURE_IPV6 */
} }
serv_unknown: serv_unknown:
if (cp->se_next != NULL) { if (cp->se_next != NULL) {
@ -1122,7 +1122,7 @@ static void config(int sig ATTRIBUTE_UNUSED)
nsock--; nsock--;
(void) close(sep->se_fd); (void) close(sep->se_fd);
} }
#ifdef CONFIG_FEATURE_INETD_RPC #if ENABLE_FEATURE_INETD_RPC
if (isrpcservice(sep)) if (isrpcservice(sep))
unregister_rpc(sep); unregister_rpc(sep);
#endif #endif
@ -1171,11 +1171,11 @@ static void retry(int sig ATTRIBUTE_UNUSED)
switch (sep->se_family) { switch (sep->se_family) {
case AF_UNIX: case AF_UNIX:
case AF_INET: case AF_INET:
#ifdef CONFIG_FEATURE_IPV6 #if ENABLE_FEATURE_IPV6
case AF_INET6: case AF_INET6:
#endif #endif
setup(sep); setup(sep);
#ifdef CONFIG_FEATURE_INETD_RPC #if ENABLE_FEATURE_INETD_RPC
if (sep->se_fd != -1 && isrpcservice(sep)) if (sep->se_fd != -1 && isrpcservice(sep))
register_rpc(sep); register_rpc(sep);
#endif #endif
@ -1199,10 +1199,10 @@ static void goaway(int sig ATTRIBUTE_UNUSED)
(void) unlink(sep->se_service); (void) unlink(sep->se_service);
break; break;
case AF_INET: case AF_INET:
#ifdef CONFIG_FEATURE_IPV6 #if ENABLE_FEATURE_IPV6
case AF_INET6: case AF_INET6:
#endif #endif
#ifdef CONFIG_FEATURE_INETD_RPC #if ENABLE_FEATURE_INETD_RPC
if (sep->se_wait == 1 && isrpcservice(sep)) if (sep->se_wait == 1 && isrpcservice(sep))
unregister_rpc(sep); /* XXX signal race */ unregister_rpc(sep); /* XXX signal race */
#endif #endif
@ -1526,9 +1526,9 @@ do_exit1:
*/ */
#define BUFSIZE 4096 #define BUFSIZE 4096
#if defined(CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO) || \ #if ENABLE_FEATURE_INETD_SUPPORT_BUILTIN_ECHO || \
defined(CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN) || \ ENABLE_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN || \
defined(CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME) ENABLE_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME
static int dg_badinput(struct sockaddr_in *dg_sin) static int dg_badinput(struct sockaddr_in *dg_sin)
{ {
if (ntohs(dg_sin->sin_port) < IPPORT_RESERVED) if (ntohs(dg_sin->sin_port) < IPPORT_RESERVED)
@ -1540,7 +1540,7 @@ static int dg_badinput(struct sockaddr_in *dg_sin)
} }
#endif #endif
#ifdef CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO #if ENABLE_FEATURE_INETD_SUPPORT_BUILTIN_ECHO
/* Echo service -- echo data back */ /* Echo service -- echo data back */
/* ARGSUSED */ /* ARGSUSED */
static void static void
@ -1578,9 +1578,9 @@ echo_dg(int s, servtab_t *sep ATTRIBUTE_UNUSED)
return; return;
(void) sendto(s, buffer, i, 0, &sa, sizeof(sa)); (void) sendto(s, buffer, i, 0, &sa, sizeof(sa));
} }
#endif /* CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO */ #endif /* FEATURE_INETD_SUPPORT_BUILTIN_ECHO */
#ifdef CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD #if ENABLE_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD
/* Discard service -- ignore data */ /* Discard service -- ignore data */
/* ARGSUSED */ /* ARGSUSED */
static void static void
@ -1605,10 +1605,10 @@ discard_dg(int s, servtab_t *sep ATTRIBUTE_UNUSED)
(void) read(s, buffer, sizeof(buffer)); (void) read(s, buffer, sizeof(buffer));
} }
#endif /* CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD */ #endif /* FEATURE_INETD_SUPPORT_BUILTIN_DISCARD */
#ifdef CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN #if ENABLE_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN
#define LINESIZ 72 #define LINESIZ 72
static char ring[128]; static char ring[128];
static char *endring; static char *endring;
@ -1695,10 +1695,10 @@ chargen_dg(int s, servtab_t *sep ATTRIBUTE_UNUSED)
text[LINESIZ + 1] = '\n'; text[LINESIZ + 1] = '\n';
(void) sendto(s, text, sizeof(text), 0, &sa, sizeof(sa)); (void) sendto(s, text, sizeof(text), 0, &sa, sizeof(sa));
} }
#endif /* CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN */ #endif /* FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN */
#ifdef CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME #if ENABLE_FEATURE_INETD_SUPPORT_BUILTIN_TIME
/* /*
* Return a machine readable date and time, in the form of the * Return a machine readable date and time, in the form of the
* number of seconds since midnight, Jan 1, 1900. Since gettimeofday * number of seconds since midnight, Jan 1, 1900. Since gettimeofday
@ -1749,19 +1749,20 @@ machtime_dg(int s, servtab_t *sep ATTRIBUTE_UNUSED)
result = machtime(); result = machtime();
(void) sendto(s, (char *) &result, sizeof(result), 0, &sa, sizeof(sa)); (void) sendto(s, (char *) &result, sizeof(result), 0, &sa, sizeof(sa));
} }
#endif /* CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME */ #endif /* FEATURE_INETD_SUPPORT_BUILTIN_TIME */
#ifdef CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME #if ENABLE_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME
/* Return human-readable time of day */ /* Return human-readable time of day */
/* ARGSUSED */ /* ARGSUSED */
static void daytime_stream(int s, servtab_t *sep ATTRIBUTE_UNUSED) static void daytime_stream(int s, servtab_t *sep ATTRIBUTE_UNUSED)
{ {
char buffer[256]; char buffer[32];
time_t t; time_t t;
t = time(NULL); t = time(NULL);
// fdprintf instead?
(void) sprintf(buffer, "%.24s\r\n", ctime(&t)); (void) sprintf(buffer, "%.24s\r\n", ctime(&t));
(void) write(s, buffer, strlen(buffer)); (void) write(s, buffer, strlen(buffer));
} }
@ -1787,4 +1788,4 @@ daytime_dg(int s, servtab_t *sep ATTRIBUTE_UNUSED)
(void) sprintf(buffer, "%.24s\r\n", ctime(&t)); (void) sprintf(buffer, "%.24s\r\n", ctime(&t));
(void) sendto(s, buffer, strlen(buffer), 0, &sa, sizeof(sa)); (void) sendto(s, buffer, strlen(buffer), 0, &sa, sizeof(sa));
} }
#endif /* CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME */ #endif /* FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME */