udpsvd: next part of ipsvd applets (not working yet)

This commit is contained in:
Denis Vlasenko 2007-04-01 19:10:36 +00:00
parent 57a426b15b
commit 60fadaca28
5 changed files with 19 additions and 7 deletions

View File

@ -311,6 +311,7 @@ USE_TTY(APPLET(tty, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
//USE_TUNE2FS(APPLET(tune2fs, _BB_DIR_SBIN, _BB_SUID_NEVER)) //USE_TUNE2FS(APPLET(tune2fs, _BB_DIR_SBIN, _BB_SUID_NEVER))
USE_APP_UDHCPC(APPLET(udhcpc, _BB_DIR_SBIN, _BB_SUID_NEVER)) USE_APP_UDHCPC(APPLET(udhcpc, _BB_DIR_SBIN, _BB_SUID_NEVER))
USE_APP_UDHCPD(APPLET(udhcpd, _BB_DIR_USR_SBIN, _BB_SUID_NEVER)) USE_APP_UDHCPD(APPLET(udhcpd, _BB_DIR_USR_SBIN, _BB_SUID_NEVER))
USE_UDPSVD(APPLET(udpsvd, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
USE_UMOUNT(APPLET(umount, _BB_DIR_BIN, _BB_SUID_NEVER)) USE_UMOUNT(APPLET(umount, _BB_DIR_BIN, _BB_SUID_NEVER))
USE_UNAME(APPLET(uname, _BB_DIR_BIN, _BB_SUID_NEVER)) USE_UNAME(APPLET(uname, _BB_DIR_BIN, _BB_SUID_NEVER))
USE_UNCOMPRESS(APPLET(uncompress, _BB_DIR_BIN, _BB_SUID_NEVER)) USE_UNCOMPRESS(APPLET(uncompress, _BB_DIR_BIN, _BB_SUID_NEVER))

View File

@ -3348,6 +3348,11 @@ USE_FEATURE_RUN_PARTS_FANCY("\n -l Prints names of all matching files even when
"\n-E Do not set up TCP-related environment variables" \ "\n-E Do not set up TCP-related environment variables" \
"\n-v Verbose" "\n-v Verbose"
#define udpsvd_trivial_usage \
"TODO"
#define udpsvd_full_usage \
"TODO"
#define tftp_trivial_usage \ #define tftp_trivial_usage \
"[OPTION]... HOST [PORT]" "[OPTION]... HOST [PORT]"
#define tftp_full_usage \ #define tftp_full_usage \

View File

@ -9,6 +9,12 @@ config TCPSVD
bool "tcpsvd" bool "tcpsvd"
default n default n
help help
tcpsvd listens on a port and runs a program for each new connection tcpsvd listens on a tcp port and runs a program for each new connection
config UDPSVD
bool "udpsvd"
default n
help
udpsvd listens on a udp port and runs a program for each new connection
endmenu endmenu

View File

@ -6,3 +6,4 @@
lib-y:= lib-y:=
lib-$(CONFIG_TCPSVD) += tcpsvd.o ipsvd_perhost.o lib-$(CONFIG_TCPSVD) += tcpsvd.o ipsvd_perhost.o
lib-$(CONFIG_UDPSVD) += udpsvd.o

View File

@ -126,7 +126,6 @@ int tcpsvd_main(int argc, char **argv)
socklen_t sockadr_size; socklen_t sockadr_size;
uint16_t local_port = local_port; uint16_t local_port = local_port;
uint16_t remote_port; uint16_t remote_port;
unsigned port;
char *local_hostname = NULL; char *local_hostname = NULL;
char *remote_hostname = (char*)""; /* "" used if no -h */ char *remote_hostname = (char*)""; /* "" used if no -h */
char *local_ip = local_ip; char *local_ip = local_ip;
@ -221,8 +220,8 @@ int tcpsvd_main(int argc, char **argv)
if (max_per_host) if (max_per_host)
ipsvd_perhost_init(cmax); ipsvd_perhost_init(cmax);
port = bb_lookup_port(argv[1], "tcp", 0); local_port = bb_lookup_port(argv[1], "tcp", 0);
sock = create_and_bind_stream_or_die(argv[0], port); sock = create_and_bind_stream_or_die(argv[0], local_port);
xlisten(sock, backlog); xlisten(sock, backlog);
/* ndelay_off(sock); - it is the default I think? */ /* ndelay_off(sock); - it is the default I think? */
@ -238,7 +237,7 @@ int tcpsvd_main(int argc, char **argv)
if (verbose) { if (verbose) {
/* we do it only for ":port" cosmetics... oh well */ /* we do it only for ":port" cosmetics... oh well */
len_and_sockaddr *lsa = xhost2sockaddr(argv[0], port); len_and_sockaddr *lsa = xhost2sockaddr(argv[0], local_port);
char *addr = xmalloc_sockaddr2dotted(&lsa->sa, lsa->len); char *addr = xmalloc_sockaddr2dotted(&lsa->sa, lsa->len);
printf("%s: info: listening on %s", applet_name, addr); printf("%s: info: listening on %s", applet_name, addr);
@ -246,7 +245,7 @@ int tcpsvd_main(int argc, char **argv)
#ifndef SSLSVD #ifndef SSLSVD
if (option_mask32 & OPT_u) if (option_mask32 & OPT_u)
printf(", uid %u, gid %u", printf(", uid %u, gid %u",
(unsigned)ugid.uid, (unsigned)ugid.uid); (unsigned)ugid.uid, (unsigned)ugid.gid);
#endif #endif
puts(", starting"); puts(", starting");
} }
@ -356,7 +355,7 @@ int tcpsvd_main(int argc, char **argv)
sockadr_size = sizeof(sock_adr); sockadr_size = sizeof(sock_adr);
if (getsockopt(conn, SOL_IP, SO_ORIGINAL_DST, &sock_adr.sa, &sockadr_size) == 0) { if (getsockopt(conn, SOL_IP, SO_ORIGINAL_DST, &sock_adr.sa, &sockadr_size) == 0) {
char *ip = xmalloc_sockaddr2dotted_noport(&sock_adr.sa, sockadr_size); char *ip = xmalloc_sockaddr2dotted_noport(&sock_adr.sa, sockadr_size);
port = get_nport(&sock_adr.sa); unsigned port = get_nport(&sock_adr.sa);
port = ntohs(port); port = ntohs(port);
xsetenv("TCPORIGDSTIP", ip); xsetenv("TCPORIGDSTIP", ip);
xsetenv("TCPORIGDSTPORT", utoa(port)); xsetenv("TCPORIGDSTPORT", utoa(port));