telnetd -b (bind to specific address) support from Iuri Gomes Diniz.

This commit is contained in:
Rob Landley 2005-11-10 22:37:40 +00:00
parent 990025a7d9
commit 64a5f96780
2 changed files with 10 additions and 1 deletions

View File

@ -2951,6 +2951,7 @@
"Telnetd listens for incoming TELNET connections on PORT.\n" \ "Telnetd listens for incoming TELNET connections on PORT.\n" \
"Options:\n" \ "Options:\n" \
"\t-p PORT\tlisten for connections on PORT (default 23)\n" \ "\t-p PORT\tlisten for connections on PORT (default 23)\n" \
"\t-b ADDR\tlisten for connections on ADDR (default 0.0.0.0)\n"\
"\t-l LOGIN\texec LOGIN on connect (default /bin/sh)\n" \ "\t-l LOGIN\texec LOGIN on connect (default /bin/sh)\n" \
"\t-f issue_file\tDisplay issue_file instead of /etc/issue" "\t-f issue_file\tDisplay issue_file instead of /etc/issue"
#endif #endif

View File

@ -33,6 +33,7 @@
#include <unistd.h> #include <unistd.h>
#include <errno.h> #include <errno.h>
#include <netinet/in.h> #include <netinet/in.h>
#include <arpa/inet.h>
#include <fcntl.h> #include <fcntl.h>
#include <stdio.h> #include <stdio.h>
#include <signal.h> #include <signal.h>
@ -390,13 +391,14 @@ telnetd_main(int argc, char **argv)
#ifndef CONFIG_FEATURE_TELNETD_INETD #ifndef CONFIG_FEATURE_TELNETD_INETD
int on = 1; int on = 1;
int portnbr = 23; int portnbr = 23;
struct in_addr bind_addr = { .s_addr = 0x0 };
#endif /* CONFIG_FEATURE_TELNETD_INETD */ #endif /* CONFIG_FEATURE_TELNETD_INETD */
int c; int c;
static const char options[] = static const char options[] =
#ifdef CONFIG_FEATURE_TELNETD_INETD #ifdef CONFIG_FEATURE_TELNETD_INETD
"f:l:"; "f:l:";
#else /* CONFIG_EATURE_TELNETD_INETD */ #else /* CONFIG_EATURE_TELNETD_INETD */
"f:l:p:"; "f:l:p:b:";
#endif /* CONFIG_FEATURE_TELNETD_INETD */ #endif /* CONFIG_FEATURE_TELNETD_INETD */
int maxlen, w, r; int maxlen, w, r;
@ -418,6 +420,10 @@ telnetd_main(int argc, char **argv)
case 'p': case 'p':
portnbr = atoi(optarg); portnbr = atoi(optarg);
break; break;
case 'b':
if (inet_aton(optarg, &bind_addr) == 0)
bb_show_usage();
break;
#endif /* CONFIG_FEATURE_TELNETD_INETD */ #endif /* CONFIG_FEATURE_TELNETD_INETD */
default: default:
bb_show_usage(); bb_show_usage();
@ -452,9 +458,11 @@ telnetd_main(int argc, char **argv)
#ifdef CONFIG_FEATURE_IPV6 #ifdef CONFIG_FEATURE_IPV6
sa.sin6_family = AF_INET6; sa.sin6_family = AF_INET6;
sa.sin6_port = htons(portnbr); sa.sin6_port = htons(portnbr);
/* sa.sin6_addr = bind_addr6; */
#else #else
sa.sin_family = AF_INET; sa.sin_family = AF_INET;
sa.sin_port = htons(portnbr); sa.sin_port = htons(portnbr);
sa.sin_addr = bind_addr;
#endif #endif
if (bind(master_fd, (struct sockaddr *) &sa, sizeof(sa)) < 0) { if (bind(master_fd, (struct sockaddr *) &sa, sizeof(sa)) < 0) {