diff options
Diffstat (limited to 'package/busybox/patches/110-telnetd.patch')
-rw-r--r-- | package/busybox/patches/110-telnetd.patch | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/package/busybox/patches/110-telnetd.patch b/package/busybox/patches/110-telnetd.patch new file mode 100644 index 0000000000..8ebb6de645 --- /dev/null +++ b/package/busybox/patches/110-telnetd.patch @@ -0,0 +1,51 @@ +diff -ruN busybox-1.2.0-old/networking/telnetd.c busybox-1.2.0-new/networking/telnetd.c +--- busybox-1.2.0-old/networking/telnetd.c 2006-07-01 00:42:02.000000000 +0200 ++++ busybox-1.2.0-new/networking/telnetd.c 2006-07-31 10:52:30.000000000 +0200 +@@ -44,6 +44,7 @@ + #include <arpa/telnet.h> + #include <ctype.h> + #include <sys/syslog.h> ++#include <net/if.h> + + #include "busybox.h" + +@@ -391,11 +392,13 @@ + struct in_addr bind_addr = { .s_addr = 0x0 }; + #endif /* CONFIG_FEATURE_TELNETD_INETD */ + int c; ++ char *interface_name = NULL; ++ struct ifreq interface; + static const char options[] = + #ifdef CONFIG_FEATURE_TELNETD_INETD +- "f:l:"; ++ "i:f:l:"; + #else /* CONFIG_EATURE_TELNETD_INETD */ +- "f:l:p:b:"; ++ "i:f:l:p:b:"; + #endif /* CONFIG_FEATURE_TELNETD_INETD */ + int maxlen, w, r; + +@@ -410,6 +413,9 @@ + case 'f': + issuefile = optarg; + break; ++ case 'i': ++ interface_name = strdup(optarg); ++ break; + case 'l': + loginpath = optarg; + break; +@@ -459,6 +465,13 @@ + sa.sin_addr = bind_addr; + #endif + ++ /* Set it to listen on the specified interface */ ++ if (interface_name) { ++ strncpy(interface.ifr_ifrn.ifrn_name, interface_name, IFNAMSIZ); ++ (void)setsockopt(master_fd, SOL_SOCKET, ++ SO_BINDTODEVICE, &interface, sizeof(interface)); ++ } ++ + bb_xbind(master_fd, (struct sockaddr *) &sa, sizeof(sa)); + bb_xlisten(master_fd, 1); + bb_xdaemon(0, 0); |