*** empty log message ***
[openwrt-10.03/.git] / package / busybox / patches / 110-telnetd.patch
diff --git a/package/busybox/patches/110-telnetd.patch b/package/busybox/patches/110-telnetd.patch
new file mode 100644 (file)
index 0000000..e95757e
--- /dev/null
@@ -0,0 +1,53 @@
+diff -urN busybox-1.00-pre8/networking/telnetd.c busybox-1.00-pre8-openwrt/networking/telnetd.c
+--- busybox-1.00-pre8/networking/telnetd.c     2004-02-22 03:45:57.000000000 -0600
++++ busybox-1.00-pre8-openwrt/networking/telnetd.c     2004-03-05 01:32:57.000000000 -0600
+@@ -44,6 +44,8 @@
+ #include <arpa/telnet.h>
+ #include <ctype.h>
+ #include <sys/syslog.h>
++#include <net/if.h>
++
+ #include "busybox.h"
+@@ -384,11 +386,13 @@
+       int portnbr = 23;
+ #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:";
+-#else /* CONFIG_EATURE_TELNETD_INETD */
+-              "f:l:p:";
++              "i:f:l:";
++#else /* CONFIG_FEATURE_TELNETD_INETD */
++              "i:f:l:p:";
+ #endif /* CONFIG_FEATURE_TELNETD_INETD */
+       int maxlen, w, r;
+@@ -403,6 +407,9 @@
+                       case 'f':
+                               issuefile = strdup (optarg);
+                               break;
++                        case 'i':
++                                interface_name = strdup(optarg);
++                                break;
+                       case 'l':
+                               loginpath = strdup (optarg);
+                               break;
+@@ -442,6 +449,13 @@
+       sa.sin_family = AF_INET;
+       sa.sin_port = htons(portnbr);
++        /* 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));
++        }
++
+       if (bind(master_fd, (struct sockaddr *) &sa, sizeof(sa)) < 0) {
+               bb_perror_msg_and_die("bind");
+       }