From 64a5f96780a6a507c577629a5697cdbb53f7bc9b Mon Sep 17 00:00:00 2001 From: Rob Landley Date: Thu, 10 Nov 2005 22:37:40 +0000 Subject: [PATCH] telnetd -b (bind to specific address) support from Iuri Gomes Diniz. --- include/usage.h | 1 + networking/telnetd.c | 10 +++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/include/usage.h b/include/usage.h index a82230e41..4b27984f3 100644 --- a/include/usage.h +++ b/include/usage.h @@ -2951,6 +2951,7 @@ "Telnetd listens for incoming TELNET connections on PORT.\n" \ "Options:\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-f issue_file\tDisplay issue_file instead of /etc/issue" #endif diff --git a/networking/telnetd.c b/networking/telnetd.c index b3d0a1166..d5de8903c 100644 --- a/networking/telnetd.c +++ b/networking/telnetd.c @@ -33,6 +33,7 @@ #include #include #include +#include #include #include #include @@ -390,13 +391,14 @@ telnetd_main(int argc, char **argv) #ifndef CONFIG_FEATURE_TELNETD_INETD int on = 1; int portnbr = 23; + struct in_addr bind_addr = { .s_addr = 0x0 }; #endif /* CONFIG_FEATURE_TELNETD_INETD */ int c; static const char options[] = #ifdef CONFIG_FEATURE_TELNETD_INETD "f:l:"; #else /* CONFIG_EATURE_TELNETD_INETD */ - "f:l:p:"; + "f:l:p:b:"; #endif /* CONFIG_FEATURE_TELNETD_INETD */ int maxlen, w, r; @@ -418,6 +420,10 @@ telnetd_main(int argc, char **argv) case 'p': portnbr = atoi(optarg); break; + case 'b': + if (inet_aton(optarg, &bind_addr) == 0) + bb_show_usage(); + break; #endif /* CONFIG_FEATURE_TELNETD_INETD */ default: bb_show_usage(); @@ -452,9 +458,11 @@ telnetd_main(int argc, char **argv) #ifdef CONFIG_FEATURE_IPV6 sa.sin6_family = AF_INET6; sa.sin6_port = htons(portnbr); + /* sa.sin6_addr = bind_addr6; */ #else sa.sin_family = AF_INET; sa.sin_port = htons(portnbr); + sa.sin_addr = bind_addr; #endif if (bind(master_fd, (struct sockaddr *) &sa, sizeof(sa)) < 0) { -- 2.25.1