telnetd -b (bind to specific address) support from Iuri Gomes Diniz.
This commit is contained in:
parent
990025a7d9
commit
64a5f96780
@ -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
|
||||||
|
@ -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) {
|
||||||
|
Loading…
Reference in New Issue
Block a user