telnetd -b (bind to specific address) support from Iuri Gomes Diniz.
This commit was genuinely broken at the time (not related to our build system): scripts/config/mkconfigs.c (2005-08-01 - 2006-10-05 arasi) uretilen bbconfigopts.h icine .config satirlarini kacissiz, ham newline'larla gömüyordu - gecerli C degildi, busybox'un kendi bb_mkdep araci bile parse edemiyordu (7d219aab7 ile duzeltildi, mkconfigs shell scripte cevrildi)
No binary (build failed)
—
(log yok)
| @@ -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 | |
| @@ -33,6 +33,7 @@ | |
| #include <unistd.h> | |
| #include <errno.h> | |
| #include <netinet/in.h> | |
| + | #include <arpa/inet.h> |
| #include <fcntl.h> | |
| #include <stdio.h> | |
| #include <signal.h> | |
| @@ -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) { | |